Top-P (Nucleus Sampling) (Top-P Örneklemesi)

Top-P (nucleus sampling), dil modelinin bir sonraki kelimeyi seçerken olasılık listesinin tamamını değil, olasılıkları toplandığında P eşiğini geçen en küçük aday kümesini dikkate aldığı örnekleme yöntemidir.

Top-P (nucleus sampling), dil modelinin bir sonraki kelimeyi seçerken olasılık listesinin tamamını değil, olasılıkları toplandığında P eşiğini geçen en küçük aday kümesini dikkate aldığı örnekleme yöntemidir. top_p=0.9 dediğinizde model, olasılık toplamı 0,90'a ulaşan en olası kelimelerle sınırlanır, geri kalanı o adımda tamamen elenir. Sabit sayıda aday tutan top_k'dan farkı, aday sayısının her adımda değişmesidir: model emin olduğunda liste kısalır, kararsız kaldığında uzar. Yöntem Holtzman ve arkadaşlarının 2019 tarihli metin bozulması çalışmasıyla yaygınlaştı.

functions Top-P nasıl çalışır: adım adım bir örnek

Model her adımda sözlükteki her token için bir olasılık üretir. Top-P bu listeyi büyükten küçüğe sıralar ve olasılıkları soldan toplamaya başlar. Toplam P eşiğini geçtiği anda durur. Kalan tokenlar o adım için tamamen elenir ve seçim yalnızca bu çekirdek (nucleus) kümesinden yapılır.

Somut bir örnek. Model, Ankara Türkiye'nin diye başlayan cümleyi tamamlarken adaylara şu olasılıkları versin: başkentidir 0,72; en 0,11; ikinci 0,06; başkenti 0,04. top_p=0.9 ile toplama başlarsınız: 0,72 sonra 0,83 sonra 0,89. Dördüncü aday eklenince 0,93 olur ve eşik aşılır, yani liste dört tokende kapanır. Aynı model başka bir adımda ilk adaya 0,95 verirse liste tek tokende biter ve çıktı o noktada fiilen deterministik olur. Aday sayısını siz belirlemezsiniz, modelin ne kadar emin olduğu belirler.

Sıralama önemli. Çoğu kütüphanede işlem sırası şudur: temperature logitleri ölçekler, top_k listeyi sabit sayıya kırpar, top_p çekirdeği belirler. Bu yüzden temperature'ı yükseltmek top_p'nin bıraktığı kümeyi de büyütür. İki kadranı aynı anda oynatınca etkiyi tahmin etmek zorlaşır, hata ayıklamak daha da zorlaşır.

tune Hangi iş için hangi top_p değeri

  • check_circle Sınıflandırma, bilgi çıkarma, JSON üretimi: 0.1 ile 0.3. Tek doğru cevap varsa çekirdeği daraltın. Aynı sonucu temperature'ı 0'a çekip top_p'yi 1.0'da bırakarak da alırsınız, ikisini birden düşürmeyin.
  • check_circle Araç çağırma ve ajan akışları: 0.1 civarı. Zincirin bir halkasında yanlış araç seçilirse sonraki bütün adımlar boşa gider. Burada çeşitlilik bir fayda değil, risk.
  • check_circle Kod üretimi ve hata düzeltme: 0.5 ile 0.8. Orta bant, sözdizimi hatası riskini belirgin şekilde artırmadan alternatif çözüm yolları görmenizi sağlar. Çoğu kod asistanı bu aralıkta çalışır.
  • check_circle Özetleme ve çeviri: 0.7 ile 0.9. Kaynağa sadakat gerekir ama kelime seçiminde biraz esneklik akıcılığı artırır. Türkçe çeviride 0.9 üstünde uydurma terim ve yanlış ek görülme sıklığı artar.
  • check_circle Yaratıcı yazı, reklam metni, senaryo: 0.9 ile 1.0. Nadir kelimelerin listede kalması metni tekdüzelikten çıkarır. 1.0 filtreyi tamamen kapatır.
  • check_circle Değerlendirme ve tekrarlanabilir test: top_p 1.0 ve temperature 0. Örneklemeyi tamamen kapatın. Açık bırakırsanız aynı prompt iki koşuda farklı skor üretir ve karşılaştırma anlamını yitirir.

Top-P, top_k ve temperature arasındaki fark

filter_alt Top-P (nucleus)

Aday sayısını olasılık toplamına göre belirler, yani her adımda değişir. Model eminken liste kendiliğinden kısalır. Varsayılanı 1.0, filtre kapalı.

format_list_numbered Top-K

Her adımda sabit K adayı tutar, dağılımın şekline bakmaz. Ollama varsayılanı 40. Model çok eminken bile gereksiz adayları listede tutar, kararsızken de listeyi erken keser.

thermostat Temperature

Hiçbir adayı elemez, olasılık dağılımının şeklini değiştirir. 0'a yaklaştıkça en olası token ezici üstünlük kazanır, 1 üstünde zayıf adaylar güçlenir. Filtreleme değil ölçekleme yapar.

rule Hangisini kullanmalı

OpenAI ve Anthropic dokümanları ikisini birden oynatmamayı öneriyor. Birini varsayılanda bırakıp diğerini ayarlayın. Tek kadranla çalışmak davranışı da hata ayıklamayı da öngörülebilir kılar.

layers Birlikte kullanım

Yerel çalıştırma araçlarında üçü de varsayılan olarak açıktır. Ollama'da top_k 40 ve top_p 0.9 aynı anda devrededir: önce top_k kırpar, sonra top_p çekirdeği belirler.

casino Determinizm

