LoRA adapter for Danish grammatical improvement via GRPO (Group Relative Policy Optimization), part of the SAGA (Syntax-Aligned Grammar Adaptation) project.
1from peft import PeftModel
2from transformers import AutoModelForCausalLM, AutoTokenizer
3
4base = AutoModelForCausalLM.from_pretrained("AI-Sweden-Models/gpt-sw3-1.3b")
5model = PeftModel.from_pretrained(base, "acbueff/gpt-sw3-1.3b-da-saga-grpo")
6tokenizer = AutoTokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-1.3b")
7
8prompt = "Den danske regering har besluttet at"
9inputs = tokenizer(prompt, return_tensors="pt")
10outputs = model.generate(**inputs, max_new_tokens=100)
11print(tokenizer.decode(outputs[0], skip_special_tokens=True))
GRPO improves parse success by +4.5pp and parse score by +17% while preserving perplexity (16.0 vs 16.01 base).
No reward hacking detected. Oracle and Stanza improvements track closely; lexical diversity is unchanged.
GRPO maintains near-base RC accuracy while improving answer grammaticality. Delta-DPO over-optimises for form at the expense of content accuracy.
1# config/danish_1b3.yaml + config/danish_1b3_local.yaml
2model:
3 name: AI-Sweden-Models/gpt-sw3-1.3b
4 bf16: true
5grpo:
6 learning_rate: 1.0e-5
7 num_epochs: 1
8 batch_size: 256
9 num_generations: 8
10reward:
11 model_name: da_core_news_lg
12 mode: score
13dataset:
14 name: wikimedia/wikipedia
15 max_samples: 10000
SAGA uses symbolic parsers as deterministic grammar oracles to improve LLM grammaticality via reinforcement learning, with no human annotation needed. This adapter is part of the DA 1.3B method comparison (GRPO vs DPO vs SDPO vs Delta-DPO).