MEB Öğretmen Tokenizer (Türkçe BPE)
Türkçe eğitim/mevzuat alanında eğitilmiş byte-level BPE tokenizer.
Derlem: MEB öğretmen forum konuları — 1.022 konu, 12.446 satır,
544.065 kelime / 3,9 MB.
Kullanım
1from transformers import AutoTokenizer
2tok = AutoTokenizer.from_pretrained("namruni/meb-ogretmen-tokenizer")
3tok.tokenize("Mazerete bağlı il dışı atama başvurusu nasıl yapılır?")
veya doğrudan:
1from tokenizers import Tokenizer
2tok = Tokenizer.from_file("tokenizer.json")
Sonuçlar
Fertility, eğitimde görülmemiş %5'lik dilimde (623 satır) ölçüldü.
Düşük fertility = aynı metni daha az token'la temsil etmek = daha iyi.
| Tokenizer | Sözlük | Fertility (token/kelime) | Karakter/token | Kayıpsız |
|---|
| bpe-16k (bu repo) | 16.000 | 1,48 | 4,80 | ✓ |
bpe-32k (bpe-32k/ altında) | 32.000 | 1,38 | 5,12 | ✓ |
| Qwen2.5 (referans) | 151.665 | 2,45 | 2,89 | — |
Alan-içi Türkçe metinde Qwen2.5'in genel amaçlı tokenizer'ından
~1,7× daha verimli — 9× küçük sözlükle.
Neden 16k ana sürüm?
32k'nın fertility avantajı yalnızca %6,8, buna karşılık sözlük iki katına
çıkıyor. Sözlük bileşimine bakınca eklenen yuvaların nereye gittiği görülüyor:
| Token gövdesi | 16k | 32k |
|---|
≤5 harf (yapı taşı: ler, lık, öğretmen) | %44 | %33 |
| 6–9 harf | %40 | %41 |
| ≥10 harf (nadir tam kelime ezberi) | %16 | %26 |
Eklenen bütçenin büyük kısmı gerçekleştirilecektir,
görevlendirileceklere gibi nadir tam kelimelere gidiyor. 544 bin kelimelik
derlemde bu tokenların çoğu 2–3 kez görülmüş; yeni metinde karşılığı yok.
Örnek cümlede iki tokenizer birebir aynı bölümlemeyi üretiyor. Bu yüzden
genelleme gücü daha yüksek olan 16k ana sürüm seçildi; 32k karşılaştırma
için repoda bırakıldı.
Yöntem
- Byte-level BPE (
tokenizers kütüphanesi): hiçbir karakter <unk>
olmaz. Derlem windows-1254'ten dönüştürüldüğü için bu bir sigorta.
- Küçük harfe çevirme yok. Türkçe'de
i/İ ve ı/I dönüşümü bozulmaya
yol açar; yalnızca Unicode NFC normalizasyonu uygulandı.
min_frequency=2 — tek seferlik tesadüfler token olmasın.
- Özel tokenlar:
<unk>, <pad>, <|im_start|>, <|im_end|>,
<think>, </think> (ChatML + düşünce bloğu; veri setinin yapısıyla uyumlu).
- Eğitim/değerlendirme ayrımı %95/%5; fertility eğitim metninde değil,
görülmemiş dilimde ölçüldü.
Soy ağacı
Yöntem, aynı yazarın önceki BPE çalışmasının devamıdır — orada algoritma
önce kütüphanesiz elle yazılmış, sonra iki küçük derlemde karşılaştırılmıştı:
namruni/bpe-deneyleri-tr ·
GitHub
Sınırlamalar
Tek alanda (MEB mevzuat/özlük Türkçesi) eğitildi; genel Türkçe metinde
verimi daha düşük olabilir. Önceden eğitilmiş bir modelin tokenizer'ı
bununla değiştirilemez — embedding matrisi kendi sözlüğüne bağlıdır.
Chat template
Bu repo, ChatML biçiminde bir chat_template.jinja içerir. system, user, assistant ve tool rollerini sarmalar;
assistant mesajındaki tool_calls alanını <tool_call>...</tool_call> bloğu, aracın döndürdüğü sonucu ise ayrı bir tool turn'ü olarak işler.
add_generation_prompt=True iken sona <|im_start|>assistant eklenir.
(altında apply_chat_template ile kısa Python örneği ve üretilen ChatML biçimi)