LLMのテキスト生成で確率上位k個のトークンのみを候補として残し、それ以外を除外した上でサンプリングする手法。kの値が小さいほど出力は決定的になり、大きいほど多様性が増す。シンプルで計算コストが低い反面、確率分布の形状に適応できない制約がある。
Top-k サンプリングは LLM のテキスト生成において、モデルが算出した確率分布から上位 k 個のトークンのみを候補として残し、残りを除外した上でサンプリングを行う手法である。2018年に Fan らの論文で体系化され、初期の GPT モデルや Google の LaMDA で広く採用された。
Top-k サンプリングの処理は以下のステップで行われる。
| k の値 | 候補トークン数 | 出力の特性 |
|---|---|---|
| k = 1 | 1個のみ | 完全に決定的(greedy decoding と同等) |
| k = 5 | 5個 | 非常に保守的 |
| k = 40 | 40個 | GPT-2 デフォルト。バランスが良い |
| k = 100 | 100個 | 多様性が高い |
| k = 0(無効) | 全トークン | フィルタなし |
| 特性 | Top-k | Top-p |
|---|---|---|
| 候補数 | 固定(常に k 個) | 動的(確率分布に依存) |
| 適応性 | 低い | 高い |
| 計算コスト | ソート + 切り捨て | ソート + 累積計算 |
| 提案年 | 2018年 | 2019年 |
| 弱点 | 分布に関係なく同数を保持 | 計算がやや複雑 |
Top-k の最大の弱点は、確率分布の形状に関わらず常に固定数のトークンを候補にする点である。次のトークンがほぼ確定している場面(例: 「東京」の後の「都」)でも k=40 なら39個の不要なトークンが候補に残り、逆に多くの選択肢が妥当な場面ではk個に絞ることで有効な選択肢を除外してしまう。
| フレームワーク | パラメータ名 | デフォルト値 |
|---|---|---|
| Hugging Face Transformers | top_k | 50 |
| Google Gemini API | top_k | 40 |
| LM Studio | top_k | 40 |
| llama.cpp | top_k | 40 |
| Ollama | top_k | 40 |
| vLLM | top_k | -1(無効) |
OpenAI API と Anthropic API は Top-k パラメータを直接公開しておらず、Top-p による制御を推奨している。ローカル LLM ランタイム(llama.cpp、Ollama、LM Studio)では Top-k が標準パラメータとして提供される。
A1: 一般的には Top-p の方が適応的で優れているとされる。ただしローカル LLM では Top-k がデフォルトで有効なことが多く、k=40 + top_p=0.9 の併用が実用的。
A2: 結果はほぼ同じ(最も確率の高いトークンを選択)だが、実装上は異なる。k=1 はフィルタリング後にサンプリング、Temperature=0 はソフトマックス段階で確率を集中させる。
A3: k が語彙サイズ(32,000〜128,000)に近づくと事実上フィルタなしと同じになり、Temperature だけで制御する状態になる。計算リソースの無駄は少ないが、低確率トークンが選ばれるリスクが増す。