min_p
Min-p sampling
Sıradaki token adaylarını, en olası token'ın olasılığına oranla kesen sampling yöntemi: olasılığı p_max × min_p'nin altında kalan her aday elenir.
Top-k sabit sayıda aday tutar, top-p kümülatif olasılığa bakar. min_p ise eşiği modelin o anki güvenine göre kaydırır:
eşik = min_p × p_max
p_max en olası token'ın olasılığı. Olasılığı bu eşiğin altında kalan
tüm adaylar silinir, kalanlar arasından örnekleme yapılır.
- Model eminse (p_max = 0.9, min_p = 0.1) eşik 0.09 olur → birkaç aday kalır, saçmalık kuyruğu kesilir.
- Model kararsızsa (p_max = 0.2) eşik 0.02'ye iner → çok sayıda makul aday hayatta kalır, çeşitlilik korunur.
Yöntem 2024'te "Turning Up the Heat: Min-p Sampling for Creative and Coherent LLM Outputs" makalesiyle (Nguyen ve ark., arXiv 2407.01082) tanımlandı. Makale, top-p'nin zorlandığı yüksek temperature'da bile hem kaliteyi hem çeşitliliği artırdığını raporluyor (GPQA, GSM8K, AlpacaEval Creative Writing; Mistral ve Llama 3, 1B-123B).
Default değerler (Ekim 2026 itibarıyla):
| Motor | Parametre | Default |
|---|---|---|
| Ollama | min_p | 0.0 (kapalı) |
| llama.cpp | --min-p / min_p | 0.05 |
| vLLM | min_p | 0.0 (kapalı) |
| OpenAI API | yok | — |
llama.cpp'nin varsayılan sampler sırası: penalties → DRY → top-n-sigma → top-k → typical-p → top-p → min-p → XTC → temperature. Yani min_p eşiği, temperature uygulanmadan önceki dağılım üzerinden hesaplanır.
Bir yarışmada "birinciye göre baraj" koymak. Birinci 90 puan aldıysa ve baraj %10 ise, 9 puanın altındaki herkes elenir. Birinci sadece 20 puan aldıysa (herkes birbirine yakın) baraj 2 puana iner ve çok kişi finale kalır. Sabit "ilk 40 kişi" kuralı (top-k) bu farkı görmez.
Model "Kahvaltıda ___ yedim" cümlesini tamamlıyor, min_p = 0.1:
| Aday | Olasılık | Eşik (0.1 × 0.55) | Sonuç |
|---|---|---|---|
| yumurta | 0.55 | 0.055 | kalır |
| peynir | 0.25 | 0.055 | kalır |
| simit | 0.12 | 0.055 | kalır |
| menemen | 0.06 | 0.055 | kalır |
| vida | 0.01 | 0.055 | elenir |
"vida" gibi kuyruktaki saçma adaylar, temperature yükselse bile artık seçilemez; çünkü temperature'dan önce silinmişlerdir.
Ollama'da açmak için: istekte "min_p": 0.05 gönder ya da Modelfile'a
PARAMETER min_p 0.05 yaz. llama.cpp'de zaten 0.05 açık gelir.
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Bir deniz feneri hakkında kısa bir şiir yaz.",
"options": {
"min_p": 0.1,
"top_p": 1.0,
"temperature": 1.2
}
}'# Yeni kurulum (llama.app): llama serve
# Eski binary adıyla: llama-server
llama serve -hf ggml-org/Qwen3.5-0.8B-GGUF \
--min-p 0.1 \
--top-p 1.0 \
--top-k 0 \
--temp 1.2
# top-p 1.0 ve top-k 0 = kapalı; kuyruğu sadece min-p keser- Yaratıcı yazım, beyin fırtınası — yüksek temperature'ı saçmalamadan kullanmak için
- Top-p'nin bazen çok dar, bazen çok geniş kaldığını gördüğünde
- Ollama kullanıyorsan ve kuyruk sorunları yaşıyorsan — default 0.0, yani kapalı
- Tek parametreyle basit bir sampling düzeni istiyorsan (top-p 1.0, top-k 0, min_p 0.05-0.1)
- Deterministik çıktı (temperature 0) — zaten en olası token seçilir, min_p etkisizdir
- OpenAI API — böyle bir parametre yok
- Kod, JSON, sınıflandırma gibi tek doğru cevaplı işler — düşük temperature daha net çözüm
Motorlar arası farklı default
Aynı model llama.cpp'de min_p 0.05 ile, Ollama'da 0.0 ile çalışır. 'llama.cpp'de güzel, Ollama'da saçmalıyor' farkının bir kısmı buradan gelebilir. Karşılaştırma yapıyorsan sampling ayarlarını açıkça eşitle.
min_p'yi çok yüksek tutmak
0.3-0.5 gibi değerler çoğu adımda tek aday bırakır; çıktı greedy decoding'e yaklaşır ve tekrar döngülerine girebilir. Çeşitlilik istiyorsan düşük değerlerle başla.
Top-p ve top-k ile üst üste bindirmek
llama.cpp'de top-k (40) ve top-p (0.95) da default açıktır ve min-p'den önce çalışır. Etkisini gerçekten görmek istiyorsan diğerlerini kapat: --top-k 0 --top-p 1.0.