LLMのサンプリング手法の一つで、確率の高いトークンから累積確率がp以上になるまでのトークン集合(nucleus)からのみサンプリングする方式。Top-p=0.9なら上位90%の累積確率に含まれるトークンのみが候補となり、低確率の不自然なトークンを除外できる。
Top-p サンプリング(別名 Nucleus Sampling)は、2019年にHoltzmanらが論文「The Curious Case of Neural Text Degeneration」で提案した LLM のテキスト生成手法である。確率分布の上位から累積確率が閾値 p に達するまでのトークン集合(nucleus)を動的に構成し、その中からサンプリングを行う。
Top-p サンプリングの処理フローは以下の通りである。
| Top-p 値 | Nucleus の大きさ | 出力の特性 |
|---|---|---|
| 0.1 | 非常に小さい(1〜3トークン) | ほぼ決定的 |
| 0.5 | 小さい(5〜15トークン) | 保守的で一貫性が高い |
| 0.9 | 中程度(数十トークン) | バランスの取れた多様性 |
| 0.95 | やや大きい | 自然な多様性 |
| 1.0 | 全トークン(フィルタなし) | Temperature のみで制御 |
Top-k サンプリングは固定数の上位 k 個のトークンから選択するのに対し、Top-p は確率分布の形状に応じて候補数が動的に変化する。
この適応的な挙動が Top-p の最大の利点であり、Top-k の「固定数」という制約を解消している。
| API | パラメータ名 | デフォルト値 | 設定範囲 |
|---|---|---|---|
| OpenAI | top_p | 1.0 | 0.0〜1.0 |
| Anthropic | top_p | 未指定時は無効 | 0.0〜1.0 |
| Google Gemini | top_p | モデル依存 | 0.0〜1.0 |
| Hugging Face | top_p | 1.0 | 0.0〜1.0 |
| vLLM | top_p | 1.0 | 0.0〜1.0 |
Top-p と Temperature は異なるレイヤーで出力を制御する。Temperature はソフトマックス前のロジットを調整し、Top-p はソフトマックス後の確率分布をフィルタリングする。
OpenAI は公式に「Temperature と top_p の両方を同時に変更することは推奨しない」としている。一方を固定して他方を調整するアプローチが一般的である。
A1: 実用上の差は小さいが、p=0.9 は極めて低確率のトークン(タイポや無関係な単語)を除外する効果がある。安全策として p=0.9〜0.95 に設定するケースが多い。
A2: 併用可能で、両方のフィルタを通過したトークンのみが候補になる。Hugging Face Transformers や vLLM では両方を同時に指定できる。
A3: 基本的には Temperature の調整を優先し、Top-p は 0.9〜0.95 程度に固定するのが無難。コード生成など正確性重視のタスクでは 0.1〜0.5 に下げると効果的。