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
Advanced1. Agglutinative Pitfalls#
"ev" + "ler" + "im" + "iz" + "de" + "ki" + "ler" = "evlerimizdekiler"
7 morfem, tek kelime. Tokenizer bunu nasıl parçalar?
| Tokenizer | Tokenization | Token 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
- 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
Part 0 — Engineering Foundations
Welcome to the Fine-Tuning Cookbook: System, Stage Taxonomy, and the Reproducibility Contract
Start LearningPart 0 — Engineering Foundations
Reproducibility Stack: Seeds, cuDNN Flags, and Deterministic CUDA — End the 'Works on My Machine' Problem
Start LearningPart 0 — Engineering Foundations