Tokenizasyon Teknikleri LLM'lerde Nasıl Çalışır — Mühendis Rehberi
1. Giriş
Tokenizasyon, doğal dil işleme (NLP) ve özellikle büyük dil modelleri (LLM) için temel bir adımdır. Bir metni modelin anlayabileceği sayısal temsillere dönüştürmenin ilk aşaması olan tokenizasyon; modelin performansını, bellek kullanımını, bağlam uzunluğunu ve hatta modelin ürettiği sonucun kalitesini doğrudan etkiler. Bu nedenle tokenizasyon teknikleri, araştırma ve üretim ekipleri tarafından dikkatle seçilmelidir.
Bu konu neden bugün önemli?
- LLM'lerin yaygınlaşmasıyla birlikte token sınırları, maliyet ve latency gibi alt-katman problemleri kritik hale geldi.
- Tokenizasyon yöntemleri model boyutu ve bağlam uzunluğu arasında doğrudan bir trade-off (ödünleşme) oluşturur.
- Uluslararasılaştırma, çok dilli modeller ve hyphen/emoji gibi yeni token türleri tokenizasyon seçimlerini yeniden gündeme getiriyor.
Kimler için önemli?
ML mühendisleri, veri mühendisleri, araştırmacılar ve platform mühendisleri için önemlidir. Ayrıca ürün ekipleri için token maliyetlerinin kullanıcı deneyimi ve işletme maliyetine etkisi kritik bilgiler sunar.
Hangi problemleri çözüyor?
Doğru tokenizasyon, veri sıkıştırması, nadir kelime (rare word) yönetimi, çok dilli uyumluluk, daha uzun bağlamlar ve daha stabil eğitim süreçleri sağlar. Yanlış tokenizasyon ise modelin öğrenmesini zorlaştırır, vakit ve para kaybına yol açar.
2. Kavramsal Temeller
Neden tokenizasyon?
Doğal dilin sonsuz çeşitliliği varken modelin işlem gücü ve bellek sınırlamaları vardır. Tokenizasyon kelimeleri, alt-kelimeleri veya byte seviyesini sabit bir sözlüğe (vocabulary) dönüştürerek metni sınırlı bir alan içine çeker. Bu sözlük daha sonra embedding tablosu ile ilişkilendirilir.
Temel kavramlar
- Token: Modelin işleyeceği temel birim (subword, word, byte).
- Vocabulary (sözlük): Token ile indeks arasındaki eşleme tablosu.
- Out-of-Vocabulary (OOV): Sözlükte olmayan öğeler; modern subword yöntemler OOV problemini azaltır.
- Subword tokenization: Kelimeleri parçalara ayırarak nadir kelimeleri yönetir.
- Byte-level tokenization: Her karakterin doğrudan byte temsili; dil bağımsızdır.
Önemli terminoloji
- BPE (Byte-Pair Encoding)
- WordPiece
- SentencePiece (unigram + BPE seçenekleri)
- Unigram Language Model tokenization
- Byte-level BPE (gpt-2, GPT-NeoX tipi)
3. Popüler Tokenizasyon Yöntemleri
Byte Pair Encoding (BPE)
BPE, başlangıçta karakterlerin birleşim sıklığını iteratif olarak birleştirerek daha sık görülen alt-kelimeleri sözlüğe ekler. Avantajı; verimli sıkıştırma ve azalan OOV. Dezavantajı, dilbilgisel sınırları ihlal edebilecek kesmeler üretebilmesidir.
WordPiece
WordPiece, BPE'ye benzer ancak istatistiksel hedef fonksiyonlarda farklılık gösterir. BERT modellerinin kullandığı WordPiece, genellikle maskelenmiş dil modelleme (masked LM) ile birlikte işe yarar. WordPiece'te yeni token ekleme stratejileri BPE'den farklıdır ve genellikle eğitim verisine uyum sağlar.
SentencePiece (BPE ve Unigram)
SentencePiece, Google tarafından geliştirilen bir araçtır ve doğrudan ham bayt girişleri üzerinde çalışabilir. Hem BPE hem de Unigram modellerini destekler. Unigram modeli, olasılığa dayalı token seçimleri ile daha esnek bir vocabulary oluşturur; BPE ise deterministik birleşimlere dayanır.
Unigram Language Model
Unigram model, her tokenin bağımsız olduğu varsayımıyla bir dil modeli kurar ve maksimum-likelihood ile sözlük seçer. Model daha küçük, daha esnek sözlükler üretebilir ve bazen BPE'den daha iyi performans sağlar.
Byte-level tokenization
Byte-level BPE veya byte-level tokenization, tüm metni UTF-8 byte akışına dönüştürür. Avantajı, tamamen dilagnostik olması ve Unicode karakterlerle güvenli çalışmasıdır; dezavantajı token sayısını artırmasıdır. GPT-2 ve ona türevleri bu yaklaşımı kullandı.
Whitespace / Word tokenization
En basit yöntem; kelimeleri boşluklara göre ayırmak. Basit görevler veya düşük kaynaklı durumlar için kullanışlıdır, ancak morfolojik olarak zengin dillerde yetersiz kalır ve OOV sorununu artırır.
4. Nasıl Seçilir? Teknik Kriterler ve Mimari Etkiler
Seçim kriterleri
- Model hedefi: generation mı, masked LM mi? (autoregressive modeller byte-level avantajlı olabilir)
- Dil kapsamı: çok dilli mi yoksa tek dilli mi?
- Bağlam uzunluğu ihtiyacı: token başına düşen veri miktarı önemli.
- Maliyet ve bellek sınırlamaları: küçük vocabulary düşük embedding maliyeti sağlar ama uzun token dizileri doğurur.
Mimari etkiler
Tokenizasyon doğrudan embedding tablosunun boyutunu ve modeli besleyen sequence length'i etkiler. Örneğin; aynı metin için byte-level tokenization daha fazla token üretir, bu da attention'ın O(n^2) maliyetini artırır ve daha yüksek bellek gereksinimi demektir. Öte yandan byte-level approach dilsel nadirlikleri daha iyi yönetir ve çok dilli modelleri kolaylaştırır.
Örnek trade-offs
- BPE: Orta seviye token sayısı, deterministik, iyi sıkıştırma
- Unigram: Esnek, bazen daha iyi kesinlik, olasılığa dayalı seçim
- Byte-level: Dilagnostik ama token sayısını artırır
- Whitespace: Basit ama OOV riski yüksek
5. Gerçek Dünya Kullanımları ve Örnekler
OpenAI / GPT serisi
GPT-2 ve GPT-3 aileleri byte-level BPE benzeri yaklaşım kullanır. Bu sayede emoji, kod parçaları ve farklı diller tek bir pipeline ile işlenebilir. Ancak çıkarım maliyeti token bazlı olarak artar.
BERT
BERT ailesi WordPiece tokenization kullanır; masked language modeling için uygun token parçalama tercihleri içerir. Türkçe gibi eklemeli dillerde WordPiece kombinasyonları dikkat gerektirir.
Hugging Face modelleri
Hugging Face ekosisteminde farklı tokenizer tipleri desteklenir. Modelin önceden eğitildiği tokenizera sadık kalınması gerekir; farklı tokenizer kullanmak embedding mismatch'lerine neden olur.
Çok dilli modeller (mBERT, XLM-R)
Çok dilli modeller genellikle SentencePiece veya byte-level teknikleri tercih eder; tek bir vocabulary ile onlarca dili desteklemek için subword ve byte stratejileri idealdir.
6. Avantajlar ve Sınırlamalar
Avantajlar
- Subword tokenization nadir kelimeleri ve türevleri yönetir.
- Byte-level yöntemler çok dilli ve güvenli Unicode desteği sağlar.
- Otomatik tokenizasyon araçları (SentencePiece, Hugging Face tokenizers) üretim için olgun çözümler sunar.
Sınırlamalar
- Token sınırları model maliyetini doğrudan etkiler (daha fazla token = daha pahalı inference).
- Yanlış tokenizasyon semantik kayıplara yol açabilir (ör. ayrım yapılması gereken bileşik kelimeler).
- Tokenizasyon değişikliği model ile embedding uyumsuzluğuna neden olur; yeniden eğitimi gerektirebilir.
7. Uygulamalı Örnekler (Python ve C#)
Python: Hugging Face Tokenizers ile hızlı örnek (BPE & Byte-level)
# requirements: tokenizers, transformers
from tokenizers import Tokenizer, models, trainers, pre_tokenizers
from tokenizers.processors import BertProcessing
# Basit BPE tokenizer eğitimi (örnek veri küçük)
paths = ["data/corpus.txt"]
bpe_tokenizer = Tokenizer(models.BPE())
bpe_tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel() # veya Whitespace
trainer = trainers.BpeTrainer(vocab_size=30000, min_frequency=2, special_tokens=["[PAD]","[UNK]","[CLS]","[SEP]","[MASK]"])
bpe_tokenizer.train(paths, trainer)
# Kullanım
encoded = bpe_tokenizer.encode("Merhaba dünya, tokenizasyon testi.")
print(encoded.tokens)
Bu örnek gerçek dünya ölçeği için çok basittir; ancak süreç tokenization eğitim adımını ve kullanımını gösterir.
C#: Tokenization Örneği (Basit yapı ve HuggingFace .NET wrapper fikirleri)
// Basit whitespace tokenization örneği C#
using System;
using System.Linq;
class SimpleTokenizer
{
public static string[] Tokenize(string text)
{
// Basit normalizasyon
var cleaned = text.Trim();
var tokens = cleaned.Split(new[] {' ', '\t', '\n'}, StringSplitOptions.RemoveEmptyEntries);
return tokens.Select(t => t.Trim(new[] {'.',',','!','?'})).ToArray();
}
static void Main()
{
var toks = Tokenize("Merhaba dünya, tokenizasyon testi.");
Console.WriteLine(string.Join("|", toks));
}
}
.NET ekosisteminde üretimde Hugging Face tokenizer'larını veya Tokenizers.NET gibi kütüphaneleri kullanmak daha doğru sonuç verir; ayrıca ONNX veya ONNX Runtime ile birlikte embedding tablosunu tüketebilirsiniz.
8. En İyi Pratikler
Production için öneriler
- Modelin kullanıldığı tokenizer ile tutarlı olun; değişiklikler embedding mismatch'ine yol açar.
- Vocabulary boyutu ile sequence length arasındaki trade-off'u ölçün ve maliyet analizleri yapın.
- Ön-işleme: normalize, Unicode NFC/ NFKC, gereksiz whitespace/zero-width karakter temizliği uygulayın.
- Multi-lingual servislerde byte-level veya SentencePiece Unigram tercihlerini değerlendirin.
- Tokenizasyon istatistiklerini (avg tokens / doc, max tokens, token length distribution) toplayın ve izleyin.
Model geliştirme sürecinde
- Tokenizasyonu eğitim ve çıkarım pipeline'larında aynı kodla uygulayın.
- Yeni token ekleme gerekiyorsa embedding extension stratejisi planlayın (random init vs. projection).
- Fine-tuning sırasında tokenizer değişikliği gerekiyorsa dikkatli retraining ve validation yapın.
9. Sık Yapılan Hatalar
- Prod ve train pipeline'larında farklı tokenization kullanmak (train/serve mismatch).
- Vocabulary'yi gereğinden büyük tutup embedding maliyetini artırmak.
- Locale/Unicode normalizasyonunu ihmal etmek; özellikle Türkçe gibi dillerde büyük/küçük harf dönüşümleri sorun yaratır.
- Tokenizasyonu değiştirdikten sonra modelin davranışını test etmemek.
10. Gelecek Trendler
- İleri seviye tokenizasyon: semantik-aware tokenization ve morfolojik analiz ile birleşen yöntemler.
- Adaptive tokenization: bağlama göre dinamik token split/merge yapan algoritmalar.
- Multimodal tokenizasyon: görüntü/veri+metin birleşik tokenizasyon teknikleri.
- On-device ve privacy-preserving tokenizers: kullanıcı verisini local işleyen yöntemler.
11. Sonuç
Tokenizasyon, LLM mühendisliğinin görünmez ama kritik bir katmanıdır. Doğru seçim model doğruluğunu, maliyeti ve kullanıcı deneyimini doğrudan etkiler. BPE, WordPiece, SentencePiece, Unigram ve byte-level yaklaşımlarının her birinin güçlü ve zayıf yönleri vardır; uygulama bağlamına göre bilinçli seçim ve ölçüm gerektirir.
Okuyucuya tavsiye: Tokenizasyon seçiminde hipotez kurun, küçük deneylerle ölçün, token istatistiklerini sürekli izleyin ve üretim ile eğitim pipeline'larını her zaman senkronize tutun.
Ek Bölümler
FAQ (Sık Sorulan Sorular)
-
Tokenization nedir ve neden önemlidir?
Tokenization metni modelin anlayacağı birimlere dönüştürme işlemidir. Modelin performansı, maliyeti ve bağlam yönetimini etkilediği için önemlidir.
-
BPE ile WordPiece arasındaki fark nedir?
BPE daha çok sık kullanılan çiftleri iteratif birleştirirken, WordPiece olasılıksal kriterlerle sözlüğü oluşturur. Pratikte hareketler benzerdir ama nüanslar vardır.
-
Byte-level tokenization ne zaman tercih edilmeli?
Çok dilli uygulamalar, emoji ve kod gibi heterojen veri tipleri için uygundur çünkü Unicode karakterlerin tamamını güvenli işler.
-
Tokenizer değiştirmek modeli bozabilir mi?
Evet. Tokenizer değişikliği embedding mismatch'e neden olur; genellikle yeniden eğitim veya embedding extension gerekir.
-
Vocabulary boyutu nasıl seçilir?
Veri setinin dil özellikleri, model kapasitesi ve hedef of cost-per-token göz önünde bulundurularak deneysel olarak belirlenir.
-
Subword tokenization avantajları nelerdir?
OOV problemini azaltır, morfolojik zengin dillerde daha iyi genelleme sağlar ve sözlük boyutunu makul seviyede tutar.
-
SentencePiece Unigram neden kullanılır?
Unigram olasılıksal bir modeldir; bazen daha doğal ve esnek bir sözlük sunar, özellikle çok dilli ve karmaşık veri setlerinde avantajlı olabilir.
-
Tokenizasyon metrikleri nelerdir?
Ortalama token/kelime, token başına maliyet, max token per doc, vocabulary coverage, OOV oranı gibi metrikler izlenmelidir.
Anahtar Kavramlar
- Token: Modelin işlem birimi.
- Vocabulary: Token-index eşlemesi.
- BPE: Byte-Pair Encoding yöntemlerinden biri.
- WordPiece: BERT ailesinin kullandığı subword yöntemi.
- SentencePiece: Google'ın tokenization kütüphanesi (BPE/Unigram destekli).
- Byte-level: UTF-8 byte akışı üzerinde tokenization.
Öğrenme Yol Haritası
- Tokenization algortimalarının temel mantığını kavrayın (BPE, WordPiece, Unigram).
- Hugging Face tokenizers, SentencePiece ve tokenizers kütüphanelerini pratiğe dökün.
- Farklı tokenizasyonların token dağılımını ve maliyet etkisini ölçün.
- Çok dilli veri ile deneyler yapın; byte-level ve subword karşılaştırmaları yapın.
- Model ile tokenizasyonun etkileşimini anlayın: embedding boyutu, sequence length ve inference cost.
- Üretim senaryolarında token istatistiklerini izlemek için metrikler oluşturun.