Hiçbiri tek başına tekrarlanabilirliği garanti etmez. Çekirdekte birden fazla aday kaldığı sürece seçim rastgeledir. Aynı çıktıyı istiyorsanız temperature 0 ve mümkünse sabit seed kullanın.

terminal Kodda nasıl ayarlanır: OpenAI, Ollama, vLLM, Hugging Face

OpenAI uyumlu API'lerde parametrenin adı top_p ve doğrudan istek gövdesine yazılır: {"model": "gpt-4o-mini", "top_p": 0.2, "messages": [...]}. Python SDK'da client.chat.completions.create(model="gpt-4o-mini", top_p=0.2, messages=[...]) biçiminde geçer. Anthropic SDK'da alan adı yine top_p, ancak dokümanda temperature ile birlikte verilmemesi öneriliyor.

Ollama'da iki yol var. Tek seferlik istek için gövdeye options alanı eklersiniz: {"model": "llama3.1", "prompt": "...", "options": {"top_p": 0.9, "top_k": 40}}. Ayarı kalıcı yapmak için Modelfile içine PARAMETER top_p 0.9 satırını yazıp modeli yeniden oluşturursunuz.

vLLM tarafında değerler SamplingParams ile verilir: SamplingParams(temperature=0.7, top_p=0.9, top_k=-1). Buradaki top_k=-1 top_k filtresini kapatır, yani yalnızca top_p çalışır. vllm serve ile açtığınız OpenAI uyumlu uçta ise normal top_p alanını kullanırsınız.

Hugging Face transformers'ta en sık görülen tuzak şu: top_p yalnızca do_sample=True iken çalışır. model.generate(**inputs, do_sample=True, top_p=0.9) yazmazsanız model greedy decoding yapar, parametre kabul edilir ama çıktı hiç değişmez. Bir uyarı görebilirsiniz, hata almazsınız.

warning Sık yapılan hatalar

  • check_circle temperature ve top_p'yi birlikte kısmak: İkisi de aynı dağılımı etkiler. Beraber düşürürseniz model aynı kalıpları tekrar etmeye başlar; beraber yükseltirseniz konudan kopar. Tek kadran yeterli.
  • check_circle top_p=0 yazmak: Kütüphanelerin çoğu listede en az bir token bırakır, dolayısıyla sonuç greedy decoding olur. Ancak bu davranış her yerde garanti değil. Deterministik çıktı istiyorsanız temperature=0 daha güvenli bir ifade.
  • check_circle do_sample=True unutmak: Hugging Face generate çağrısında en sık rastlanan sorun. Parametre sessizce yok sayılır, çıktı hep aynı gelir ve sorunun örnekleme ayarında olduğu anlaşılmaz.
  • check_circle top_p ile halüsinasyonu çözmeye çalışmak: Düşük top_p çıktıyı daha tutarlı yapar, daha doğru yapmaz. Model yanlış bilgiyi yüksek olasılıkla üretiyorsa örnekleme ayarı bunu düzeltmez; RAG, daha iyi prompt veya doğrulama katmanı gerekir.
  • check_circle Değerlendirme koşusunda örneklemeyi açık bırakmak: Aynı prompt farklı skorlar üretir, iki modelin karşılaştırması gürültüye boğulur. Ölçüm yaparken örneklemeyi kapatın.
  • check_circle Her sağlayıcıda aynı değeri beklemek: Aynı top_p değeri farklı modellerde farklı sonuç verir, çünkü olasılık dağılımları aynı keskinlikte değil. Model değiştirdiğinizde değeri yeniden denemek gerekir.

help Sıkça Sorulan Sorular

  • check_circle Top-P kaça ayarlanmalı? Tek doğru cevaplı işlerde (sınıflandırma, JSON üretimi, araç çağırma) 0.1 ile 0.3; kod ve özetlemede 0.5 ile 0.9; yaratıcı metinde 0.9 ile 1.0 pratik aralıklar. Emin değilseniz top_p'yi varsayılan 1.0'da bırakın ve yalnızca temperature ile oynayın.
  • check_circle Top-P ile temperature arasındaki fark nedir? Temperature olasılık dağılımının şeklini değiştirir ama hiçbir adayı listeden çıkarmaz. Top-P dağılımın şekline dokunmaz, düşük olasılıklı adayları tamamen eler. Biri ölçekleme, diğeri filtreleme yapar. Bu yüzden ikisini aynı anda oynatmak etkiyi öngörülemez hale getirir.
  • check_circle Top-P ve top_k aynı anda kullanılabilir mi? Kullanılabilir ve yerel çalıştırma araçlarında zaten öyle çalışır. Ollama varsayılanı top_k 40 ve top_p 0.9'dur: önce top_k listeyi sabit sayıya kırpar, ardından top_p çekirdeği belirler. Bulut API'lerinde genellikle tek başına top_p yeterli olur.
  • check_circle Top-P çıktıyı deterministik yapar mı? Hayır. Çekirdek kümesinde birden fazla token kaldığı sürece seçim rastgele kalır. Aynı girdiye aynı çıktıyı almak için temperature=0 kullanın, sağlayıcı destekliyorsa seed değerini de sabitleyin.
  • check_circle Türkçe metin üretiminde top_p değeri değişmeli mi? Türkçe eklemeli bir dil olduğu için model ek seçiminde sık sık birbirine yakın olasılıklı adaylar üretir. Yüksek top_p değerlerinde yanlış ek ve uydurma kelime görülme ihtimali İngilizceye göre biraz daha yüksek. Resmî yazışma ve kurumsal metinlerde 0.8 üstüne çıkmamak pratik bir başlangıç noktası.