Token, Bağlam ve Çıkarım
BPE, pencere, prefill, decode ve KV önbelleği.
Model harf, kelime veya “anlam nesnesi” görmez. Gördüğü şey tam sayılardır. Metni o sayılara bölen programa tokenizer denir; bir derleyici değildir, bir sözlük + birleştirme tablosudur. Aynı cümle farklı sözlükte farklı uzunlukta olur. Fiyat, gecikme ve “unutma” çoğu zaman buradan başlar. Senin sohbetin neredeyse her zaman çıkarımdır: ağırlık dosyası değişmez.
BPE fikri
Byte pair encoding sık görülen çiftleri birleştirerek sözlük kurar. Başlangıç: karakterler (veya byte’lar). Her adımda en sık bitişik çift yeni bir simge olur, korpus o simgeyle yeniden yazılır. Durma: hedef sözlük boyu (ör. 32k, 100k).
Küçük bir korpus: aaabdaaabac. Sık çift aa → simge Z; metin ZabdZabac. Sonra ab veya Za birleşir. Gerçek BPE, istatistiği milyarlarca token üzerinde yapar; Türkçe ekler ve kod, İngilizce sözcüklere göre daha çok simgeye bölünür.
Sonuç:
- Sık kelime tek token:
" the". - Nadir soyad, URL, karışık UTF-8 birçok token.
"True"ve"true"farklı id olabilir.- Boşluk çoğu tokenizer’da token’ın parçasıdır; satır başı ayrı id üretebilir.
Pencere token cinsindendir. “4k bağlam ≈ 3000 kelime” İngilizce sezgisidir; Türkçe ve XML’de aynı 4k daha az anlam taşır. Prompt’u harf silerek kısaltmak, token sınırını ortasından kesmekle aynı şey değildir.
Sözlük dışı byte’lara düşer. Kırık UTF-8, model için gürültü id dizisidir.
Eğitim ≠ çıkarım
Eğitim: θ güncellenir, gradyan, optimizer, günler/haftalar, batch içinde paralel konumlar (nedensel maske ile). Çıkarım: θ donmuş, yalnızca ileri geçiş. Kullanıcı mesajı ağırlığı değiştirmez. “Öğrendi” hissi, penceredeki token’ların bir sonraki q’yu koşullamasıdır. Yeni oturum, o koşulu sıfırlar (bellek özelliği yoksa).
Prefill, decode, KV
İlk adım prefill: bütün prompt birden işlenir, her konumun k, v vektörleri hesaplanır. Maliyet O(n²) dikkat (naif) veya en az O(n · d · katman). Prompt 8k ise bu adım pahalıdır.
Sonraki her token decode: tek bir yeni q, mevcut K, V ile skor, bir v eklenir. KV önbelleği önceki konumların k, v’sini RAM’de tutar; her seferinde prompt’u baştan dikkatlemeyi önler. Bellek: katman × n × baş × d_k × 2 (K ve V) × bayt. Uzun sohbet, GPU RAM’ini buradan doldurur.
Çıktı uzunluğu decode adımı kadar gecikme ekler. 500 token cevap ≈ 500 sıralı ileri geçiş. Nicemleme (8-bit, 4-bit) ağırlık ve bazen KV’yi küçültür; kalite ayrı ölçülür. “Aynı model, ucuz” iddiası bellek, gecikme ve kıyas skorunu tek tek ister.
Pencere doldu
Seçenekler: başı at (FIFO), özetle (kayıp sıkışır), dışarıdan getir (RAG), daha uzun pencereli yığın (dikkat seyrelmesi, maliyet). Hepsi P(x_{t+1}|bağlam)’in hangi bağlam olduğu kararındır. Model büyüsü değil.
Alıştırma
Aynı Türkçe paragrafı modelin tokenizer sayacıyla ölçün, İngilizce çevirisini de. Token oranı 1’den büyükse “8k pencere” neden aynı sayfa sayısına denk gelmez? Bir JSON’u minified ve pretty-print karşılaştırın: fazla boşluk ve satır, decode’u nasıl şişirir?