İçeriğe geç

Karakter, Kelime, Token: Faturanı Belirleyen 3 Birim ve Aralarındaki Şaşırtıcı Farklar

Token, LLM'lerin metni gördüğü temel birim. Karakter sayısı ile, kelime sayısı ile, ve token sayısı ile aynı metin **çok farklı** sonuçlar verir. Bu dersin sonunda 'şu paragraf kaç token?' sorusunu kafadan tahminle %10 yanılgıyla cevaplayabileceksin.

Şükrü Yusuf KAYA
18 dakikalık okuma
Başlangıç
Karakter, Kelime, Token: Faturanı Belirleyen 3 Birim ve Aralarındaki Şaşırtıcı Farklar
🧬 Bu derste ne öğreneceksin
Token tam olarak nedir, neden bir 'kelime' değildir, BPE algoritması hangi mantıkla çalışır, Türkçe için neden daha 'kötü' davranır, ve aklında 'kaba tahmin' formülleri olarak ne kalmalı.

Üç farklı birim, çok farklı sayılar#

Şu cümleyi alalım:
"LLM mühendisliği zor bir disiplin ama öğretilebilir bir disiplindir."
Aynı cümleyi üç farklı şekilde ölçelim:
BirimSayı
Karakter (boşluklarla)67
Kelime11
Token (GPT-4o tokenizer)22
Token (Claude tokenizer)20
Token (Llama 3 tokenizer)24
Aynı cümle. 22, 20, 24 farklı token. Ve faturana yansıyan bu sayı.
Bu üç birim niye birbirinden farklı? Çünkü LLM'ler dünyayı karakter olarak da, kelime olarak da görmez. Üçüncü bir şeyle görür: subword token.

Neden karakter değil?#

Eğer LLM her bir karakteri ayrı işleseydi:
  • 1 milyon karakter = 1 milyon iterasyon
  • Yavaş, pahalı, anlamsız (her karakter çok az bilgi taşır)
İngilizce'de "the" 3 karakter. "Information" 11 karakter. Karakter bazında bakınca "the" çok az bilgi taşır gibi görünür. Ama dil semantiği bunu söylemiyor — "the" çok yüksek frekansta kullanılan anlam birimi.
Karakter sayımı dilbilimsel anlamı yansıtmıyor.

Neden kelime de değil?#

Tam tersi sorun: kelime tabanlı olsa:
  • "öğretilebilirim" tek kelime = tek token mı?
  • O zaman vocabulary milyonlarca türevden oluşur
  • "Yapay" + "zeka" iki ayrı token mı? Yoksa "yapay zeka" bir mi?
Kelime tabanlı tokenization 1990-2010 arası NLP'nin standartıydı (word2vec dönemi). Yetersiz kaldı: nadiren kullanılan kelimeler (
OOV — out of vocabulary
) modelin başını ağrıttı. Türkçe gibi agglutinative (eklemeli) diller içinse felaketti — her kelime onlarca türevle.
Yani: karakter çok küçük, kelime çok büyük. Aradaki tatlı bölgeye ne diyoruz? Subword token.

Subword token: Aradaki altın orta#

Modern LLM'ler metni subword parçalara böler. Kural:
  • Sık kullanılan kelimeler bir bütün token olur (
    the
    ,
    bir
    ,
    için
    )
  • Nadir kelimeler küçük parçalara bölünür (
    öğretilebilirim
    öğretil
    +
    ebilir
    +
    im
    )
  • Tam emin değilse, en aşağıda byte seviyesine kadar iner
Bu algoritmanın adı Byte-Pair Encoding (BPE) veya türevleri (WordPiece, SentencePiece, Unigram). 2015'te Sennrich et al. NLP'ye getirdi, 2019'da GPT-2 ile mainstream oldu.

BPE algoritması — Sezgisel anlatım#

