İçeriğe geç

TR Agglutination Pitfalls: Eklerin Tokenize Edilmesi + İ/I/ı/i Casefold Bug

Türkçe agglutinative — ekler kelimeye eklenir. Tokenizer'lar 'evlerimizdekiler' kelimesini parçalarken sık hata yapar. İ/I/ı/i casefold (yaygın bug), apostrof normalize (TR \"\" vs ASCII \"\"), UTF-8 NFC vs NFD encoding tutarsızlığı. Cookbook'un TR mühendis için 'sessiz katil' bug listesi.

Şükrü Yusuf KAYA
24 dakikalık okuma
İleri
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...

İlgili İçerikler