累積確率が閾値 p に達するまでのトークン集合(nucleus)からランダムにサンプリングするLLMデコーディング手法。2019年にHoltzman らが提案し、現在のほぼすべての対話型LLM APIで標準採用されている。Top-k より分布適応性が高く、高品質かつ多様な生成を実現する。
Nucleus Sampling は、2019年に Ari Holtzman らの論文「The Curious Case of Neural Text Degeneration」で提案されたデコーディング手法です。語彙全体の確率分布を降順にソートし、累積確率が閾値 p に達するまでのトークン集合(nucleus = 核)を動的に構成してサンプリングします。2026年現在、GPT-4o、Claude 4 Opus、Gemini 2.5 Pro などすべての主要LLM APIで top_p パラメータとして提供されています。
この手法の核心は、k(候補トークン数)が分布の形状に応じて動的に変化する点です。確率分布が鋭い(高確信度)場合は少数のトークンから選択し、平坦な(低確信度)場合は多数のトークンを候補に含めます。
| 特性 | Top-k (k=50) | Top-p (p=0.9) |
|---|---|---|
| 候補数 | 固定(常に50個) | 可変(分布依存) |
| 鋭い分布時 | 低確率トークンも候補に含む | 少数のトークンのみ(例: 3〜5個) |
| 平坦な分布時 | 確率の高いトークンを除外する恐れ | 多数のトークンを候補に含む(例: 200〜500個) |
| 分布適応性 | 低い | 高い |
| 計算コスト | ソート不要(Top-k ヒープ) | 累積和計算が必要 |
| API | デフォルト値 | 範囲 | 備考 |
|---|---|---|---|
| OpenAI (GPT-4o) | 1.0 | 0〜1.0 | temperature との同時変更は非推奨 |
| Anthropic (Claude 4) | — | — | top_p 未提供。top_k で代替 |
| Google (Gemini 2.5) | 0.95 | 0〜1.0 | top_k との併用可 |
| Meta (Llama 3.1) | 0.9 | 0〜1.0 | Hugging Face 実装準拠 |
| Mistral (Mistral Large) | 1.0 | 0〜1.0 | temperature 優先 |
Temperature と Top-p を同時に低く設定すると Greedy に近づき、同時に高くすると支離滅裂になります。一般的には一方を固定して他方で調整する方が安定します。
最高確率トークンに対する相対比率で閾値を設定する新手法です。例えば min_p=0.05 の場合、最高確率トークンの確率が 0.8 なら 0.04 未満のトークンを除外します。Top-p より直感的で、llama.cpp・vLLM・Kobold で採用が広がっています。
エントロピーに基づいて動的に閾値を設定します。高エントロピー(不確実)なステップでは多くの候補を残し、低エントロピー(確信)なステップでは少数に絞ります。
トークンの情報量(-log p)が文脈の平均情報量に近いトークンを優先的に選択します。「典型的な」続きを生成する傾向があり、物語生成で高評価を得ています。
Q1: top_p=1.0 は何を意味しますか? A: 語彙全体からサンプリングすることを意味し、Top-p フィルタリングが実質的に無効になります。この場合、Temperature のみで多様性を制御します。OpenAI API のデフォルトが top_p=1.0 なのはこのためです。
Q2: Top-p と Top-k を同時に使用するとどうなりますか? A: 両方のフィルタが適用され、より厳しい方の制約が効きます。例えば top_p=0.9 かつ top_k=50 の場合、まず確率上位50個に絞り、その中で累積確率0.9に達するまでのトークンが最終候補になります。Gemini API や llama.cpp ではこの併用がサポートされています。
Q3: なぜ Claude API は top_p を提供していないのですか? A: Anthropic は top_k パラメータを提供しており、temperature との組み合わせで十分な制御が可能と判断しています。2026年6月時点で、Claude API は temperature(0〜1.0)と top_k をサポートしており、top_p は未実装です。