Algoritma şöyle çalışır (eğitim fazı):
  1. Tüm metni karakterlerine ayır
  2. En sık beraber gelen iki karakteri birleştir, vocabulary'ye ekle (örn:
    t
    +
    h
    th
    )
  3. Tekrar say, en sık çifti birleştir (örn:
    th
    +
    e
    the
    )
  4. Belirlediğin vocabulary boyutuna (örn: 100K) ulaşana kadar tekrar et
Eğitimden sonra vocabulary tablon hazır. Yeni metin geldiğinde, sondan başa en uzun match algoritmasıyla parçala.

Mini örnek#

Diyelim eğitim verisinde "öğret" çok geçti, "ebilir" de çok geçti, "im" çok geçti. Ama "öğretilebilirim" hiç geçmedi (nadir).
Tokenizer şöyle parçalar:
"öğretilebilirim" → ["öğret", "il", "ebilir", "im"] 4 token
Aynı algoritmada İngilizce "teachable":
"teachable" → ["teach", "able"] 2 token
İşte Türkçe penalty'nin mikro-mekaniği burada başlıyor. Aynı semantik anlam (öğretilebilirim ≈ I am teachable), 4 token'a karşılık 2 token. 2× pahalı.
📐 BPE'nin altın kuralı
Bir token = vocabulary'deki en uzun match. Vocabulary İngilizce için tasarlandığında, Türkçe kelimeler doğal olarak parçalara ayrılıyor. Bu, Türkçe LLM kullanan herkesin gözlemleyebileceği ama nadiren bilinçli izlediği bir gerçek.

Kafadan tahmin için pratik kurallar#

Üretim sırasında "şu prompt kabaca kaç token?" tahminini hızlı yapabilmek hayati. İşte 4 kuralım:

Kural 1 — İngilizce için 4-karakter kuralı#

Token sayısı ≈ karakter sayısı / 4
Örnek: 1000 karakter İngilizce metin ≈ 250 token. Doğrulukla %5 sapma.

Kural 2 — Türkçe için 3-karakter kuralı#

Token sayısı ≈ karakter sayısı / 3
Türkçe 4 yerine 3 ile bölünüyor — çünkü token'lar daha küçük (üstte gördük). Aynı 1000 karakter Türkçe metin ≈ 333 token, İngilizce'nin %33 fazlası.

Kural 3 — Kelime başına token sayısı#

DilToken/kelime
İngilizce1.3
Türkçe2.0
Almanca1.7
Çince1.0 (her karakter ~bir token)
Japonca1.1
Arapça2.2

Kural 4 — Kod için 5-karakter kuralı#

Kod token sayısı ≈ karakter / 5
Kod metni çok yoğun ortak parça içerir (
function
,
return
,
const
). Tokenizer'ların favori girdisi.

Mini Lab — Tahmin yeteneğini ölç#

Aşağıdaki üç metin için tahminini yap (10 saniye), sonra koda bak ve doğrula.
Metin 1: "Türkiye'deki yapay zeka ekosistemi son üç yılda büyük bir ivme kazandı." → Tahmin: ___ token
Metin 2: "In the rapidly evolving landscape of artificial intelligence, large language models have become indispensable tools." → Tahmin: ___ token
Metin 3: Python kod parçası:
def calculate_cost(input_tokens, output_tokens): return (input_tokens * 3 + output_tokens * 15) / 1_000_000
→ Tahmin: ___ token
Şimdi gerçek sayıları görelim:
python
import tiktoken
 
enc = tiktoken.encoding_for_model("gpt-4o")
 
texts = {
"Türkçe metin": "Türkiye'deki yapay zeka ekosistemi son üç yılda büyük bir ivme kazandı.",
"İngilizce metin": "In the rapidly evolving landscape of artificial intelligence, large language models have become indispensable tools.",
"Python kod": """def calculate_cost(input_tokens, output_tokens):
return (input_tokens * 3 + output_tokens * 15) / 1_000_000""",
}
 
