İçeriğe geç

Tokenization Zihinsel Modelin Parçası: Token Ekonomisi, Türkçe Tuzakları ve Glitch Tokens

Token sınırlarının tahminleri nasıl şekillendirdiği, Türkçe gibi morfolojik zengin dillerde token ekonomisinin etkisi, SolidGoldMagikarp gibi 'glitch tokens', leading whitespace problemi, prompt engineering'in token-level detayı. Modül 6 (Tokenization Mikro-Cerrahisi) için pratik zemin.

Şükrü Yusuf KAYA
50 dakikalık okuma
Orta
Tokenization Zihinsel Modelin Parçası: Token Ekonomisi, Türkçe Tuzakları ve Glitch Tokens
🔤 'Bir token = bir kelime' yanlışı yıkılıyor
Tokenization, LLM'le çalışmanın 'görünmez katmanı'. Çoğu mühendis 'token sayısı önemli' diye bilir ama detayları kaçırır. 50 dakika sonra: niye 'merhaba' Türkçe modelde 1 token İngilizce modelde 3 token; niye GPT prompt'larda baştaki boşluk neyi değiştiriyor; niye SolidGoldMagikarp gibi tuhaf token'lar var; nasıl token-level analiz ile prompt'unu optimize edersin — hepsini bileceksin.

