TurkMorfBench
Turkish morphology benchmark for language models — 449,233 items, diagnostic reports, wug-test controls, tokenizer analysis. Dil modellerinin Türkçe morfoloji yetkinliğini ölçen kıyas — 449.233 madde, teşhis raporu, uydurma gövde kontrolü, tokenizer çözümlemesi.
Built by eCloud Tech. · code Apache-2.0 · data CC BY 4.0
pip install turkmorfbench
turkmorfbench olc --model ecloudtech/Erk-32B
turkmorfbench olc --uc http://localhost:8000/v1 --model my-model --isci 16
What it tells you / Ne söylüyor
Not a score. A diagnosis. / Puan değil, teşhis.
Real output from a 260-item run (forced choice, one open model served over an OpenAI-compatible endpoint):
ZORUNLU SEÇİM 161 / 260 %61.9
GÖVDE TÜRÜ
gerçek gövde (real stems) 124/179 %69.3
uydurma gövde (nonce/wug stems) 37/81 %45.7
KOVA (bucket)
istisna_uyum_kirici 0/12 %0.0 harmony-breaking loans
ek_zinciri 4/15 %26.7 suffix chains
cati 5/11 %45.5 voice
ad_cekimi 33/48 %68.8 nominal case
fiil_cekimi 10/10 %100.0 verb inflection
SON SES (stem-final sound)
t 6/18 %33.3 the lenition consonants
ç 4/10 %40.0
p 6/12 %50.0
ünlü (vowel) 28/37 %75.7
HANGİ KURAL BİLİNMİYOR (which rule was violated)
uyum (vowel harmony) 28 %28.3
iyelik_unlu (buffer vowel) 22 %22.2
zamir_n (pronominal n) 10 %10.1
When run against local weights, the report adds a tokenizer breakdown: accuracy split by whether the vocabulary kept the stem intact or fragmented it, and the measured cost of fragmentation in points. That block answers the question model developers actually ask — does my vocabulary break Turkish morphology? — and no other Turkish benchmark reports accuracy conditioned on tokenization.
Türkçe
Ne ölçüyor
Türkçe sondan eklemeli bir dildir ve ek seçimi katı kurallara bağlıdır: büyük ve
küçük ünlü uyumu, ünsüz benzeşmesi, ünsüz yumuşaması, kaynaştırma. Üstüne
sözlüksel istisnalar biner: burun → burnu, hak → hakkı, kalp → kalbi,
buzdolabı → buzdolabına. Bir de okunuşa bağlı ekler: TCDD'yi, 2026'da.
TurkMorfBench bunların hepsini ayrı ayrı ölçer ve hangisinde düştüğünü söyler.
| Kova | Madde | Ne sınıyor |
|---|---|---|
| ad çekimi | 159.839 | 7 hâl, ünlü uyumu, benzeşme, yumuşama, kaynaştırma |
| ad paradigma yuvaları | 273.840 | çokluk + iyelik + hâl yığını, zamir n'si |
| ek zinciri | 8.344 | 1'den 8'e derinlik, ek sırası |
| fiil çekimi | 1.788 | 7 zaman/kip, olumsuzluk, iki kişi takımı, geniş zaman istisnaları |
| yapım eki | 1.442 | -lIk, -CI, -lI, -sIz, -sAl, -lAş, -lA |
| çatı | 669 | edilgen, dönüşlü, işteş, ettirgen |
| özel ad | 1.200 | kesme işareti, yumuşamama (Sinop'a, Sinob'a değil) |
| birleşik isim | 922 | buzdolabına |
| sayı | 533 | okunuşa göre ek (2026'da) |
| kısaltma | 304 | okunuşa göre ek (TCDD'yi) |
| ünlü düşmesi | 219 | burnu, ağzı, aklı |
| uyum kırıcı alıntı | 78 | kalbi, saati, rolü |
| ünsüz ikizleşmesi | 55 | hakkı, sırrı, affı |
Neden uydurma (wug) gövde
Gerçek kelimede doğru ek üretmek ezberle de mümkündür: model kitabı biçimini külliyatta on binlerce kez görmüştür. Uydurma gövde (zakak, vısep, sövot) hiçbir külliyatta geçmez; model doğru eki ancak kuralı biliyorsa üretir.
Ölçtük: modeller gerçek gövdeyle uydurma gövde arasında 22-32 puan fark veriyor. Yani büyük ölçüde kuralı değil komşuluğu kullanıyorlar.
Ses ortamı kapsam dizeyi
Ek seçimini belirleyen eksenler önce çaprazlanır, gövdeler sonra o hücreleri doldurmak için üretilir: son ünlü (8) × son ses sınıfı (8) × hece sayısı (3) × iç uyum (2) = 320 hücre.
Bu kümenin 33 hücresinde Türkçede gerçek kelime yoktur. Gerçek kelimelerden kurulan bir kıyas oraları sınayamaz. Ölçtük: modeller tam o hücrelerde, ses bileşimi eşleştirildikten sonra bile, 22-23 puan daha kötü.
İki katman
| Katman | Madde | Kimin için |
|---|---|---|
cekirdek |
1.952 | dakikalar içinde koşar, kova dengeli, teşhis için |
tam |
449.233 | tasarlanan kapsamın tamamı, manşet sayı için |
Çekirdek kova dengelidir, yani tam kümenin yansız tahmini değildir; bilerek. En küçük kovada bile ölçülebilir bir sayı çıksın diye. İkisi karşılaştırılmaz.
Altın veri nereden gelir
Kural motorundan. Hiçbir aşamada bir dil modelinden gelmez.
Açık Türkçe morfolojik çözümleyicilerin doğruluğu %38-72 aralığında ölçülmüştür; böyle bir aracı altın kaynak yapmak külliyata %28-62 hata enjekte eder. Bu yüzden keyfi kelimeyi çözümlemiyoruz — altını inşadan belli olan maddeyi üretiyoruz. Sözlüksel düzensizlikler (hangi gövde yumuşar, hangisinde ünlü düşer) Zemberek sözlüğünden gelir (Apache-2.0); çözümleyicisi kullanılmaz.
Kural motorunun 282 elle yazılmış altın iddiası vardır ve hepsi geçer.
Kullanım
# yerel ağırlıklar
turkmorfbench olc --model ecloudtech/Erk-32B
# OpenAI uyumlu uç (vLLM, llama.cpp server, TGI…)
turkmorfbench olc --uc http://localhost:8000/v1 --model erk --isci 16
# tam katman, yalnız uydurma gövdeler, JSON rapor
turkmorfbench olc --model X --katman tam --govde uydurma --cikti rapor.json
# yalnız istisna kovaları
turkmorfbench olc --model X --kova istisna_unlu_dusmesi istisna_ikizlesme
turkmorfbench bilgi
İki kip vardır. Zorunlu seçim birincildir: altın biçim ile kural ihlali çeldiricileri arasından log-olasılıkla seçtirilir, ayrıştırma yoktur. Serbest üretim ikincildir ve "okunamadı" ile "yanlış" ayrı sayılır — bu ayrım olmadan bir ölçümümüz elli puan yanılmıştı.
English
What it measures
Turkish is agglutinative and suffix selection follows strict rules: two-way and
four-way vowel harmony, consonant assimilation, consonant lenition, buffer
consonants. On top of these sit lexical exceptions (burun → burnu,
hak → hakkı, kalp → kalbi) and pronunciation-driven suffixes
(TCDD'yi, 2026'da — the suffix follows how the number is read).
TurkMorfBench measures each of these separately and tells you which one fails.
Why nonce (wug) stems
Producing the right suffix on a real word can be memorisation — a model has seen kitabı tens of thousands of times. A nonce stem (zakak, vısep) appears in no corpus; the model can only inflect it from the rule. We measure a 22-32 point gap between real and nonce stems: models are largely using lexical neighbourhood, not rules.
Designed coverage, not sampled coverage
The axes that determine suffix selection are crossed first — final vowel (8) × final-sound class (8) × syllable count (3) × internal harmony (2) = 320 cells — and stems are then generated to fill them. 33 of those cells contain no real Turkish word at all, so a benchmark built from real words is structurally blind there. Models score 22-23 points worse in those cells even after matching phonological composition.
Gold data never comes from a language model
Published open Turkish morphological analysers measure 38-72% accuracy; using one as ground truth would inject 28-62% error. Instead of analysing arbitrary words we generate items whose gold form follows by construction. Lexical irregularity flags come from the Zemberek dictionary (Apache-2.0); its analyser is not used. The rule engine carries 282 hand-written gold assertions, all passing.
Two tiers
cekirdek (1,952 items, bucket-balanced, runs in minutes, for diagnosis) and
tam (449,233 items, for the headline number). The core tier is deliberately
not an unbiased sample of the full set — it is balanced so that even the
smallest bucket yields a measurable estimate. Do not compare the two.
Modes
Forced choice is primary: gold versus rule-violation distractors, scored by log-likelihood, no output parsing. Free generation is secondary and reports "unreadable" separately from "wrong" — without that distinction one of our own measurements was off by fifty points.
Citation
@misc{turkmorfbench2026,
title = {TurkMorfBench: A Diagnostic Morphology Benchmark for Turkish Language Models},
author = {{eCloud Tech.}},
year = {2026},
url = {https://github.com/ecloudtechnology/turkmorfbench}
}
Data: huggingface.co/datasets/ecloudtech/TurkMorfBench Code: github.com/ecloudtechnology/turkmorfbench
Keywords: Turkish NLP, Türkçe doğal dil işleme, morphology benchmark, morfoloji kıyası, vowel harmony, ünlü uyumu, wug test, agglutinative languages, LLM evaluation, dil modeli değerlendirme, tokenizer analysis, subword segmentation.
Release files for turkmorfbench 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| turkmorfbench-3.0.0.tar.gz | 117.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| turkmorfbench-3.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 236.5 kB
Release files / turkmorfbench-3.0.0.tar.gz
| Download URL | turkmorfbench-3.0.0.tar.gz |
|---|---|
| Size | 117.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8d61f960f1c74fb2c3e2a8795b491393d7312f8c53b2da7d3917fd5b880d47e2
|
|
BLAKE2b-256 checksum How to use checksums |
f333033f24a84c62b90b90ba9637201d1460565005f91e9415a9df98d7b3f5fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|
Release files / turkmorfbench-3.0.0-py3-none-any.whl
| Download URL | turkmorfbench-3.0.0-py3-none-any.whl |
|---|---|
| Size | 118.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8383c5a326b14195fb6ac3b73f7527024246a62fedb10d11de084a5e2925feff
|
|
BLAKE2b-256 checksum How to use checksums |
50f17f7adc35c05cdf089d553395be1f24e4949d3fe021573fdb3573cfd4d54e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.6
|