Read this before comparing scores
About a third of the training mixture targets the benchmark directly: 8,422 examples built from the EuroEval train splits, formatted exactly the way EuroEval prompts an instruction-tuned model at eval time, plus 5,269 synthetic Danish multiple-choice questions generated with DeepSeek and filtered by a Gemini judge. EuroEval draws its few-shot examples from those same train splits, so this is training on the benchmark's own example pool and answer format.
Val and test splits were excluded, and we checked rather than assumed: every training prompt was hashed (NFKC-normalized) against the val and test sets of its dataset. Zero overlap.
One dataset had to be thrown out entirely. The train split of danish-citizen-tests-updated contains the same questions as its own val and test splits, because the real Danish citizenship test reuses questions across years. Training on it would have meant memorizing test answers, so it contributes nothing here; the synthetic civics questions stand in for it.
The practical takeaway: the scores below are real, but part of the gain comes from knowing the exam format. If you are comparing against general-purpose models, this model has an advantage they lack.
Results
EuroEval Danish test split, one run, same harness and settings for all three models. The metric per dataset is the one EuroEval ranks on.
Table with columns: Dataset, Metric, Base, da-sft (v1), da-task (this), vs. base| Dataset | Metric | Base | da-sft (v1) | da-task (this) | vs. base |
|---|
| AngryTweets | MCC | 38.88 | 41.70 | 43.06 | +4.18 |
| ScaLA-da | MCC | 31.28 | 31.13 | 31.54 | +0.26 |
| DANSK (NER) | micro-F1 | 42.87 | 44.93 | 54.89 | +12.02 |
| MultiWikiQA-da | F1 | 74.52 | 76.17 | 79.06 |
Mean improvement over the base model: +4.11 (the v1 model managed +0.90). All eight datasets are up, and the common-sense regression that v1 introduced on HellaSwag-da (it dropped 3.4 points below base) is gone.
We later ran the same recipe with five times the ScaLA data and twice the civics questions. It scored about the same on the validation split, so the recipe appears to have hit its ceiling and we kept this version.
Training
The mixture is 42,789 examples: 15,098 Danish instruction pairs generated with DeepSeek from modern Danish source text, 8,422 benchmark train-split examples (30% of them as multi-turn few-shot variants matching the eval-time chat shape), 5,269 synthetic multiple-choice items, 3,000 answer-format examples, 6,000 from skolegpt-instruct, and 5,000 English examples from OpenHermes-2.5 to limit forgetting. Training was LoRA rank 128 on all linear layers, learning rate 5e-5, one epoch, bf16, sequences up to 4096 tokens.
The merge strength was chosen on the validation split from 1.0, 0.6, and 0.3, under a rule fixed before the sweep: highest mean, with no task allowed to fall more than 3 points below base. Full strength scored higher on average but broke that rule (ScaLA and the citizen tests both regressed hard), so 0.3 won. The test split was evaluated once, on that single candidate.
Limitations
The model is built for Danish tasks of the kind EuroEval measures. Because a third of its training data is benchmark-shaped, the scores overstate how much better it is at open-ended Danish than the base model. English ability is mostly retained but was not a goal. The base model's vision components are carried over untrained and untested. All numbers are single-run; differences of a point or two between models are within normal variation.
License
Apache-2.0, following the base model. This is an independent fine-tune with no affiliation to or endorsement from Alibaba, the Qwen team, DeepSeek, or Google. The Danish source text comes from the Dynaword corpus; the English replay data is from OpenHermes-2.5.