Bir dil modelinin içi
Kısaca
- Tokenizasyonu ve neden Türkçenin daha çok token harcadığını anlamak
- Gömme (embedding) ve dikkat (attention) fikrini sezmek
- Sıcaklık, top-k ve top-p ayarlarının çıktıyı nasıl değiştirdiğini görmek
İlk adım: aşağıdaki BPE tokenizer deneyini bul ve içindeki görevi çöz. Okumadan önce kurcalamak, okuduğunu çok daha kolay anlamanı sağlar.
Bir dil modeli tek bir iş yapar: Verilen metnin devamında hangi parçanın geleceğini tahmin eder. Daha doğrusu, her olası parçaya bir olasılık verir. Sohbet etmek, kod yazmak, özet çıkarmak; hepsi bu tek işin art arda tekrarı. Adım adım bakalım.
1. Metin → token
Model harfleri ya da kelimeleri değil, token’ları görür. Token’lar çoğunlukla sık geçen kelime parçalarıdır. Metni token’lara bölmenin en yaygın yolu BPE (byte pair encoding) denen yöntemdir. Harflerle başlanır, en sık yan yana gelen iki parça birleştirilir ve bu tekrar tekrar yapılır.
Aşağıda kendi metninle bir BPE eğit. Birleştirme sayısını sıfırdan yukarı çek ve “·mühendis”, “ler” gibi parçaların nasıl oluştuğuna bak.
- karakter
- 160
- token
- 111
- sıkıştırma
- 1.44×
- farklı token
- 36
- l + a → la ×5
- · + m → ·m ×4
- · + s → ·s ×3
- ·m + o → ·mo ×3
- ·mo + d → ·mod ×3
- ·mod + eller → ·modeller ×3
- e + n → en ×2
- n + c → nc ×2
Başta her harf bir token. Her adımda en sık yan yana gelen ikili tek bir token olur. Gerçek modeller bunu milyarlarca kelime üzerinde, on binlerce kez yapar; “·” boşluğu gösterir. Kendi metnini yaz, Türkçe eklerin nasıl ayrı token’lara dönüştüğünü izle.
Neden önemli? Hem fiyat hem bağlam penceresi token ile ölçülür. Çoğu model metni bölmeyi ağırlıklı olarak İngilizce metinlerden öğrenmiştir. Türkçe ise kelimelerin sonuna ek eklenerek kurulan bir dil. Bu yüzden aynı anlam Türkçede daha çok token tutar. Yani aynı metin Türkçede daha pahalıya ve daha uzun sürede işlenebilir. Uygulama tasarlarken bunu hesaba kat.
2. Token → vektör (gömme)
Her token bir gömme vektörüne çevrilir. Eğitim boyunca bu vektörler, benzer bağlamlarda geçen token’lar birbirine yakın düşecek şekilde ayarlanır. İkinci dersteki kosinüs benzerliği burada devreye giriyor.
3. Dikkat: bağlamı okumak
“Banka” kelimesi “nehir kenarındaki banka oturdum” ile “bankaya para yatırdım” cümlelerinde farklı anlamlar taşır. Dikkat (attention) mekanizması, her token’ın cümledeki diğer token’lara bakıp kendi vektörünü bağlama göre güncellemesini sağlar.
Önce hisset, sonra formülü gör. Bu cümlede “çay” iki kez geçiyor ama iki farklı şey anlatıyor:
Bir kelimeye tıkla. Çizgiler, o kelimenin anlamını kurarken diğer kelimelere ne kadar “baktığını” gösterir. “çay” “demlikte” ve “demledik” ile birlikte okununca: içilen çay.
Kabaca her token üç vektör üretir:
- Sorgu (Q): “Ben neyi arıyorum?”
- Anahtar (K): “Bende ne var?”
- Değer (V): “Seçilirsem ne aktarırım?”
Bir token’ın sorgusu diğerlerinin anahtarlarıyla nokta çarpımına girer, sonuçlar softmax ile ağırlığa dönüşür ve değerler bu ağırlıklarla toplanır. Transformer, bu bloğu onlarca kez üst üste koyar.
import numpy as np
def softmax(z):
e = np.exp(z - z.max(axis=-1, keepdims=True))
return e / e.sum(axis=-1, keepdims=True)
def dikkat(Q, K, V):
d = Q.shape[-1]
puan = Q @ K.T / np.sqrt(d) # her token her token'a ne kadar bakıyor
agirlik = softmax(puan) # satırlar 1'e toplanır
return agirlik @ V # bağlama göre güncellenmiş vektörler
Bu, transformer’ın kalbidir. Gerisi (çok başlı dikkat, konum bilgisi, katman normalizasyonu) bu fikrin etrafında mühendislik.
4. Sıradaki token’ı seçmek
Son katman, modelin bildiği her token için bir puan üretir. Bu ham puanlara logit denir. Softmax adlı bir formül bu puanları toplamı 1 olan olasılıklara çevirir. Ama hep en olasıyı seçmek zorunda değiliz:
- Sıcaklık (temperature): logit’leri böler. Düşükse dağılım sivrileşir (tutarlı, tekdüze), yüksekse düzleşir (yaratıcı, tutarsız).
- Top-k: yalnızca en olası k token arasından seç.
- Top-p: olasılıkları toplamı p’ye ulaşana kadar olan en küçük grup arasından seç.
“Bugün hava çok …” → sıradaki kelime
- entropi
- 1.90 bit
- en olası
- %47
Kaydırıcılar modelin ham puanlarını (logit) değiştirir; softmax onları toplamı 1 olan olasılıklara çevirir. Logit değerleri örnek amaçlıdır.
Pratik kural: bilgi çıkarma, sınıflandırma, kod gibi tek doğru cevabı olan işlerde düşük sıcaklık; beyin fırtınası ve yaratıcı yazıda daha yüksek sıcaklık.
Halüsinasyon nereden geliyor?
Model “doğruyu” değil, eğitim verisine göre makul görünen devamı üretir. Bilmediği bir konuda da akıcı ve emin bir metin üretebilir. Bunu azaltmanın en etkili yollarından biri, modele cevabı dayandıracağı kaynakları vermektir. Yedinci dersteki RAG tam olarak bu.
Kendini dene
1. Aynı anlamdaki bir metin Türkçede İngilizceden daha fazla token tutuyor. Bunun pratik sonucu ne?
2. Bir faturadan tutarı JSON olarak çıkaran bir sistem için hangi sıcaklık daha uygun?
3. Dikkat mekanizmasında bir token’ın diğerlerine ne kadar bakacağı neyle hesaplanır?
Daha derine inmek istersen