AI・機械学習
中級

Top-k サンプリング(トップケーサンプリング)

LLMのテキスト生成で確率上位k個のトークンのみを候補として残し、それ以外を除外した上でサンプリングする手法。kの値が小さいほど出力は決定的になり、大きいほど多様性が増す。シンプルで計算コストが低い反面、確率分布の形状に適応できない制約がある。

0 回閲覧
0 いいね

Top-k サンプリングとは

Top-k サンプリングは LLM のテキスト生成において、モデルが算出した確率分布から上位 k 個のトークンのみを候補として残し、残りを除外した上でサンプリングを行う手法である。2018年に Fan らの論文で体系化され、初期の GPT モデルや Google の LaMDA で広く採用された。

動作原理

Top-k サンプリングの処理は以下のステップで行われる。

  1. モデルが語彙中の全トークンに対して確率を算出する
  2. 確率の降順にソートし、上位 k 個を選択する
  3. 選択されたトークンの確率を正規化(合計1.0に再スケーリング)する
  4. 正規化された確率分布からサンプリングする
k の値候補トークン数出力の特性
k = 11個のみ完全に決定的(greedy decoding と同等)
k = 55個非常に保守的
k = 4040個GPT-2 デフォルト。バランスが良い
k = 100100個多様性が高い
k = 0(無効)全トークンフィルタなし

Top-p との比較

特性Top-kTop-p
候補数固定(常に k 個)動的(確率分布に依存)
適応性低い高い
計算コストソート + 切り捨てソート + 累積計算
提案年2018年2019年
弱点分布に関係なく同数を保持計算がやや複雑

Top-k の最大の弱点は、確率分布の形状に関わらず常に固定数のトークンを候補にする点である。次のトークンがほぼ確定している場面(例: 「東京」の後の「都」)でも k=40 なら39個の不要なトークンが候補に残り、逆に多くの選択肢が妥当な場面ではk個に絞ることで有効な選択肢を除外してしまう。

主要フレームワークでの実装

フレームワークパラメータ名デフォルト値
Hugging Face Transformerstop_k50
Google Gemini APItop_k40
LM Studiotop_k40
llama.cpptop_k40
Ollamatop_k40
vLLMtop_k-1(無効)

OpenAI API と Anthropic API は Top-k パラメータを直接公開しておらず、Top-p による制御を推奨している。ローカル LLM ランタイム(llama.cpp、Ollama、LM Studio)では Top-k が標準パラメータとして提供される。

実用的な設定ガイド

  • 正確性重視(コード・翻訳): k=5〜10 で候補を強く絞り込む
  • 一般的な対話: k=40(多くのフレームワークのデフォルト)が無難
  • 創造的タスク: k=100〜200 で多様な表現を許容
  • ローカル LLM: LM Studio や Ollama では k=40 + Temperature 0.7 が定番の組み合わせ

FAQ

Q1: Top-k と Top-p はどちらを使うべきですか?

A1: 一般的には Top-p の方が適応的で優れているとされる。ただしローカル LLM では Top-k がデフォルトで有効なことが多く、k=40 + top_p=0.9 の併用が実用的。

Q2: k=1 と Temperature=0 は同じですか?

A2: 結果はほぼ同じ(最も確率の高いトークンを選択)だが、実装上は異なる。k=1 はフィルタリング後にサンプリング、Temperature=0 はソフトマックス段階で確率を集中させる。

Q3: Top-k の値を大きくしすぎるデメリットはありますか?

A3: k が語彙サイズ(32,000〜128,000)に近づくと事実上フィルタなしと同じになり、Temperature だけで制御する状態になる。計算リソースの無駄は少ないが、低確率トークンが選ばれるリスクが増す。