Top-k
Top-k Sampling
Modelin sıradaki token'ı seçerken sadece en olası K adayı dikkate aldığı sampling yöntemi.
Bir LLM her token üretirken vocabulary'deki tüm token'lara (genelde 32K-256K) olasılık atar. Çoğu token'ın olasılığı sıfıra yakındır ama yine de küçük şanslarla seçilebilir — uzun kuyrukta saçma kelimeler çıkmasının sebebi bu. Top-k, bu kuyruğu keser: sadece en olası K aday içinden örnekleme yapılır.
Pratik değerler: - k = 1: greedy decoding — her zaman en olası token. Tam deterministik. - k = 5-10: çok dar — dilbilgisi sağlam, ama tekrarcı ve klişe. - k = 40 ★: yaygın default. Anlamlı çeşitlilik + kalite dengesi. - k = 100+: uzun kuyruğu açar — yaratıcı ama daha çok hata riski.
Top-p (nucleus) ile farkı: top-k sabit sayıda aday alır; top-p ise olasılık eşiğine göre değişken sayıda aday alır. Top-p genelde daha iyi adapte olur — düşük entropi yerlerde daraltır, yüksek entropide açar. Production'da çoğunlukla top-p (0.9) tercih edilir, ama bazı motorlar (llama.cpp, Ollama) ikisini birden default açık tutar.
Bir restoranda menüden seçim yapma. Tüm menü açık (k=∞) — garip dünden kalma yemekler de gelebilir. Top 5 yemek (k=5) — güvenli ama her zaman aynı 3-4 seçenek. Top 40 (k=40) — yeterli çeşitlilik, garip sürprizler elenmiş. Top-k modelin "dikkate aldığı menü uzunluğu"nu sınırlar.
Sorgu: "Türkiye'nin başkenti …"
k = 1 (greedy): "Ankara." (her zaman, tek olasılık)
k = 40, T = 0.7: çoğunlukla "Ankara'dır.", bazen "Ankara olarak bilinir." veya "Ankara şehridir." — anlamı koruyan farklı ifadeler.
k = 1000, T = 1.2: "Ankara'dır ama tarihte İstanbul da..." — uzun kuyruktan seçilen alakasız tokenlerle yön değiştirebilir.
Llama.cpp'de varsayılan --top-k 40 --top-p 0.9 --temp 0.8. Bu üçlü
çoğu sohbet için iyi başlangıç.
- Düşük seviyeli sampling kontrolü gereken durumlar (llama.cpp, Ollama)
- Top-p ile birlikte — biri uzun kuyruğu kapar, diğeri olasılık dağılımına adapte olur
- Greedy (k=1) gerektiren deterministik testler
- Çok düşük temperature kullanırken k düşük tutmak ek garanti
- Reasoning modellerinde (o1, Claude reasoning) — genelde manuel ayar yok
- OpenAI/Anthropic API'lerinde top-k yoktur — sadece top-p kullanılır
- Top-p zaten ayarlıysa ve sonuç iyiyse — k'yı çıkar, basit kalsın
Çok düşük k = tekrar
k=5 modeli aynı 5 token havuzuna sıkıştırır; üzeri uzun metinlerde 'aynı şeyi tekrar etme' patolojisine yol açar. Repetition penalty ile birlikte ayarla.
Top-k + top-p ikisini agresif değiştirmek
k=10 + p=0.5 + T=1.5 = kaos. Birini düşür, diğerini default tut. Çoğu rehber 'birini ayarla, diğerini bırak' der.
Provider API farklılıkları
OpenAI, Anthropic top-k expose etmez. llama.cpp, Ollama, vLLM eder. Multi-provider katmanın varsa bu parametre normalize edilemez — soyutlamada dikkat.