Character, Word, Token: The 3 Units That Determine Your Bill — and Their Surprising Differences
A token is the basic unit through which LLMs see text. Character count, word count, and token count give very different results for the same text. By the end of this lesson, you'll estimate 'how many tokens is this paragraph?' from memory with <10% error.
Şükrü Yusuf KAYA
18 min read
Beginner🧬 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:
| Birim | Sayı |
|---|---|
| Karakter (boşluklarla) | 67 |
| Kelime | 11 |
| 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 () modelin başını ağrıttı. Türkçe gibi agglutinative (eklemeli) diller içinse felaketti — her kelime onlarca türevle.
OOV — out of vocabularyYani: 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ı):
- Tüm metni karakterlerine ayır
- En sık beraber gelen iki karakteri birleştir, vocabulary'ye ekle (örn: +
t→h)th - Tekrar say, en sık çifti birleştir (örn: +
th→e)the - 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ı#
| Dil | Token/kelime |
|---|---|
| İngilizce | 1.3 |
| Türkçe | 2.0 |
| Almanca | 1.7 |
| Çince | 1.0 (her karakter ~bir token) |
| Japonca | 1.1 |
| Arapça | 2.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 (, , ). Tokenizer'ların favori girdisi.
functionreturnconstMini 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ğuntiktoken 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ı:
| Model | Vocabulary boyutu | Tokenizer adı |
|---|---|---|
| GPT-4o, GPT-5 | 200K | o200k_base (cl100k'nın yenisi) |
| Claude 3+, 4+ | ~65K | claude (BPE varyantı) |
| Gemini 2.5 | 256K | sentencepiece |
| Llama 3, 4 | 128K | tiktoken-style |
| Mistral, Codestral | 32K (Mistral 3+: 128K) | sentencepiece |
| DeepSeek V3 | 102K | sentencepiece |
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?
Frequently Asked Questions
No — the tokenizer is set during model training and cannot be changed. If you call GPT-4o, you must count with o200k_base. But you can choose a different model and thereby a different tokenizer — one of the motivations behind Module 8's routing.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Module 0: Why Cost, Why Now?
The AI Cost Explosion: Why Token Prices Fell 96% from 2022 to 2026 — Yet Bills Grew 40×
Start LearningModule 0: Why Cost, Why Now?
Unit Economics Vocabulary: COGS, Gross Margin, $/User, Contribution Margin — 9 Financial Concepts Every AI Engineer Must Know
Start LearningModule 0: Why Cost, Why Now?