for name, text in texts.items():
tokens = enc.encode(text)
chars = len(text)
words = len(text.split())
print(f"\n{name}:")
print(f" Karakter: {chars}")
print(f" Kelime: {words}")
print(f" Token: {len(tokens)} ({chars/len(tokens):.2f} char/token)")
 
# Beklenen çıktı (yaklaşık):
# Türkçe metin: 72 char, 11 word, 25 tok (2.88 char/token) → 3-kural ✅
# İngilizce metin: 119 char, 16 word, 21 tok (5.66 char/token) → 4-kural ✅ + biraz fazla
# Python kod: 117 char, 8 word, 30 tok (3.90 char/token) → kod yoğun
tiktoken ile üç metni gerçek sayım. Türkçe metni İngilizce'nin **2 kat** token harcadığını gör.
🚨 Sonuç şoku
Türkçe metin 72 karakter, 25 token. İngilizce metin 119 karakter, 21 token. Karakter sayısı 2× daha fazla ama Türkçe daha çok token! İşte 1.3'te derinleşeceğimiz "Türkçe penalty" gerçeği bu.

"Bir kelime = bir token" yanılgısı#

Bu yanılgı her yerde. AI fiyatlandırma blog'larında, indie hacker'ların hesaplarında, hatta bazı CTO'ların pitch deck'lerinde.
"Bin kelimelik bir cevap = 1000 token. $0.015 maliyet."
Yanlış. Bin kelimelik İngilizce cevap ≈ 1300 token. Bin kelimelik Türkçe cevap ≈ 2000 token. Hesabını kelimeyle yapıyorsan %30-100 yanılıyorsun.
Bu yüzden, kursta yapacağımız her maliyet hesabı token bazında olacak, kelime bazında değil.

Tokenizer'lar arası fark — Aşırı yüzeysel bakış#

Önümüzdeki 5 modelin tokenizer'larının vocabulary boyutları:
ModelVocabulary boyutuTokenizer adı
GPT-4o, GPT-5200Ko200k_base (cl100k'nın yenisi)
Claude 3+, 4+~65Kclaude (BPE varyantı)
Gemini 2.5256Ksentencepiece
Llama 3, 4128Ktiktoken-style
Mistral, Codestral32K (Mistral 3+: 128K)sentencepiece
DeepSeek V3102Ksentencepiece
Daha büyük vocabulary = daha az token (aynı metne) demek. GPT-4o, Llama 3'ten daha az token kullanır. Ama mimari kararlar daha karışık — vocabulary boyutu hikayenin küçük bir parçası.
Bunu bir sonraki derste karşılaştırmalı olarak göreceğiz: aynı Türkçe metni 6 farklı tokenizer'a yedirip kim kazanıyor, kim kaybediyor.

Özet — Aklında kalsın#

  • Token = LLM'nin gördüğü temel birim, karakter ve kelime arası
  • BPE algoritması ile oluşturulur: sık çiftler birleşir, nadir kelimeler parçalanır
  • Tahmin kuralları: İngilizce 4-char/token, Türkçe 3-char/token, Kod 5-char/token
  • "Bir kelime = bir token" yanlıştır
  • Türkçe metin aynı semantik içerik için İngilizce'den ~%50-70 daha çok token harcar
Bir sonraki ders bu farkları görsel olarak göstereceğiz: aynı metin, 6 farklı tokenizer.
▶️ Sıradaki ders
1.2 — Tokenizer Savaşları. GPT-4o, Claude, Gemini, Llama, Mistral, DeepSeek — aynı Türkçe metni hangisi kaç token sayıyor, neden farklılar, hangisi sana daha az faturalandırır?

Sık Sorulan Sorular

Hayır — tokenizer modelin eğitimi sırasında belirlenir ve değiştirilemez. GPT-4o'yu çağırırsan o200k_base ile saymak zorundasın. Ama farklı model seçerek farklı tokenizer'ı seçebilirsin — Modül 8'in routing'inin bir motoru bu.

Yorumlar & Soru-Cevap

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

İlgili İçerikler