Ders Haritası#

  1. Tokenization neden lazım? Bir LLM'in input/output dili
  2. BPE algorithmasının özü (Modül 6'ya hızlı önizleme)
  3. Token boundary effect: tahminleri nasıl şekillendiriyor
  4. Türkçe token ekonomisi: korkunç gerçek
  5. Leading whitespace tuzağı — " hello" vs "hello"
  6. Special tokens: BOS, EOS, PAD, special role
  7. Glitch tokens: SolidGoldMagikarp tarihi
  8. Prompt'un token-level analizi
  9. tiktoken
    ve
    tokenizers
    pratik
  10. Token-aware prompt engineering

1. Tokenization Neden Lazım?#

LLM'ler discrete sequence'lar üzerinde çalışır. Ama dil continuous (her uzunlukta, her dilde, her karakterde). Çözüm: discrete vocabulary.

Üç seviye#

SeviyeVocabAvantajDezavantaj
Character~100Tüm string'ler işlenebilirÇok uzun sequence
Word~50K-100KAnlamlı birimOOV (out-of-vocabulary), morfoloji
Subword (BPE/WordPiece)~30K-128KSweet spotAlgoritma seçim
Modern LLM'ler subword: BPE (GPT, Llama), WordPiece (BERT), SentencePiece (T5, multilingual).

LLM'in dünya algısı#

Bir LLM dili kelime, harf, kavram olarak görmüyor. Token ID'leri görüyor — integer'lar. Şöyle:
"Merhaba dünya!" → tokenize → [42, 7891, 287, 0] (4 token) → vocab lookup → 4 embedding vector → forward pass → predict next token ID
Her şey ID üzerinden. Tokenization, LLM'in 'çevirisi'.

2. BPE Algoritmasının Özü#

Detaylı Modül 6'da ama hızlı önizleme:

BPE adımları#

  1. Başlangıç: tüm karakterler (veya bytes) vocab'ta
  2. Tekrarla:
    • Corpus'ta en sık görülen bigram'ı bul
    • Bunu yeni bir token olarak vocab'a ekle
    • Corpus'ta bu bigram'ı yeni token ile değiştir
  3. Stop: vocab boyutu hedefe ulaşınca dur (örn. 50K)

Örnek#

Corpus: "low low low lower newer"
  • Başlangıç:
    {l, o, w, e, r, n, ' '}
  • Sık bigram:
    lo
    → vocab'a ekle,
    low
    lo+w
  • Sonraki sık:
    er
  • Devam ederek:
    low
    ,
    lower
    ,
    newer
    gibi anlamlı birimler oluşuyor

Önemli özellikler#

  • Sub-word: kelimenin yapı taşlarına ayrılır
  • Frequency-driven: yaygın kelimeler tek token, nadirler çok token
  • No OOV: en azından karakter seviyesine inebilir
  • Language-specific: corpus dağılımına bağlı

Pratik etki#

Aynı kelimenin İngilizce ve Türkçe tokenizer'da farklı tokenize edilmesi tamamen corpus dağılımının sonucu.

3. Token Boundary Effect — Tahminleri Nasıl Şekillendiriyor#

Modelin tahmini token boundary'sine çok hassas. Aynı string'in farklı tokenization'ı farklı output verebilir.

Klasik örnek (GPT-2/3 döneminden)#

Sayılar:
"123" → [123] (single token) "1234" → [12, 34] (2 token) "12345" → [12, 345] (2 token) "123456" → [123, 456] (2 token)
Sayının nasıl tokenize edildiği model'in matematiksel başarısını etkiliyor! GPT-3 niye basit aritmetikte çuvallıyordu — kısmen bu yüzden. GPT-4+ ve Llama 3 sayı tokenization'ını düzeltti (her digit ayrı token).

Türkçe örnek#

"İstanbul" tek başına → ["İstanbul"] tek token (yaygın) "İstanbulluyum" → ["İstanbul", "lu", "yum"] (3 token) "İstanbulluymuşsunuz" → ["İstanbul", "lu", "ymuş", "sunuz"] (4 token)
Morfeme uygun tokenization ideal ama BPE bunu garanti etmiyor — corpus distribution'a bağlı.

Spelling sorunları#

GPT-4'e "How many 'r's in 'strawberry'?" → uzun süre yanlış cevap verdi. Niye?
strawberry
token olarak
[stra, w, berry]
veya
[straw, berry]
halinde. Model kelimenin karakterlerini saymıyor — tokenları sayıyor. Doğru cevap için ya detaylı reasoning ya da tool use (Python) gerekiyor.
python
# Klasik tokenization deneyleri
import tiktoken
 
enc_gpt2 = tiktoken.get_encoding("gpt2")
enc_gpt4 = tiktoken.get_encoding("cl100k_base") # GPT-3.5/4
enc_gpt5 = tiktoken.get_encoding("o200k_base") # GPT-4o, GPT-5
 
def show_tokens(text, encoders):
print(f"\n--- '{text}' ---")
for name, enc in encoders:
tokens = enc.encode(text)
decoded = [enc.decode([t]) for t in tokens]
print(f"{name:15} ({len(tokens)} tokens): {decoded}")
 
encoders = [("GPT-2", enc_gpt2), ("GPT-4 cl100k", enc_gpt4), ("GPT-5 o200k", enc_gpt5)]
 
# İngilizce vs Türkçe karşılaştırma
show_tokens("Hello world", encoders)
show_tokens("Merhaba dünya", encoders)
 
# Sayı tokenization evrim
show_tokens("12345", encoders)
show_tokens("1234567890", encoders)
 
# Türkçe morfoloji testi
show_tokens("evlerimden", encoders)
show_tokens("Türkiye'nin başkenti", encoders)
 
# Karakter sayma problemi
show_tokens("strawberry", encoders)
Tokenization karşılaştırması — GPT-2, GPT-4, GPT-5 tokenizer'ları.

4. Türkçe Token Ekonomisi — Korkunç Gerçek#

Türkçe morfolojik olarak zengin (agglutinative). Bir kök + çok ek = tek kelime. BPE bunu kelimeler bütün olarak tokenize etmek için yeterince corpus görmüyor (çünkü her morfoloji kombinasyonu nadir).

Sayısal etki (GPT-4 cl100k_base)#

İngilizceTokenTürkçeToken
"house"1"ev"1
"my house"2"evim"3
"in my house"3"evimde"4
"from my house"3"evimden"4
"from my houses"4"evlerimden"5
Türkçe karakter sayısı az ama token sayısı yüksek. Tipik oran: 2-3x daha çok token.

Maliyet etkisi#

OpenAI API fiyatları token başına. GPT-5 input $1.25/1M. Aynı paragrafı:
  • İngilizce: 100 token → $0.000125
  • Türkçe: 250 token → $0.0003
Türkçe kullanım %150-200 daha pahalı. Yıllık 10K istek için $100-200 fark.

Context length etkisi#

GPT-5 context window 1M token. Türkçe ile %50 efektif context (500K karakter). Long context için kritik.

Çözüm#

  • Türkçe-optimized tokenizer: BERTurk, Türkçe BPE — ~%30-50 tasarruf
  • Multilingual tokenizer: mistral, qwen, llama 3 — biraz daha iyi
  • Custom domain tokenizer: spesifik corpus'ta train — büyük tasarruf
Modül 6'da detaylı tokenizer eğitimi yapıyoruz.

5. Leading Whitespace Tuzağı#

Modern BPE tokenizer'lar boşluk dahil token üretir:
" Ankara" → [" Ankara"] (1 token, leading space dahil) "Ankara" → ["Ank", "ara"] (2 token, leading space yok)
Niye? İngilizce'de kelimeler genelde boşlukla başlar ('I want the answer'). Tokenizer "the" yerine " the" formunu sık görüyor → birleşik.

Prompt'ta etki#

Prompt: "The capital is " (sonu boşluk) Modelin beklediği: "Ankara" (boşluksuz) — çünkü " Ankara" yerine başka bir token aramaya başlar
Tersi:
Prompt: "The capital is" (boşluksuz) Modelin beklediği: " Ankara" (boşluklu) — doğal devam

Hata: trailing space koyma#

Birçok beginner prompt sonuna boşluk koyar. Bu modelin distribution'ını bozar — daha yüksek loss, daha kararsız üretim.

Doğru pattern#

prompt = "The capital is" # ✓ son boşluk yok prompt = "The capital is Ank" # ✓ devam edecek model "ara" üretir prompt = "The capital is " + ... # ✗ trailing space — kaçın

Chat template'lerin çözümü#

Modern chat template'ler bu sorunu baştan çözüyor —
<|user|>...<|assistant|>
gibi special tokenlarla. Ama raw completion API kullanıyorsan dikkatli ol.

6. Special Tokens — BOS, EOS, PAD ve Daha Fazla#

Tokenizer'larda normal kelime tokenları + special tokens var.

Yaygın special tokens#

TokenAnlamKullanım
`<begin_of_text>
veya
` (BOS)
`<end_of_text>
veya
` (EOS)
`<pad>` (PAD)
`<unk>` (UNK)
`<user>
,
<
`<im_start>
,
<
`<tool_call>
,
<

Chat template örneği (Llama 3)#

<|begin_of_text|><|start_header_id|>system<|end_header_id|> You are a helpful AI assistant.<|eot_id|><|start_header_id|>user<|end_header_id|> Hello!<|eot_id|><|start_header_id|>assistant<|end_header_id|> Hi! How can I help you?<|eot_id|>
Bu format explicit chat structure'ı tokenizer'a tanıtır. Model fine-tuning'de bu pattern'i öğrenmiştir.

Pratik#

HuggingFace'de:
from transformers import AutoTokenizer tok = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct") messages = [ {"role": "system", "content": "You are helpful."}, {"role": "user", "content": "Hi!"}, ] prompt = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) print(prompt) # Llama 3 chat format ile dolu
Modül 20 (SFT) chat template'leri detaylandırıyor.

7. Glitch Tokens — SolidGoldMagikarp Tarihi#

Şubat 2023'te Twitter'da bir araştırmacı (Jessica Rumbelow) tuhaf bir keşif yaptı: GPT-3
SolidGoldMagikarp
token'ını gördüğünde garip davranıyor — random kelimeler üretiyor, kafası karışıyor.

Olay#

SolidGoldMagikarp
Reddit'te bir kullanıcı adı. BPE corpus'ta Reddit yoğun, bu username çok sık geçtiği için BPE onu tek token yaptı.
Sonra: training data filtering (toxic content removal vb.) bu Reddit'i çıkardı. Sonuç: token vocab'ta var ama hiç eğitim verisinde görülmedi → embedding rastgele kaldı → model bu token'a tepki chaotic.

Diğer glitch tokens#

  • petertodd
    (Bitcoin developer)
  • davidjl
    (Reddit username)
  • Streamerbot
    (Twitch bot)
  • StreamerBot
    (case sensitive variant)
  • Birçok Reddit username

Pratik etki#

  • Prompt injection: kötü niyetli kişi glitch token'ı prompt'a yerleştirerek modeli karıştırabilir
  • Hallucination kaynağı: nadir bir input bazen glitch token üretir
  • Tokenization audit: modern güvenli LLM'ler tokenizer audit yapıyor

Modern modellerde#

  • GPT-4 cl100k_base: çoğu glitch token temizlendi
  • GPT-5 o200k_base: tokenizer revize edildi
  • Llama 3, Qwen, Mistral: dikkatli tokenizer training

Senin için#

Token-level test yap: vocab'tan rastgele 1000 token al, modele tek tek ver, çıktısını gözlemle. Anomali glitch token belirtisi.

8. Token-Aware Prompt Engineering#

Profesyonel prompt engineering token-level düşünmeyi gerektirir.

1. Prompt'unu tokenize et#

Modern prompt yazımda gözle görmeden token sayısı tahmin etmek zor. Her zaman:
import tiktoken enc = tiktoken.get_encoding("cl100k_base") prompt = "Your long detailed prompt..." print(f"Tokens: {len(enc.encode(prompt))}")

2. Token bütçesi planı#

GPT-5 context 1M, ama:
  • Input + output toplam
  • System prompt + user prompt + history + RAG context + output
Karmaşık agent'ta dikkat: 50K token system + 30K conversation + 100K RAG = 180K input → büyük cost.

3. Compression teknikleri#

  • Prompt compression: LLMLingua, AutoCompressor — %50-70 tasarruf
  • Caching: prompt prefix'i cache (Anthropic, OpenAI) — %90 cost savings cached için
  • Summary instead of full context: önceki mesajları LLM ile özetle

4. Whitespace ve format#

  • Trailing space yok
  • Markdown formatting token tüketir ama clarity'i artırır → trade-off
  • Inline code tokenization — backtick'ler ekstra token

5. Multi-language strategy#

Eğer ürün Türkçe + İngilizce ise:
  • System prompt İngilizce (token tasarrufu)
  • User content native dilde
  • Bir Türkçe input → bazen İngilizce-equivalent expand et
python
# Real-world: prompt token budget calculator
import tiktoken
 
enc = tiktoken.get_encoding("cl100k_base")
 
def analyze(label, text, output_tokens=200, model_price_in=1.25, model_price_out=10):
in_tokens = len(enc.encode(text))
cost = (in_tokens * model_price_in + output_tokens * model_price_out) / 1e6
print(f"{label:30} | in: {in_tokens:5} tok | out: {output_tokens} tok | ${cost:.6f}")
 
# Senaryo: aynı bilgi farklı dillerde
en = "Please write a 100-word summary of the article about climate change and its impact on Turkish agriculture."
tr = "İklim değişikliğinin Türk tarımına etkisi hakkındaki makalenin 100 kelimelik özetini yaz."
 
analyze("İngilizce prompt", en)
analyze("Türkçe prompt", tr)
 
# RAG context simulation
context = "Sentence about climate." * 50
en_with_rag = en + "\n\nContext: " + context
analyze("EN + RAG", en_with_rag)
 
# Annual cost calculation
print("\nYıllık 10K istek için:")
print(f" EN: {len(enc.encode(en)) * 10000 * 1.25 / 1e6 + 200 * 10000 * 10 / 1e6:.2f} USD")
print(f" TR: {len(enc.encode(tr)) * 10000 * 1.25 / 1e6 + 200 * 10000 * 10 / 1e6:.2f} USD")
Token bütçesi hesaplama — gerçek dünya cost analizi.

9. Mini Egzersizler#

  1. Token count tahmini: "Bir LLM mühendisinin günde 100 prompt yazdığını düşün." Türkçe ve İngilizce'de tahmini token sayısı?
  2. Glitch token detection: Bir LLM tokenizer'ında bir token'ın 'glitch' olduğunu nasıl test edersin? Algoritma yaz.
  3. Trailing space etkisi: "The Eiffel Tower is in " (boşluklu) vs "The Eiffel Tower is in" (boşluksuz) modeline ver. Hangisinin perplexity'si düşük olur?
  4. Türkçe tokenization optimization: Bir e-ticaret şirketi GPT-5 ile Türkçe support yapacak. Yıllık maliyet $50K. Token tasarrufu için 3 strateji önerin.
  5. Sayı tokenization: "1234567" GPT-2 ve GPT-5'te kaç token olur? Bu farkın matematik benchmark'larda etkisi nedir?

Bu Derste Neler Öğrendik?#

Tokenization = LLM ile dünya arasındaki çeviri katmanı ✓ BPE algoritmasının özü — frequency-driven, sub-word ✓ Token boundary effect — sayılar, kelimeler, spelling ✓ Türkçe token ekonomisi — 2-3x maliyet, çözümler ✓ Leading whitespace tuzağı — trailing space yok ✓ Special tokens — BOS, EOS, chat template'leri ✓ Glitch tokens — SolidGoldMagikarp hikayesi ✓ Token-aware prompt engineering — pro practices ✓ Real-world cost calculation — Türkçe yıllık ek maliyet

Sıradaki Ders#

4.3 — Sampling Sanatı: Greedy, Beam, Top-K, Top-P, Temperature, Min-P Derinlemesine Ders 1.5'te sampling temellerini gördük. Şimdi production-level detaylar: hangi parameter ne yapıyor, repetition penalty, beam search ne zaman gerekli, structured output için sampling, modern reasoning modellerinde sampling.

Sık Sorulan Sorular

Bir hafta tam-time mühendislik. Adımlar: (1) **Corpus toplama** (2-3 gün): Türkçe Wikipedia, akademik metin, news, edebiyat — ~50GB. (2) **BPE training** (1-2 gün): HuggingFace tokenizers ile vocab=32K-64K. (3) **Evaluation** (1-2 gün): test set'te tokens/karakter oranı, downstream task. (4) **Iterations** (kalan): hyperparameter tune. Kalite: native BERTurk seviyesine ulaşabilir. Modül 6 ve Capstone C13 (TurkTokenizer) bunu detaylandırıyor.

Yorumlar & Soru-Cevap

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

İlgili İçerikler