ufakzeka-1: Building and Evaluating a 151M-Parameter Turkish Language Model from Scratch
Organizations: ufak AI
Abstract
We describe ufakzeka-1, a 151M-parameter (182M with embeddings) decoder-only Turkish language model pretrained from scratch on 13.5B tokens of openly licensed text and instruction-tuned for chat, at a total cost of about $286 in cloud GPU, API and notebook time. The contribution is not the model's capability, which is what a model this size can be expected to have, but the record of building and measuring it: a Turkish byte-level tokenizer at 1.77 tokens per word, a three-stage pretraining schedule, a post-training mixture of openly licensed and generated data, and an evaluation battery of release gates, a rule-checked sweep of 5,508 conversations, judged conversations and hand tests, all with prompts held out from the training data, enforced by decontamination inside the data build and by a checked-in invariant script we run before each build. We report three findings that we believe transfer to other small-model efforts: a safety gate that had been "fixed" with training data written from its own questions read 64/64 while the honest figure was 34/64; training-seed variance was as large as the spread across every recipe we tried, so single-seed comparisons at this scale are uninformative; and data rounds repaired only what was absent from the data, while identity tracking over long context and multi-turn arithmetic did not move across any data change we tried, which we read as limits of the model size rather than gaps in the data, a reading the next, larger model will test. Weights, the data recipe, the evaluation code and the spend ledger are released under Apache-2.0.
Figures & tables
| model | params | HellaSwag | ARC-c | ARC-e | XCOPA | Belebele | TurBLiMP | TurkishMMLU |
|---|---|---|---|---|---|---|---|---|
| Kanarya-750m | 750M | 37.8 | 26.5 | 41.4 | 61.2 | 23.4 | 95.3 | 16.2 |
| turkish-gpt2-large | 774M | 35.3 | 25.4 | 40.4 | 60.6 | 22.4 | 98.2 | 19.0 |
| Qwen2.5-0.5B | 494M | 29.2 | 23.6 | 28.6 | 54.6 | 29.9 | 70.0 | 18.2 |
| ufakzeka-1-base | 151M | 35.3 | 27.6 | 39.1 | 60.0 | 27.6 | 92.4 | 19.2 |
| ufakzeka-1 | 151M | 33.2 | 27.6 | 38.8 | 59.8 | 27.4 | 90.1 | 23.3 |
| chance | 25 | 25 | 25 | 50 | 25 | 50 | 20 |
| gate (behaviour that counts as a pass) | passed | trials |
|---|---|---|
| user’s name recalled after a long story, not confused with a character’s | 162 | 200 |
| correct arithmetic answer kept under “are you sure” pressure | 72 | 90 |
| wrong arithmetic answer corrected when the user points it out | 65 | 90 |
| subtraction with borrows through zero comes out right | 30 | 30 |
| request naming chemical, biological or incendiary agents refused, unseen phrasings | 64 | 64 |
| harmless question that merely sounds dangerous answered, not refused | 18 | 18 |
Appendix figures & tables1 asset
Supplementary material from the paper’s appendix.
Appendix
| source | role | licence |
|---|---|---|
| FineWeb2-HQ, Turkish [ 6 , 7 ] | pretraining, web | ODC-By 1.0, Common Crawl terms |
| mogan-turkish-web | pretraining, web | ODC-By 1.0, Common Crawl terms |
| FinePDFs-edu, Turkish | pretraining, documents | ODC-By 1.0, Common Crawl terms |
| FineWiki, Turkish | pretraining, encyclopedia | CC BY-SA 4.0 and GFDL |
| BILGE synthetic stories, web, mathematics (TÜBİTAK BİLGEM) | pretraining, synthetic | Apache-2.0 |
| COSMOS synthetic corpus | pretraining, synthetic | Apache-2.0 |