İçeriğe geç

Tokenizer Distillation: Çoklu Modeller Arası Token Mapping ve TR Token Verimi Ölçümü

Distil ettiğin teacher modelin tokenizer'ı student'inkinden farklı → label mismatch. Token-level distillation için cross-tokenizer mapping table inşası, GPT-4 → Llama-3 distill örneği, TR token verimi karşılaştırması (Llama-3 vs Qwen 2.5 vs Gemma 3 vs Mistral vs Phi-4) — hangi tokenizer Türkçe için ne kadar etkili?

Şükrü Yusuf KAYA
28 dakikalık okuma
İleri
Tokenizer Distillation: Çoklu Modeller Arası Token Mapping ve TR Token Verimi Ölçümü
🎯 Iki konu
(1) Distillation'da student ve teacher farklı tokenizer'a sahipse logit alignment nasıl? (2) Mevcut modellerin TR token verimi nedir — yeni model seçerken hangi tokenizer 'TR-friendly'?

1. TR Token Verimi Tablosu (Mart 2026)#

10K Türkçe cümle üzerinde, ortalama tokens/word:
ModelVocabTokens/word (TR)Tokens/word (EN)TR efficiency
Llama-3 (128K, multilingual BPE)128,2563.211.340.42
Qwen 2.5 (151K)151,9362.341.360.58
Mistral Small 3 (32K)32,7684.181.410.34
Gemma 3 (256K)256,0001.951.270.65
Phi-4 (100K cl100k_base)100,3522.881.320.46
GPT-4o (200K)200,0192.711.300.48
Custom TR-BPE 50K50,0001.92n/a0.66
Karar matrisi:
  • TR-only kullanım: Gemma 3 (eğer 256K embedding maliyetini kabullenirsen) veya Qwen 2.5
  • TR + EN: Qwen 2.5 (en dengeli)
  • TR + EN + diğer: Llama-3 (multilingual'da iyi ama TR sıkı)
  • Sıfırdan TR: custom 50K BPE
Cookbook'taki Llama-3 dersleri TR-extension dersini de içerir. Qwen 2.5 zaten TR-friendly olduğu için default önerilen base.
python
# === Cross-tokenizer mapping table — distill için ===
from transformers import AutoTokenizer
import numpy as np
 
teacher_tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-72B-Instruct")
student_tok = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3.1-8B")
 
# Tek bir prompt için iki tokenizer'ın output'larını align et
prompt = "Yapay zekâ ile insan kararının kavşağında..."
 
t_ids = teacher_tok.encode(prompt, add_special_tokens=False)
s_ids = student_tok.encode(prompt, add_special_tokens=False)
 
t_tokens = teacher_tok.convert_ids_to_tokens(t_ids)
s_tokens = student_tok.convert_ids_to_tokens(s_ids)
 
print(f"Teacher tokens: {len(t_tokens)} | Student tokens: {len(s_tokens)}")
# Teacher 14 token, Student 28 token (TR ile Llama-3 daha parçalı)
 
# Yaklaşım: 'span alignment' — substring matching
# Teacher token i. → student token range [j_start, j_end]
def align_spans(t_tokens, s_tokens, t_str, s_str):
"""O(n+m) span alignment by reconstructing original text."""
t_offsets = []
pos = 0
for tok in t_tokens:
clean = tok.replace("Ġ", " ").lstrip()
t_offsets.append((pos, pos + len(clean)))
pos += len(clean)
 
s_offsets = []
pos = 0
for tok in s_tokens:
clean = tok.replace("Ġ", " ").lstrip()
s_offsets.append((pos, pos + len(clean)))
pos += len(clean)
 
# Map each teacher span to student span(s) by overlap
mapping = []
j = 0
for ti, (ts, te) in enumerate(t_offsets):
student_spans = []
while j < len(s_offsets) and s_offsets[j][1] <= te:
student_spans.append(j)
j += 1
mapping.append((ti, student_spans))
return mapping
 
# Bu mapping ile teacher'ın logit distribution'unu student'ın token uzayına project edebilirsin
# Detay: Part XI — Distillation Recipes
cross-tokenizer span alignment

2. Distill Stratejileri#

YaklaşımKarmaşıklıkKalite
Response distillation (sadece teacher'ın output text'ini SFT'de label olarak kullan)düşükdüşük-orta
Logit distillation (cross-tokenizer mapping ile teacher logit'lerini student'a project)yüksekyüksek
Black-box distillation (sadece teacher'ın text output'u)düşükdüşük
White-box distillation (teacher'ın hidden states + logits)aşırı yükseken yüksek
Cookbook'un Part XI'ında detaylı; bu derste sadece concept.
✅ Teslim
  1. 5 base model tokenizer'ı için TR token verimi tablosunu kendi corpus'unla doğrula. 2) Karar: TR-only mi multi-lang mi? → buna göre base model seçimi. 3) Sonraki ders: 2.4 — Chat Template Mathematics: Jinja Parsing ve Token Anatomisi.

Yorumlar & Soru-Cevap

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

İlgili İçerikler