Skip to content

TR Agglutination Pitfalls: Suffix Tokenization + İ/I/ı/i Casefold Bug

Turkish is agglutinative — suffixes attached. Tokenizers often err on 'evlerimizdekiler'. İ/I/ı/i casefold bug, apostrophe normalize (TR vs ASCII), UTF-8 NFC vs NFD inconsistency. Cookbook's 'silent killer' bug list for TR engineers.

Şükrü Yusuf KAYA
24 min read
Advanced
TR Agglutination Pitfalls: Eklerin Tokenize Edilmesi + İ/I/ı/i Casefold Bug

1. Agglutinative Pitfalls#

"ev" + "ler" + "im" + "iz" + "de" + "ki" + "ler" = "evlerimizdekiler"
7 morfem, tek kelime. Tokenizer bunu nasıl parçalar?
TokenizerTokenizationToken sayısı
Llama-3"ev", "ler", "imiz", "deki", "ler"5
Qwen 2.5"evler", "imiz", "deki", "ler"4
Custom TR-BPE 50K"evler", "imiz", "dekiler"3
Char-level"e","v","l","e","r","i","m","i","z","d","e","k","i","l","e","r"16
Sonuç: TR tokenizer 4x daha verimli, ama model eklerin compositional anlamını öğrenir. Custom TR vocab'i çok agresif parçalamamalı (çok büyük vocab gerek olur).

2. İ/I/ı/i Casefold — Klasik Bug#

Python:
"İSTANBUL".lower() # → "i̇stanbul" (i + combining dot above!) "istanbul".upper() # → "ISTANBUL" (yanlış!) "İSTANBUL".casefold() # → "i̇stanbul"
TR-aware casefold:
def tr_lower(s): return s.replace("İ", "i").replace("I", "ı").lower() def tr_upper(s): return s.replace("i", "İ").replace("ı", "I").upper()
Bu bug sessiz katil: Database'de "İstanbul" araması Python "İSTANBUL".lower() ile karşılaştırılır → eşleşmez → 0 sonuç.

3. Unicode NFC vs NFD#

import unicodedata s_nfc = "İstanbul" # NFC normalize s_nfd = unicodedata.normalize("NFD", "İstanbul") # NFD: I + combining dot len(s_nfc), len(s_nfd) # 8, 9 s_nfc == s_nfd # False — looks same, different bytes
Web'den crawl edilen data farklı normalizasyon'da olabilir → aynı kelime ama farklı bytes → tokenizer farklı parçalar → modelin sözlüğünde "aynı kelime için iki ayrı entry".
Cookbook'un kuralı: Tüm corpus'u NFC normalize ile pipeline'a sok.
text = unicodedata.normalize("NFC", text)
✅ Teslim
  1. Bir TR text üzerinde İ/I/ı/i casefold bug'unu reproduce et. 2) NFC vs NFD farkını dataset sample'ında ölç. 3) Sonraki ders: 9.10 — TR Benchmarking Suite.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content