ecloudtech/TurkMorfBench
TurkMorfBench v3 466.517 madde · 14 kova · uydurma gövde kontrollü · teşhis raporlu 466,517 items · 14 buckets · wug-controlled · diagnostic reporting eCloud Tech. · kod Apache-2.0 · veri CC BY 4.0 pip install turkmorfbench turkmorfbench olc --model YOUR/MODEL from datasets import load_dataset d = load_dataset("ecloudtech/TurkMorfBench", "cekirdek") # 1.836 madde d = load_dataset("ecloudtech/TurkMorfBench", "tam") # 466.517 madde Ne ölçüyor Türkçe… See the full description on the dataset page: https://huggingface.co/datasets/ecloudtech/TurkMorfBench.
0462
1---2license: cc-by-4.03language:4 - tr5pretty_name: "TurkMorfBench — Türkçe Morfoloji Kıyası / Turkish Morphology Benchmark"6tags:7 - turkish8 - türkçe9 - morphology10 - morfoloji11 - benchmark12 - evaluation13 - vowel-harmony14 - ünlü-uyumu15 - wug-test16 - agglutinative17 - llm-evaluation18 - tokenizer-analysis19task_categories:20 - multiple-choice21 - text-generation22size_categories:23 - 100K<n<1M24configs:25 - config_name: cekirdek26 data_files: turkmorfbench_v3_cekirdek.jsonl27 default: true28 - config_name: tam29 data_files: turkmorfbench_v3_tam.jsonl30---31 32# TurkMorfBench v333 34**466.517 madde · 14 kova · uydurma gövde kontrollü · teşhis raporlu**35**466,517 items · 14 buckets · wug-controlled · diagnostic reporting**36 37[eCloud Tech.](https://www.e-cloud.web.tr) · kod Apache-2.0 · veri CC BY 4.038 39```bash40pip install turkmorfbench41turkmorfbench olc --model YOUR/MODEL42```43 44```python45from datasets import load_dataset46d = load_dataset("ecloudtech/TurkMorfBench", "cekirdek") # 1.836 madde47d = load_dataset("ecloudtech/TurkMorfBench", "tam") # 466.517 madde48```49 50---51 52## Ne ölçüyor53 54Türkçe sondan eklemelidir ve ek seçimi katı kurallara bağlıdır: büyük ve küçük55ünlü uyumu, ünsüz benzeşmesi, ünsüz yumuşaması, kaynaştırma. Üstüne sözlüksel56istisnalar biner (`burun → burnu`, `kalp → kalbi`, `ret → reddi`) ve okunuşa57bağlı ekler gelir (`TCDD'yi`, `2026'da`).58 59Bu kıyas hepsini **ayrı ayrı** ölçer ve hangisinde düşüldüğünü söyler.60 61| Kova | Madde | Ne sınıyor |62|---|---|---|63| `ad_yuva` | 283.360 | çokluk + iyelik + hâl yığını, **zamir n'si** |64| `ad_cekimi` | 166.424 | 7 hâl, uyum, benzeşme, yumuşama, kaynaştırma |65| `ek_zinciri` | 9.544 | 1'den 8'e derinlik, ek sırası |66| `fiil_cekimi` | 1.792 | 7 zaman/kip, olumsuzluk, **geniş zaman istisnaları** |67| `yapim_eki` | 1.477 | -lIk, -CI, -lI, -sIz, -sAl, -lAş, -lA |68| `istisna_ozel_ad` | 1.200 | kesme işareti, **yumuşamama** (Sinop'a) |69| `istisna_birlesik_isim` | 896 | buzdolabına |70| `cati` | 728 | edilgen, dönüşlü, işteş, ettirgen |71| `istisna_sayi` | 507 | **okunuşa göre** ek (2026'da) |72| `istisna_kisaltma` | 304 | **okunuşa göre** ek (TCDD'yi) |73| `istisna_unlu_dusmesi` | 177 | burnu, aklı, nakdi · **TDK doğrulamalı** |74| `istisna_uyum_kirici` | 71 | kalbi, rolü, kıraati · **TDK doğrulamalı** |75| `istisna_ikizlesme` | 35 | reddi, tıbbı, zıddı · **TDK doğrulamalı** |76| `istisna_kaynastirma_istisna` | 2 | suyu, neyi |77| **toplam** | **466.517** | 14 kova |78 79## Madde biçimi80 81```json82{83 "kimlik": "6c4f2594d126",84 "kova": "ad_yuva",85 "gorev": "cog-3t-bulunma",86 "govde": "içtimaiyat",87 "altin": "içtimaiyatlarında",88 "celdirici_tur": ["zamir_n", "uyum"],89 "celdirici_bicim": ["içtimaiyatlarıda", "içtimaiyatlarınde"],90 "secenek": ["içtimaiyatlarıda", "içtimaiyatlarında", "içtimaiyatlarınde"],91 "altin_sira": 1,92 "gercek": true,93 "hucre": ["a", "t", 3, "kirik"],94 "bayrak": []95}96```97 98**Çeldiriciler rastgele değil.** Her biri tek bir kuralı bozar, adı da o kuraldır.99Model `içtimaiyatlarıda` seçtiyse zamir n'sini bilmiyor; `içtimaiyatlarınde`100seçtiyse ünlü uyumunu. Tek bir doğruluk sayısı bunu söylemez.101 102`hucre` alanı ses ortamını taşır: (son ünlü, son ses sınıfı, hece sayısı,103iç uyum). `bayrak` sözlüksel düzensizlikleri (`LastVowelDrop`, `Doubling`,104`InverseHarmony`, `CompoundP3sg`).105 106## Uydurma (wug) gövde107 108Gerçek kelimede doğru ek üretmek ezberle de mümkündür. Uydurma gövde109(*zakak*, *vısep*, *sövot*) hiçbir külliyatta geçmez; model doğru eki ancak110**kuralı** biliyorsa üretir.111 112Ölçtük: modeller gerçek ile uydurma gövde arasında **22-32 puan** fark veriyor.113 114## Ses ortamı kapsam dizeyi115 116Ek seçimini belirleyen eksenler önce çaprazlanır, gövdeler sonra üretilir:117son ünlü (8) × son ses sınıfı (8) × hece sayısı (3) × iç uyum (2) = **320 hücre**.118 119**33 hücrede Türkçede gerçek kelime yoktur.** Gerçek kelimelerden kurulan bir120kıyas oraları sınayamaz. Ölçtük: modeller o hücrelerde, ses bileşimi121eşleştirildikten sonra bile **22-23 puan** daha kötü.122 123## İki katman124 125| Katman | Madde | Kimin için |126|---|---|---|127| `cekirdek` | 1.836 | dakikalar içinde koşar, **kova dengeli**, teşhis için |128| `tam` | 466.517 | tasarlanan kapsamın tamamı, manşet sayı için |129 130Çekirdek kova dengelidir; tam kümenin yansız tahmini **değildir** ve öyle131olması amaçlanmamıştır. En küçük kovada bile ölçülebilir bir sayı çıksın diye.132**İkisi karşılaştırılmaz.**133 134## Altın veri nereden gelir135 136Kural motorundan. **Hiçbir aşamada bir dil modelinden gelmez.**137 138Açık Türkçe morfolojik çözümleyicilerin doğruluğu %38-72 ölçülmüştür; böyle bir139aracı altın kaynak yapmak külliyata %28-62 hata enjekte eder. Bu yüzden keyfi140kelimeyi çözümlemiyoruz, altını inşadan belli olan maddeyi üretiyoruz.141Sözlüksel düzensizlikler [Zemberek](https://github.com/ahmetaa/zemberek-nlp)142sözlüğünden gelir (Apache-2.0); çözümleyicisi kullanılmaz.143 144Kural motorunun **282 elle yazılmış altın iddiası** vardır ve hepsi geçer.145 146### Üç istisna kovası TDK ile doğrulanmıştır147 148`istisna_unlu_dusmesi`, `istisna_uyum_kirici` ve `istisna_ikizlesme` kovalarının149**317 maddesinin tamamının** altını [TDK Güncel Türkçe150Sözlük](https://sozluk.gov.tr) ile birebir karşılaştırılmıştır; sözlüğün madde151başından sonra verdiği çekim ipucu (`kıraat, -ti`) altının kendisidir. TDK bir152gövde için ek biçimi vermiyorsa ya da birden fazla biçim veriyorsa153(`hak` → *hakkı* / *hakki*) o gövde kıyasa **alınmaz**.154 155Bu doğrulamayı yapma sebebimiz, insan tavanı ölçümünde katılımcıların156`uyum_kirici` kovasında **şans düzeyinin altına** düşmesiydi. Ana dili Türkçe157olan insanlar bir kurala şanstan kötü uyuyorsa, sorun insanda değil altındadır.158Denetim üç sistematik hata çıkardı — olmayan yumuşamanın uygulanması159(*bidadi*, doğrusu **bidati**), ince/kalın uyumun kaçırılması (*aczı*, doğrusu160**aczi**), ikizleşirken ötümlüleşmenin atlanması (*retti*, doğrusu **reddi**).161Hepsi Zemberek'in bayraklarının TDK'ye göre eksik olmasından kaynaklanıyordu.162Düzeltmeden sonra ölçülen insan doğruluğu 5,6 puan yükseldi.163 164### TDK düzeltmesi bütün kovalara uygulanır165 166Doğru biçim yalnız istisna kovalarına yazılsaydı aynı gövdenin iki altını167olurdu — `kıraat` istisna kovasında `kıraati`, ad çekimi kovasında `kıraadi`.168Bunun yerine TDK'nin verdiği biçimden **sözlük bayrağı geri çıkarılır**169(`kıraat` → `InverseHarmony, NoVoicing`) ve motor her kovada, her hâlde, her ek170yığınında doğru biçimi üretir. 147 sözlük maddesi bu yolla düzeltildi.171 172Denetim kural motorunda da bir boşluk açığa çıkardı: ünlü düşmesi, yumuşama ve173ikizleşme birbirini dışlıyordu, oysa birlikte olabiliyorlar —174`nakit → nakdi` (ünlü düşer **ve** yumuşar), `ret → reddi` (yumuşar **ve**175ikizleşir). 24 gövde hiçbir bayrak kümesiyle üretilemiyordu ve hepsi bu iki176birleşimdendi.177 178TDK'nin verdiği biçim hiçbir bayrak kümesiyle üretilemiyorsa gövde kuralla179açıklanamıyor demektir ve kıyasa alınmaz (*raptı*, *veçhi* dahil altı gövde).180 181### 3.6.0: ünlü düşmesinde uyum — kıyasın bir hatası daha182 183Kural kovaları için eğitim verisi üreteci yazılırken motorun bir hatası184ortaya çıktı: ünlü düşmesinde (*aciz → aczi*) ünlüyle başlayan ekin uyumu185**düşen ünlüden** değil, kalan tabanın son ünlüsünden alınıyordu (*acz* → *a* →186*aczı*). TDK denetimi bunu belirtme hâli için `InverseHarmony` bayrağı ekleyerek187"çözmüştü"; bayrak ise ünsüzle başlayan `-lAr`'a sızıyordu: *acizlarında*,188*ahitlarında* — yanlış Türkçe, doğrusu *acizlerinde*. Etkilenen: **34 gövde,189`ad_yuva`'da 136 yanlış altın**. Aynı 34 gövde bu sızan bayrak yüzünden190`istisna_uyum_kirici` kovasına da yanlış sınıflanmıştı; onlar ünlü-düşmesi191kelimeleridir.192 193Motor düzeltildi (uyum düşen ünlüyü izler; bayrağa gerek kalmadı), bayrak194araması yeniden koşuldu (501 TDK altınının 501'i yeniden üretildi, hiçbiri195kaybolmadı), kıyas yeniden üretildi: `ad_cekimi` +117, `istisna_uyum_kirici`196105 → 71, toplam 466.517, çekirdek 1.836. Diğer 12 kova değişmedi. 3.5.x ile197`ad_yuva`, `ad_cekimi` ve `istisna_uyum_kirici` sayıları karşılaştırılamaz.198 199### 3.5.0: `ek_zinciri` kovası düzeltildi — kıyasın kendi hatası200 201Beş farklı model derinlik 2/3/5/7'de **tam %0**, 6/8'de ~%100 alıyordu. Bu bir202model özelliği olamaz; kova tasarımının artefaktıydı. Önceki çeldiriciler "bir203basamak eksik" ve "bir basamak fazla" biçimlerdi — ikisi de **dilbilgisel**.204İstem hedef derinliği söylemediği için model en olası *geçerli* biçimi seçiyor205ve bu yanlış sayılıyordu. Çeldiriciler artık diğer kovalardaki gibi kural206**ihlali**: aynı derinlikte uyum bozulmuş (*temerrütlerımız*), sahte kaynaştırma207(*temerrütleryimiz*), sıra bozuk. Derinlik-1 maddeleri de bu sayede kovaya208girdi (8.351 → 9.544). Bu düzeltme bütün modelleri eşit etkiler; 3.4.x ile209alınan `ek_zinciri` sayıları karşılaştırılamaz, diğer 13 kova değişmedi.210 211### Morfoloji ≠ yetenek: aynı modeller iki ölçekte212 213Bu kıyasta bir 2B model 32B'yi yakalayabilir. Bunun ne anlama geldiğini214söylemek için aynı modelleri **aynı sabit betikle** TurkishMMLU'nun 652 temiz215sorusunda da ölçtük (şık sırası dondurulmuş, kirli 113 soru dışarıda):216 217| model | TurkMorfBench 3.5 çekirdek | TurkishMMLU (652) |218|---|---|---|219| kanarya-2b | 77,3 | **22,9** |220| turkish-gpt2-large (0,8B) | 76,9 | **18,4** |221| Kumru-2B | 76,8 | **19,6** |222| Erk-32B | 75,2 | **71,0** |223| Qwen3-32B (taban) | 73,3 | 67,6 |224 225TurkishMMLU beş şıklıdır; şans %20. Sıfırdan Türkçe külliyatla eğitilen küçük226modeller morfolojide 32B ile **istatistiksel olarak beraber**, genel yetenekte227ise **şans düzeyinde**. Bu, kıyasın ölçtüğü şeyin tanımıdır: TurkMorfBench228akıl yürütmeyi değil, **Türkçe biçim bilgisini** ölçer — ve biçim bilgisi229parametre sayısıyla değil, görülen Türkçe jeton sayısıyla ölçeklenir. Bu230yüzden kıyas tek başına "hangi model iyi" sorusuna cevap vermez; genel yetenek231ölçüsüyle **birlikte** okunmalıdır. Sıralamayı yayımlarken bu sütunu yanına232koyuyoruz.233 234### Altı kural, aynı sıralama — ve iki kuralın çöktüğü yer235 2363.4.0'daki duyarlılık altyapısı 16 modelde koşuldu. `harf` ile `esli` (ikili237karşılaştırma) her modelde birebir aynı doğruluğu veriyor; `ham` ve `jeton`238aynı sıralamayı 1–3 puan düşük düzeyde koruyor. Yani bulgular puanlama kuralına239bağlı değil. `pmi` ve `pmi_harf` ise 21–51 aralığına çöküyor: koşulsuz olasılıkla240normalleştirmek, ortak gövdeyi paylaşan adaylar arasında ayrımı yok ediyor. Bu241iki kural bu görev için uygun değildir; pakette kalıyorlar ki okuyucu bunu242kendisi görebilsin.243 244Tasarım etkisi (hücre kümeli / madde düzeyi aralık genişliği) modelden modele2451,2× ile 4,7× arasında değişiyor. En yükseği Erk modellerinde: hücreler arası246varyansı yüksek, yani bazı kural hücrelerinde çok güçlü bazılarında zayıf.247Kumru-2B'de 1,2× — düz bir profil. Aynı ortalama, farklı biçim.248 249### İnsan tavanı — ikinci ölçüm250 251**%78.2 [%70.4 – %83.2]** · 6 geçerli değerlendirici, 560 yargı · *toplama sürüyor*252 253Aynı maddeler ana dili Türkçe olan kişilere soruluyor254([morf.e-cloud.web.tr](https://morf.e-cloud.web.tr)). Bu hâlâ bir **ön255okumadır**: örneklem küçük, aralık geniş ve sayı katılımcı geldikçe256güncellenecek. Aralık **fonolojik hücre** kümeli önyüklemeyle verilmiştir;257madde düzeyinde hesaplansa %74.6–%81.8 çıkardı, çünkü aynı hücreye bağlı258maddeler bağımsız gözlem değildir.259 260**Önceki sürümde bildirdiğimiz %88,2 [83,1–91,8] geri çekilmiştir.** İki sebebi261var ve ikisi de bizim tarafımızda: (1) o sayı 3 değerlendiriciye dayanıyordu;262altıya çıkınca dağılım genişledi — geçerli kişilerin tek tek doğrulukları %96.7, %85.1, %84.5, %75.0, %68.6, %53.2'dir, yani "tavan" tek bir sayıdan çok bir yelpaze.263(2) o ölçümün yapıldığı madde havuzunun 520 maddesinden 257'si güncel kıyas264verisinde yoktu — havuz bir önceki üretimden alınmıştı. Havuz 24 Eylül 2026'da265güncel veriden yeniden kuruldu; artık her madde kıyasta karşılığı olan bir266maddedir ve gövde/hücre kümelemesi yapılabilmektedir.267 268| kesit | doğruluk | n |269|---|---|---|270| gerçek gövde | %79.5 [%75.8 – %82.9] | 531 |271| uydurma gövde | %55.2 [%34.5 – %74.1] | 29 |272 273**Uydurma gövdedeki insan performansı hakkında henüz bir şey söylemiyoruz.**274Önceki sürümde bildirdiğimiz "insan düşüşü 12 puan" iddiası da geri275çekilmiştir: o sayı da, buradaki 24.3 puanlık nokta tahmini de onlarca yargıya276dayanıyor ve aralık her iki yönde de sonuca izin vermiyor. Uydurma gövde277karşılaştırması ancak ikisinin de bulunduğu kovalarda (`ad_cekimi`, `ad_yuva`,278`ek_zinciri`) eşleştirilmiş olarak anlamlıdır; havuz bu amaçla her birinde 20279gerçek + 20 uydurma olacak şekilde dengelendi, ama yeterli yargı henüz280birikmedi.281 282**Katılımcı taraması — ölçümü koruyan asıl savunma.** Doğruluk sayısı elenmeden283hesaplanmaz. Üç ölçüt önceden yazılır ve sonuca bakılarak değiştirilmez: en az28410 cevap; soru başına medyan süre 3 saniyenin altındaysa kişi soruyu285okumuyordur; doğruluğu kendi şans düzeyini (gördüğü maddelerin şık sayılarına286göre hesaplanır) tek yönlü binom testiyle α = 0,001'de geçemeyen kişi bilgi287taşımıyordur.288 289Bu tarama boşuna değil: **12 katılımcının 6'sı elendi**, beşi hız ölçütünden.290Bir katılımcı 111 soruyu **36 saniyede** cevaplamıştı — soru başına 0,3 saniye.291Hızdan elenen beş kişinin beşi aynı zamanda şans düzeyindeydi; iki bağımsız292ölçüt aynı kişileri gösteriyor. Süre hesabında sıfır saniyelik aralıklar293atılmaz: zaman damgaları saniye çözünürlüğünde olduğu için hızlı tıklamanın294kanıtı tam da o sıfırlardır.295 296**Tarama gerçek bir saldırıyı yakaladı.** 25 Eylül 2026'da 13:48–14:09 (UTC)297arasında 50 oturum kaydoldu (bir dakikada 16 kayıt), her biri tam 156 madde298cevapladı ve her oturumun 156 cevabı **aynı saniyede** yazıldı. Sunucu299günlüğündeki istemci kimliği kendini tanıtıyordu: `TurkMorfAITest/1.0300(synthetic; run=…; session=001…050)`. Elli oturumun ikili cevap uyumu 1,00 —301tek bir deterministik dil modeli, 50 farklı 156'lık dilimle. Hız ölçütü302ellisini de eledi; oturumlar veritabanında `sentetik_oturum` olarak303işaretlendi ve dışa aktarımda **yapısal olarak** dışlanır. Bu olay olmasaydı304"insan tavanı" bir LLM tavanına dönüşürdü: aynı 515 maddede o modelin (AIGENCY V4) puanı305%69,9, geçerli insanların %79,1. Kalabalık-kaynaklı her kıyas için tehdit306modeli budur ve savunması eleme kuralıdır, iyi niyet değil.307 308Yayımlanan sayıların tamamı `insan_ozet.py` tarafından üretilir; eşikler309betiğin içinde yazılıdır.310 311## Bağımsız dış sınav: UD ağaç bankaları312 313Kural motorunu kendi testleriyle sınamak döngüseldir — 282 altın iddiayı da biz314yazdık. Motor ayrıca **Universal Dependencies Türkçe ağaç bankalarına** karşı315koşuluyor (BOUN, IMST, Penn): başka ekiplerin elle etiketlediği, hakemli,316bizim hiçbir şekilde etkilemediğimiz veri.317 318UD her kelimenin yüzey biçimini, sözlük biçimini ve biçimbirim özniteliklerini319verir (`kitabı / kitap / Case=Acc|Number=Sing`); bu, bizim çağrımızın tam320karşılığıdır. Üç bankanın da aynı etiketlediği **25.681 (gövde, yuva)** çifti321karşılaştırıldı:322 323| ölçü | oran |324|---|---|325| ham uyum (UD metnini birebir tutturma) | **%91,5** |326| çekim uyumu (kesme/düzeltme imi normalleşmiş) | **%93,9** |327 328Aradaki fark yazımdandır: UD özel adlarda kesme işareti kullanıyor (`bey'in`),329bazı bölümleri Türkçe harfsiz (`baliklarinin`), düzeltme imi bankadan bankaya330değişiyor. İkisi ayrı raporlanır; tek bir sayıya indirmek farkı gizler.331 332**Bu sınav dört gerçek motor hatası buldu ve hepsi düzeltildi:**333 334| hata | UD'de | bizde |335|---|---|---|336| çokluk + 3. çoğul iyelik `-lAr`ı iki kez yazıyordu | gözlerini | ~~gözlerlerini~~ |337| vasıta hâli iyelikten sonra zamir n'si alıyordu | hedefiyle | ~~hedefinle~~ |338| `su`/`ne` kaynaştırmada y yerine s alıyordu | suyunu | ~~susunu~~ |339| düzeltme imli ünlüler (â î û) envanterde yoktu | rüzgâra | ~~rüzgâre~~ |340 341Sonuncusu en genişi: `â` görünmez olduğu için `rüzgâr`ın son ünlüsü `ü`342sanılıyor ve ince ek geliyordu. Düzeltmeden sonra UD uyumu 3,5 puan yükseldi.343 344 345### Şıklar karıştırılmıştır346 347`secenek` listesinde altın rastgele bir konumda durur ve `altin_sira` kaçıncı348olduğunu söyler. Karıştırma madde kimliğinden türetilir: aynı madde her349üretimde aynı sırayı alır, sürümler arası karşılaştırma bozulmaz.350 351Bu 3.2.1'den önce böyle değildi — altın her maddede birinci şıktı. Zorunlu352seçim kipinde şıklar tek tek puanlandığı için sıra sonucu etkilemiyordu ve353gözden kaçmıştı; ama şıkları A/B/C diye harflendiren bir protokolde hep "A"354demek %100 verirdi. İç tutarlılık denetimiyle yakalandı.355 356Aynı denetim ikinci bir kusur daha buldu: uydurma gövde üretici yalnız iki357sözlük dosyasına bakıyordu, eskimiş ve gayriresmî sözlüklerdeki yirmi gövde358"uydurma" sayılıp kıyasa girmişti. Wug testinin tek işi gövdenin hiçbir359külliyatta geçmemesini garanti etmek; denetim artık bütün sözlüklere bakıyor.360 361 362## Sınırlar — bunları biliyoruz ve yazıyoruz363 364- **Eş yazılışlı gövdeler kıyasa alınmadı**: çekim davranışları ayrıştığı için365 altın cevap tek olmuyor (genel kovalarda 278 gövde). Üç istisna kovasında366 hakem TDK'dir: sözlük tek bir biçim veriyorsa gövde kalır, vermiyor ya da367 birden fazla veriyorsa çıkar.368- **İstisna gövdelerinin yarısından çoğu TDK'nin güncel sözlüğünde yok**369 (*inhimak*, *meşihat*, *pirüpak* gibi arkaik alıntılar). O gövdeler bu370 sürümde kıyasa alınmadı; istisna kovaları artık yaşayan Türkçeyi ölçüyor.371- **Ettirgende 66 madde elendi**: tek heceli gerçek gövdelerde ek seçimi372 sözlükseldir ve açık istisna listemizde olmayanlar güvenilmez sayıldı.373- İstisna kovaları doğası gereği gerçek gövdelidir — uydurma bir kelimenin374 sözlüksel istisnası olamaz.375 376## Atıf377 378```bibtex379@misc{turkmorfbench2026,380 title = {TurkMorfBench: A Diagnostic Morphology Benchmark for Turkish Language Models},381 author = {{eCloud Tech.}},382 year = {2026},383 url = {https://huggingface.co/datasets/ecloudtech/TurkMorfBench}384}385```386 387---388 389## English390 391### What it measures392 393Turkish is agglutinative and suffix selection follows strict rules: two-way and394four-way vowel harmony, consonant assimilation, consonant lenition and buffer395consonants — plus lexical exceptions (`burun → burnu`, `kalp → kalbi`,396`ret → reddi`) and pronunciation-driven suffixes (`TCDD'yi`, `2026'da`, where397the suffix follows how the abbreviation or number is *read*, not written).398 399The benchmark measures each separately and reports **which rule failed**.400 401### Distractors are rule violations, not noise402 403Every distractor breaks exactly one rule and is named after it. A model that404picks `içtimaiyatlarıda` does not know the pronominal *n*; one that picks405`içtimaiyatlarınde` does not know vowel harmony. A single accuracy number cannot406say this — this is what makes the benchmark diagnostic rather than a scoreboard.407 408### Nonce (wug) stems409 410Inflecting a real word can be memorisation. A nonce stem appears in no corpus, so411only the rule can produce the right form. Measured gap between real and nonce412stems: **22-32 points**.413 414### Designed coverage415 416The axes that determine suffix selection are crossed first (320 cells), and stems417are generated to fill them. **33 cells contain no real Turkish word at all** — a418real-word benchmark is structurally blind there, and models score 22-23 points419worse in exactly those cells even after matching phonological composition.420 421### The exception buckets are verified against TDK422 423All 317 items in `istisna_unlu_dusmesi`, `istisna_uyum_kirici` and424`istisna_ikizlesme` carry a gold form checked character-for-character against the425[TDK Güncel Türkçe Sözlük](https://sozluk.gov.tr), whose entries state the426inflected stem directly (`kıraat, -ti`). We ran this audit because native427speakers scored **below chance** on `uyum_kirici` in the human-ceiling study —428when native speakers do worse than guessing, the gold is what needs checking, not429the speakers. It found three systematic errors inherited from incomplete lexicon430flags: applying lenition where the dictionary forbids it (*bidadi*, correct431**bidati**), missing inverse harmony (*aczı*, correct **aczi**), and failing to432voice a doubled stop (*retti*, correct **reddi**). Measured human accuracy rose4335.6 points after the correction.434 435### Gold never comes from a language model436 437Published open Turkish morphological analysers measure 38-72% accuracy; using one438as ground truth would inject 28-62% error. Items are *generated* so that the gold439form follows by construction. Lexical irregularity flags come from the Zemberek440dictionary (Apache-2.0); its analyser is not used. The rule engine carries 282441hand-written gold assertions, all passing.442 443### 3.5.0: the `ek_zinciri` bucket was fixed — the benchmark's own error444 445Five different models scored **exactly 0%** at depths 2/3/5/7 and ~100% at 6/8.446That cannot be a model property; it was an artefact of the bucket design. The447old distractors were "one step fewer" and "one step more" — both **grammatical**448forms. Since the prompt does not state the target depth, a model picks the most449probable *valid* form and is marked wrong. Distractors are now rule450**violations**, as in every other bucket: broken harmony at the same depth451(*temerrütlerımız*), a spurious buffer consonant (*temerrütleryimiz*), wrong452order. Depth-1 items now enter the bucket as well (8,351 → 9,544). The fix453affects every model equally; `ek_zinciri` figures from 3.4.x are not comparable,454the other 13 buckets are unchanged.455 456### Morphology ≠ capability: the same models on two scales457 458On this benchmark a 2B model can match a 32B one. To say what that means, we459measured the same models with the **same pinned script** on the 652 clean460TurkishMMLU questions (option order frozen, 113 contaminated items removed):461 462| model | TurkMorfBench 3.5 core | TurkishMMLU (652) |463|---|---|---|464| kanarya-2b | 77.3 | **22.9** |465| turkish-gpt2-large (0.8B) | 76.9 | **18.4** |466| Kumru-2B | 76.8 | **19.6** |467| Erk-32B | 75.2 | **71.0** |468| Qwen3-32B (base) | 73.3 | 67.6 |469 470TurkishMMLU is five-way; chance is 20%. Small models trained from scratch on471Turkish are **statistically tied** with a 32B model on morphology and **at472chance** on general capability. That is the definition of what this benchmark473measures: not reasoning but **Turkish form knowledge**, which scales with the474number of Turkish tokens seen, not with parameter count. The benchmark alone475therefore does not answer "which model is better"; it must be read **alongside**476a capability measure, and we publish that column next to the ranking.477 478### Six rules, one ranking — and where two rules collapse479 480The 3.4.0 sensitivity machinery was run on 16 models. `harf` and `esli`481(pairwise) give identical accuracy for every model; `ham` and `jeton` preserve482the same order 1–3 points lower. The findings do not depend on the scoring rule.483`pmi` and `pmi_harf` collapse to 21–51: normalising by the unconditional484probability erases the distinction between candidates that share a stem. Those485two rules are unsuitable for this task; they stay in the package so readers can486see it for themselves.487 488The design effect (cell-clustered vs item-level interval width) ranges from 1.2×489to 4.7× across models. It is highest for the Erk models — high between-cell490variance, strong in some rule cells and weak in others. Kumru-2B sits at 1.2×, a491flat profile. Same mean, different shape.492 493### Human ceiling — second measurement494 495**78.2% [70.4 – 83.2]** · 6 valid raters, 560 judgments · *collection ongoing*496 497The same items are put to native speakers at498[morf.e-cloud.web.tr](https://morf.e-cloud.web.tr). This is still a499**preliminary reading**: the sample is small, the interval wide, and the figure500will be updated as more raters finish. The interval comes from a501**phonological-cell cluster bootstrap**; computed per item it would read50274.6–81.8%, because items sharing a cell are not independent observations.503 504**The 88.2% [83.1–91.8] reported in an earlier release is withdrawn.** Two505reasons, both on our side: (1) that figure rested on 3 raters; with 6 the spread506widened — the individual accuracies of the valid raters are 96.7%, 85.1%, 84.5%, 75.0%, 68.6%, 53.2%, so the "ceiling" is a spread rather than a point. (2) 257 of507the 520 items in the pool used for that measurement did not exist in the current508benchmark data; the pool had been drawn from an earlier generation. It was509rebuilt from current data on 24 September 2026, so every item now corresponds to510a benchmark item and stem/cell clustering is possible.511 512| slice | accuracy | n |513|---|---|---|514| real stems | 79.5% [75.8 – 82.9] | 531 |515| nonce stems | 55.2% [34.5 – 74.1] | 29 |516 517**We make no claim about human performance on nonce stems yet.** The earlier518"12-point human drop" claim is also withdrawn: that figure, and the 24.3-point519point estimate here, both rest on a few dozen judgments and the interval permits520no conclusion in either direction. The real/nonce contrast is only meaningful as521a matched comparison inside the buckets that contain both (`ad_cekimi`,522`ad_yuva`, `ek_zinciri`); the pool was rebalanced to 20 real + 20 nonce in each,523but enough judgments have not yet accumulated.524 525**Rater screening — the defence that protects the measurement.** The accuracy526figure is not computed before screening. Three criteria are fixed in advance and527never adjusted after seeing the result: at least 10 answers; a median of under5283 seconds per question means the question was not read; and accuracy that fails529to beat the rater's own chance level (computed from the option counts of the530items they saw) on a one-sided binomial test at α = 0.001 carries no531information.532 533The screening is not decorative: **6 of 12 raters were removed**, five of them on534the speed criterion. One had answered 111 questions in **36 seconds** — 0.3 s per535question. All five speed-removed raters were also at chance level; two536independent criteria point at the same people. Zero-second gaps are not discarded537when computing the median: timestamps have one-second resolution, so those zeros538are precisely the evidence of click-through.539 540**The screening caught a real attack.** Between 13:48 and 14:09 UTC on54125 September 2026, 50 sessions registered (16 in a single minute), each542answered exactly 156 items, and every session's 156 answers were written in543**the same second**. The client identified itself in the server log:544`TurkMorfAITest/1.0 (synthetic; run=…; session=001…050)`. Pairwise answer545agreement across the 50 sessions was 1.00 — one deterministic language model546over 50 different 156-item slices. The speed criterion removed all fifty; the547sessions are flagged as `sentetik_oturum` in the database and excluded548**structurally** at export. Without this, the "human ceiling" would have become549an LLM ceiling: on the same 515 items that model (AIGENCY V4) scores 69.9%, the valid humans55079.1%. This is the threat model for any crowd-sourced benchmark, and the defence551is the screening rule, not good faith.552 553Every published figure is produced by `insan_ozet.py`; the thresholds are written554into the script.555 556### Confidence intervals: 466,517 items are NOT 466,517 independent observations557 558Items are not generated independently. One stem (*kitap*) yields dozens of items559across the plural × possessive × case cross; one phonological cell (final vowel,560final-consonant class, depth, harmony) binds hundreds of stems to the same rule.561A model that misses lenition on *kitap* misses it across most items derived from562that stem.563 564Item-level bootstrap ignores this: it treats each item as a separate observation,565overstates the sample, and returns intervals that are too narrow. That is false566precision, and it is the easiest place to attack a published figure.567 568`turkmorfbench.istatistik` moves the resampling unit from the item to the569**cluster**. In the full set:570 571| unit | clusters | items per cluster |572|---|---|---|573| stem | 32,140 | median 16 |574| **phonological cell** | **441** | median 247, largest 18,594 |575 576The difference is not cosmetic. Under a pattern where model competence varies at577the rule level — which is exactly what the benchmark sets out to measure — the578design effect we measured is:579 580| clustering | interval width | effective n |581|---|---|---|582| item | ±0.12 pt | 466,517 |583| stem | 2.0× | 118,274 |584| **phonological cell** | **30.8×** | **491** |585 586Those figures come from a simulation; the real design effect depends on how587correlated a real model's errors are within a cell. `tasarim_etkisi()` measures588and reports it for every run.589 590Comparing two models by checking whether two separate intervals overlap is wrong:591it throws away the paired design and can hide a real difference. `esli_fark()`592resamples the difference directly.593 594### Is the result an artefact of the scoring rule?595 596The scoring rule changed in 3.3.0 (see `olcum.py`) and the residual length bias597was not hidden: the gold is shortest in 29.9% of items with unequal candidate598lengths, while the chosen rule picks the shortest 39–43% of the time. That is not599the real question. The real question is whether the **result** changes when the600rule changes.601 602`turkmorfbench.duyarlilik` runs the model **once**, stores the raw sum, token603count, character count and unconditional probability per candidate, and derives604six rules from those three quantities: `ham` (raw), `jeton` (per token), `harf`605(per character — the 3.3.0 choice), `pmi`, `pmi_harf` and `esli` (pairwise606contrastive, Copeland). The model is not run six times.607 608The output states whether the **sign of the difference between two systems is the609same under all six rules**. If it is, the residual length bias does not carry the610finding; if it is not, we learn which finding depends on the rule before the611reader does.612 613### Independent external check: UD treebanks614 615Testing the rule engine against its own assertions is circular — we wrote those616too. The engine is therefore also run against the **Universal Dependencies617Turkish treebanks** (BOUN, IMST, Penn): hand-annotated, peer-reviewed data from618other teams that we had no hand in. On the 25,681 (lemma, slot) pairs all three619treebanks annotate identically, the engine reproduces the attested surface form620for **91.5%** verbatim and **93.9%** once spelling is normalised (UD uses621apostrophes on proper nouns, some sections are ASCII-folded, circumflex usage622differs between treebanks).623 624The check found four real engine bugs, all fixed: `-lAr` written twice in the625plural + 3rd-person-plural possessive slot (*gözlerlerini* → **gözlerini**), the626pronominal *n* wrongly inserted before the instrumental (*hedefinle* →627**hedefiyle**), the irregular buffer on `su`/`ne` (*susunu* → **suyunu**), and628circumflex vowels (â î û) missing from the vowel inventory, which made the629engine read the wrong vowel as final (*rüzgâre* → **rüzgâra**).630 631 632### Options are shuffled633 634The gold form sits at a random position in `secenek`, and `altin_sira` gives635its index. The shuffle is derived from the item id, so an item keeps its636ordering across regenerations.637 638Before 3.2.1 the gold was always the first option. Forced-choice scoring makes639the order irrelevant, which is why it went unnoticed — but any protocol that640letters the options A/B/C would have scored 100% by always answering A. An641internal consistency audit caught it, along with twenty stems marked as nonce642that were in fact present in the obsolete and informal dictionaries.643 644### Known limits645 646Homograph stems are excluded (their inflection is647context-dependent, so no single gold form exists) — 278 in the general buckets;648in the three exception buckets TDK arbitrates, and a stem is kept only when the649dictionary gives exactly one suffixed form. Over half of the flagged exception650stems are archaic loans absent from TDK's current dictionary and were dropped. 66 causative items were651excluded as lexically unreliable. Exception buckets are real-stem only by nature.652 653**Code:** [github.com/ecloudtechnology/turkmorfbench](https://github.com/ecloudtechnology/turkmorfbench) ·654**Package:** [pypi.org/project/turkmorfbench](https://pypi.org/project/turkmorfbench/)655 656### Güven aralığı: 466.517 madde, 466.517 bağımsız gözlem DEĞİLDİR657 658Kıyastaki maddeler birbirinden bağımsız üretilmez. Tek bir gövde (*kitap*)659çokluk × iyelik × hâl çaprazından onlarca madde doğurur; tek bir fonolojik hücre660(son ünlü, son ünsüz sınıfı, derinlik, uyum) yüzlerce gövdeyi aynı kurala bağlar.661Bir model *kitap* gövdesinde yumuşamayı kaçırıyorsa, o gövdeden türeyen662maddelerin çoğunda birlikte kaçırır.663 664Madde düzeyinde klasik önyükleme bunu görmezden gelir: her maddeyi ayrı bir gözlem665sayar, örneklemi olduğundan büyük gösterir ve aralığı gereğinden daraltır. Bu,666sahte kesinliktir ve yayımlanan bir sayının en kolay çürütülen yeridir.667 668`turkmorfbench.istatistik` yeniden örnekleme birimini maddeden **kümeye** taşır.669Kümeler tam veri kümesinde şöyle dağılır:670 671| birim | küme sayısı | küme başına madde |672|---|---|---|673| gövde | 32.140 | medyan 16 |674| **fonolojik hücre** | **441** | medyan 247, en büyüğü 18.594 |675 676Fark önemsiz değil. Model yetkinliğinin kural düzeyinde değiştiği bir örüntüde —677ki kıyasın ölçmeye çalıştığı tam olarak budur — ölçtüğümüz tasarım etkisi şudur:678 679| kümeleme | aralık genişliği | etkin n |680|---|---|---|681| madde | ±0,12 puan | 466.517 |682| gövde | 2,0 kat | 118.274 |683| **fonolojik hücre** | **30,8 kat** | **491** |684 685Bu rakamlar bir benzetimden gelir; gerçek tasarım etkisi, gerçek bir modelin686hatalarının hücre içinde ne kadar ilintili olduğuna bağlıdır. `tasarim_etkisi()`687bunu her koşumda ölçer ve bildirir.688 689```python690from turkmorfbench.istatistik import kume_bootstrap, esli_fark, tasarim_etkisi691s = kume_bootstrap(maddeler, dogru, anahtar="hucre") # gövde / hücre / gövde_görev692f = esli_fark(maddeler, a_dogru, b_dogru, anahtar="govde") # iki sistemin FARKI693```694 695İki modeli karşılaştırırken iki ayrı aralığa bakıp "çakışıyor mu" demek yanlıştır:696eşli tasarımın gücünü atar ve gerçek farkı gizleyebilir. `esli_fark()` farkı697doğrudan örnekler.698 699### Sonuç puanlama kuralına bağlı mı700 7013.3.0'da puanlama kuralı değişti (bkz. `olcum.py`) ve kalan uzunluk yanlılığı702gizlenmedi: altın, uzunlukları farklı maddelerde %29,9 oranında en kısadır,703seçilen kural %39–43 oranında en kısayı seçer. Asıl soru bu değil — asıl soru,704kural değişince **sonucun** değişip değişmediğidir.705 706`turkmorfbench.duyarlilik` modeli **bir kez** koşturur, her aday için ham toplam,707jeton sayısı, karakter sayısı ve koşulsuz olasılığı saklar, ve altı kuralı bu üç708büyüklükten türetir: `ham`, `jeton`, `harf` (3.3.0'da seçilen), `pmi`,709`pmi_harf` ve `esli` (ikili karşılaştırma, Copeland). Model altı kez koşmaz.710 711```python712from turkmorfbench.duyarlilik import bilesen_topla, karsilastir, rapor713ka = bilesen_topla(arka_a, maddeler)714kb = bilesen_topla(arka_b, maddeler)715print(rapor(karsilastir(ka, kb, maddeler, "A", "B", anahtar="hucre"), "A", "B"))716```717 718Çıktı, iki sistemin farkının **yönünün altı kuralın hepsinde aynı olup olmadığını**719söyler. Aynıysa kalan uzunluk yanlılığı bulguyu taşımıyor demektir; değilse hangi720bulgunun kurala bağlı olduğunu okuyucudan önce biz bilmiş oluruz.721 