LLM推論パラメータ入門——Temperature・Top-K・Top-Pの仕組みと実践調参ガイド
ChatGPTやClaudeなどのLLM(大規模言語モデル)を使っていて、「回答が真面目すぎて面白みがない」「コードを出力させたいのに毎回違う書き方をして困る」「高温度にしすぎて支離滅裂な回答になった」といった経験はありませんか?
LLMの出力品質や性格は、プロンプトの工夫だけでなく、推論時に指定する**サンプリングパラメータ(Temperature、Top-K、Top-P)**の調参(チューニング)によって劇的に変化します。
この記事では、LLMが次トークンを選択する数理メカニズムから、各パラメータの役割、そしてユースケース別の最適な組み合わせガイドまでを分かりやすく解説します。
1. 全体像:LLMが「次の言葉」を選ぶパイプライン
LLMは文章を生成するとき、一発で完成した文を出力しているわけではありません。「これまでの文脈に続く、最も自然な次の単語(トークン)」を1つずつ確率計算して生成する処理を繰り返しています。
サンプリングパラメータは、この「確率計算から最終的な1つのトークンを選ぶ過程」をコントロールするグラフィックボードのイコライザーのような存在です。
トークン生成パイプラインのフロー
[ 入力テキスト (Prompt) ]
↓
[ Transformer Decoder ]
↓
[ 未正規化スコア (Logits) ] ← 各語彙の素のスコア
↓
[ Temperature スケーリング ] ← スコアの格差を増幅/平坦化 (z_i / T)
↓
[ Top-K / Top-P フィルタリング ] ← 低確率な異常トークンの足切り (安全門)
↓
[ Softmax 確率変換 ] ← 合計が 1.0 になる確率分布へ変換
↓
[ トークンサンプリング ] ← 確率分布に基づいて次の1文字を決定!
もしモデルが「常に最も確率が高いトークン」だけを選び続けると(Greedy Decoding)、出力は非常に堅実になる一方で、同じフレーズを繰り返したり、退屈で機械的な文章になりがちです。
そのため、生成に「適度なランダム性(遊び)」を持たせるために、Temperature、Top-K、Top-P などのパラメータが必要になります。
2. Top-K サンプリング:「選択肢を何個残すか?」の安全フィルター
直感的イメージ:テストの選択肢カット
Top-K は、「確率が高い上位 K 個のトークンだけを残し、それ以外の低い確率のトークンを完全に選択肢から除外する」パラメータです。
例えるなら、**「テストの選択肢を上位何個残すか?」**というフィルタリングです。
例えば、「猫が___の上で寝ている」という文の次に来る単語の確率スコアが以下のようになっているとします:
| 候補トークン | 確率 | Top-K = 3 の場合 |
|---|---|---|
| こたつ | 55% | ⭕ 保持 |
| ソファ | 25% | ⭕ 保持 |
| ベッド | 12% | ⭕ 保持 |
| 宇宙船 | 0.01% | ❌ 排除(足切り) |
| 量子力学 | 0.001% | ❌ 排除(足切り) |
なぜ Top-K が必要なのか?
LLMの語彙数(Vocabulary Size)は通常 32,000 〜 128,000語 以上あります。
ロングテール(末端)には、文脈に全く合わない無関係な単語が極めて低い確率で大量に存在しています。
もし Top-K を指定しないと、10万分の1の確率を偶然引いてしまい、ハルシネーション(嘘や脈絡のない発言) が発生する原因になります。
- 小(例: K=1 〜 10): 確実性が高く、無駄な単語を選ばない(堅実・安全)。
- 大(例: K=40 〜 100): 語彙の幅が広がり、多様な表現が可能になる。
3. Temperature(温度):選択肢の「確率格差」コントロール
直感的イメージ:熱で確率分布の「山」を変形させる
Temperature($T$) は、候補トークン間の確率の格差を調整するパラメータです。
数学的には、Softmax関数に通す前のスコア(Logit $z_i$)を Temperature $T$ で割り算します。
$$\text{Probability}(i) = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$$
この除算によって、確率分布の形状が激変します:
【低温度 (T = 0.2)】 【標準 (T = 0.7)】 【高温度 (T = 1.5)】
▲ ▲ ▲
│ █ │ █ │
│ █ ▄ │ █ ▆ ▄ │ █ ▇ ▆ ▅
└───────── └───────── └─────────
(圧倒的に1番手が優勢) (自然な強弱のメリハリ) (確率の差が縮まりフラット)
温度によるモデル挙動の変化
① 低 Temperature($T < 0.5$):厳格な老教授
- スコアの差が増幅され、最高確率のトークンがさらに圧倒的になります。
- 特徴: 回答が決定論的になり、毎回ほぼ同じ出力を返します。
- 適したタスク: プログラミングコード生成、JSON/XML等の構造化データ抽出、数学の計算、事実に基づくFAQ回答。
② 高 Temperature($T > 0.8$):アイデア溢れるクリエイター
- スコアの差が縮まり、確率分布がフラット(平坦)になります。普段選ばれにくい珍しい単語も選ばれるようになります。
- 特徴: 創造性や多様性が増す反面、高すぎると文法が崩壊したりハルシネーションが増加します。
- 適したタスク: ネーミング案のブレインストーミング、小説・詩の作成、キャッチコピー制作。
4. Top-P (Nucleus Sampling):文脈に応じた「動的選択窓」
Top-P(Nucleus Sampling) は、固定の件数(K個)で切るのではなく、**「確率の高い順に累積していき、合計確率が P(例: 0.9 = 90%)に達するまでのトークン集合」**を動的に選択する手法です。
Top-K と Top-P の違い
- Top-K: 文脈が確実でも曖昧でも、常に「上位 K 個」を選ぶ(固定長)。
- Top-P: 文脈によって「選ぶトークンの数」が自動的に変化する(可変長)。
【場面A:文脈が非常に明白な場合】
「日本の首都は ___ である」
→ 「東京」(92%) 1つだけで累積確率 90% を超えるため、選択肢は【1個】に自動縮小!
【場面B:文脈が自由で多様な場合】
「休休日やりたいことのアイデアは ___ 」
→ 「映画鑑賞」(25%), 「読書」(20%), 「カフェ」(15%), 「ドライブ」(10%)...
合計 90% に達するまでに【6〜7個】の選択肢が自動保持される!
この「確信度に応じた動的な選択窓の伸縮」ができるため、現在多くのLLM API(OpenAIやAnthropicなど)では Top-K よりも Top-P が標準パラメータとして推奨されています。
5. 実践ガイド:ユースケース別おすすめ設定 & 調参のベストプラクティス
実際の開発やプロンプト調整で迷ったときは、以下のパラメータ設定を参考にしてください。
ユースケース別 推奨パラメータ表
| ユースケース | Temperature | Top-P / Top-K | 目的・出力傾向 |
|---|---|---|---|
| コード生成 / デバッグ | 0.1 〜 0.2 |
Top-P: 0.1
|
決定論的でバグのない正確なシンタックスを出力 |
| JSON/データ抽出 (RAG) | 0.0 〜 0.3 |
Top-P: 0.2
|
事実のみに基づき、余計な創作(ハルシネーション)を防止 |
| 技術解説 / 記事執筆 | 0.5 〜 0.7 |
Top-P: 0.85
|
論理的整合性を保ちつつ、読みやすい自然な文章表現 |
| ブレインストーミング | 0.8 〜 1.0 |
Top-P: 0.95
|
多様な視点や斬新なアイデアを多数出力 |
| 物語・詩・クリエイティブ | 1.0 〜 1.2 |
Top-P: 0.95
|
意外性のある単語選択で表現力を極大化 |
🛠️ 調参(チューニング)の3ステップ法則
-
まず安全門を通す(Top-K / Top-P)
- まず
Top-P = 0.9やTop-K = 40を設定し、ノイズとなる極端な低確率トークンを排除します。
- まず
-
目的別に Temperature を微調整する
- 正確性を求めるなら
Temperatureを下げる(0.2付近)。 - 面白さや多様性を求めるなら
Temperatureを上げる(0.8付近)。
- 正確性を求めるなら
-
二重調整による過度の抑制に注意する
- OpenAIの公式ドキュメントでは「
TemperatureとTop-Pの両方を同時に大きく変更することは推奨せず、どちらか一方を主に調整すること」とされています(予期せぬ挙動を防ぐため)。
- OpenAIの公式ドキュメントでは「
6. まとめ
LLMの推論パラメータを理解することは、AIという強力なエンジンのアクセルとブレーキの加減を覚えることと同じです。
- Top-K / Top-P: 低確率なノイズや暴走をシャットアウトする 「安全ブレーキ」
- Temperature: 決定論的な固さと創造的な柔らかさを無段階で切り替える 「感度ダイヤル」
タスクの性質(確定的な答えを求めるのか、柔軟な発想を求めるのか)に合わせてこれらのダイヤルを正しく回すことで、LLMのポテンシャルを最大限に引き出すことができます。
ぜひお手元のプロジェクトやPrompt開発で、これらのパラメータを調整して効果を試してみてください!


