AI と確率:温度・top-p・top-k の意味と使い分け

AI Navigate Original / 2026/4/27

💬 オピニオンIdeas & Deep AnalysisTools & Practical Usage
共有:

要点

  • LLM は確率分布からサンプリング、温度/top-p/top-k で制御
  • 低温は決定的(分類)、高温は創造的(物語)
  • 温度と top-p は片方だけ動かす、seed 固定で再現性
  • モデル毎に挙動が違い API デフォルトを確認

LLM は同じ質問に対して、毎回まったく同じ答えを返すとは限りません。これは内部で「次に来る単語の確率」を計算したあと、その確率にしたがってくじを引くように一語ずつ選んでいるからです。このくじの引き方を調整するのが温度(temperature)・top-p・top-k。本記事では、それぞれが確率に何をしているのかを図で押さえ、用途ごとの具体的な設定値まで一気に整理します。

入力(文脈) 確率分布 を計算 候補すべてに% サンプリング (くじ引き) 温度・top-p・top-k 次の1語

FIG.1 LLM は確率分布を作り、そこから1語を引く。温度・top-p・top-k はこの「引き方」を変える

大事なのは、これら3つはくじの引き方を変えるだけで、モデルの知識そのものを変えるわけではないこと。「賢くする設定」ではなく「堅実に行くか、冒険させるか」を選ぶダイヤルだと考えてください。

01温度(Temperature):分布のとがり具合を変える

温度は、確率分布をとがらせる(自信のある候補にさらに偏らせる)か、なだらかにする(候補を横並びに近づける)かを決めます。仕組みは単純で、各候補のスコア(logit)を温度 T で割ってから確率に変換します。T を小さくすると差が拡大して1位が独走し、T を大きくすると差が縮まって下位にもチャンスが回ります。

低温(T=0.3):とがる 本命 高温(T=1.2):なだらか 本命

FIG.2 同じ素の確率でも、低温は本命に集中し、高温は下位候補にも確率が回る

「日本の首都は」の次に来る単語で見る

素の確率が「東京 0.95/京都 0.03/大阪 0.01/その他 0.01」だったとします。温度を変えると、選ばれやすさは次のように動きます。

候補素の確率T=0.3(低温)T=1.0(そのまま)T=1.8(高温)
東京0.95ほぼ1.00.950.68
京都0.03ごく僅か0.030.16
大阪0.01ほぼ00.010.10
その他0.01ほぼ00.010.06

低温では本命がさらに盤石になり、毎回ほぼ同じ答えになります。高温では「京都」「大阪」のような本来ありえない答えにも確率が回り、出力がばらつきます。事実を聞く用途で高温が危ないのはこのためです。

温度の目安(用途別)

  • 0.0:毎回ほぼ同じ最尤の答え。分類・抽出・テスト向き。
  • 0.0〜0.3:ほぼ決定的。事実確認、要約、データ抽出。
  • 0.5〜0.7:標準。チャット、Q&A、コード生成。
  • 0.8〜1.0:創造的。物語、コピー、ブレインストーミング。
  • 1.0 超:かなり多様。面白い反面、破綻も増える。

温度は「正確さ」と「多様さ」のトレードオフのダイヤル。上げれば面白く、下げれば堅実になる。

注意:上限はモデルによって違う

「温度は 0〜2」と覚えがちですが、使える範囲は提供元で異なります。2026年時点で、OpenAI の API は 0〜2、Anthropic(Claude)は 0〜1 で、1 を超える値は受け付けません。Claude では T=1 が「分布をそのまま使う」既定値にあたります。値の意味も上限も API ごとに違うので、他社の感覚で数字を移植しないこと。

02top-p(Nucleus Sampling):確率の合計で線を引く

top-p は、確率の高い候補を上から足していき、合計が p に達したところで打ち切って、その範囲だけからくじを引く方法です(nucleus=核となる候補群、の意味)。0〜1 で指定します。

累積が p=0.9 に届くまで残す 残り(合計0.1)は捨てる この核(nucleus)から選ぶ

FIG.3 top-p は「合計で p%」になるまでを残す。候補が何個になるかは文脈で自動的に変わる

  • 0.1:上位ごく僅かだけ。ほぼ決定的。
  • 0.5:中庸。
  • 0.9〜0.95:標準。多くのモデルの実用域。
  • 1.0:全候補が対象(=絞り込みなし)。

top-p の良さは、残す候補の数を文脈に応じて自動で増減できる点です。本命が明確な場面では候補が数個に絞られ、答えが割れる場面では候補が広がる——その場の分布の形に追従します。

03top-k:個数で線を引く

top-k は、確率上位のk 個だけを残して、そこからくじを引く方法です。top-p が「割合(%)」で切るのに対し、top-k は「個数」で切ります。

上位 k=4 個を残す(個数固定) 5位以降は確率に関係なく捨てる

FIG.4 top-k は確率の形に関係なく「いつも k 個」。分布の鋭さに追従しないのが弱点

  • k=1:必ず最尤の1語(greedy)。
  • k=40〜100:実用域でよく使われる値。
  • k=100 超:多様性重視。

top-k の弱点は個数が固定なこと。妥当な候補が3語しかない場面で k=50 にすると、無関係な47語まで土俵に上げてしまい、逆に候補が200語ありうる場面では k=50 では足りません。分布の形に追従できないため、近年は top-p が主流になっています。なお top-k は Anthropic などでは公開パラメータになっておらず、すべてのモデルで使えるわけではありません。

top-p(割合で切る)top-k(個数で切る)
残す候補数が文脈で自動変化残す候補数は常に固定
分布の鋭さに追従できる分布の鋭さに追従しにくい
現在の主流提供元によっては非公開

04鉄則:温度と top-p は「片方だけ」動かす

温度と top-p は併用できますが、両方を同時に動かすのは推奨されません。OpenAI も Anthropic も「片方を既定値のまま固定し、もう片方だけを調整する」よう案内しています。温度を触るなら top-p は 1.0、top-p を触るなら温度は 1.0 に置く、というのが基本です。

理由は明快で、両方いじるとどちらが出力を変えたのか切り分けられなくなるから。まず温度だけで方向性を決め、それでも下位の珍候補を確実に締め出したいときに top-p を補助的に下げる、という順番が扱いやすいです。

01

まず温度を決める

用途から温度を1つ選ぶ(事実なら低温、創作なら高温)。top-p は 1.0 のまま。

02

出力を見て微調整

堅すぎるなら少し上げ、暴れるなら少し下げる。動かすのは原則ここまで。

03

必要時のみ top-p

珍候補の混入を確実に断ちたいときだけ top-p を 0.9 前後へ。温度は固定したまま。

05用途別の推奨設定

迷ったら、まず用途から温度を引いて始めるのが近道です。top-p はとくに理由がなければ 1.0 のままで構いません。

用途temperaturetop-pねらい
分類・抽出0.01.0毎回同じ・ブレ最小
事実確認 Q&A0.1〜0.31.0堅実に正解へ寄せる
コード生成0.2〜0.51.0正しさ優先・少しの幅
翻訳・要約0.3〜0.51.0忠実さと自然さの両立
カスタマーサポート0.5〜0.71.0丁寧で安定した応答
マーケ・広告コピー0.7〜0.91.0表現の幅を出す
創作・物語0.8〜1.01.0意外性を歓迎
ブレインストーミング0.9〜1.01.0候補を広く出す

堅実に使いたい

分類・抽出・事実確認は低温(0〜0.3)。再現性が高く、検証もしやすい。

バランス重視

チャットやコードは中温(0.5〜0.7)。自然さと正確さの折り合いが取りやすい。

発想を広げたい

コピー・物語・ブレストは高温(0.8〜1.0)。多様な案が出る代わりに当たり外れも増える。

06その他の生成パラメータ

温度・top-p・top-k 以外にも、出力を整えるための調整値があります(提供元により有無や名称は異なります)。

  • frequency_penalty / presence_penalty:同じ語・話題の繰り返しを抑える。長文で同じ表現が目立つときに 0.3〜0.5 程度から試す。
  • max_tokens(出力上限):出力の最大長。途中で切れるのを防ぎつつ、コストの上限も決められる。
  • stop(停止文字列):指定した文字列(例:###)が出たら生成を止める。書式の崩れ防止に有効。
  • seed(乱数の種):固定すると再現性が上がる方向に働く。ただし後述のとおり完全な保証ではない。

07よくある勘違い

  • 「温度 0 にすれば必ず同じ答えになる」——なりません。温度 0 でも実行ごとに揺れることがあります(次節)。
  • 「数字の意味はどのモデルでも同じ」——違います。上限(OpenAI 2/Claude 1)も既定値もモデルで異なります。
  • 「温度と top-p は両方詰めるほど良い」——逆効果になりがち。片方を固定して片方だけ動かすのが原則です。
  • 「高温=賢い」——違います。高温は多様性が上がるだけで、事実用途では誤答が増えます。

Under the Hood

温度 0 でも「完全に同じ」にならない理由

温度 0 は「毎回いちばん確率の高い語を選ぶ」設定なので、理屈の上では出力が一意に決まりそうです。ところが実際の API では、同じ入力でも答えが微妙に揺れることがあります。よく「GPU の浮動小数点計算のせい」と言われますが、2026年の検証では主犯は別だと整理されています。

あなたの依頼 実行A:他の依頼と一緒に処理 実行B:別の組み合わせで処理 合計の 計算順が変化 わずかに違う 答え

FIG.5 あなたの依頼が「どの依頼たちと束ねて処理されたか」で計算の積み上げ順が変わり、結果が揺れる

本当の主因はバッチ効果です。推論サーバは多数の依頼を効率よく束ねて(バッチで)同時処理しますが、そのとき「あなたの依頼がどの依頼たちと一緒になったか」は毎回変わります。束ね方が変わると内部の合計計算の順序が変わり、ごく小さな誤差が積み上がって、最尤の語が入れ替わることがある——これが揺れの正体です。対策として、束ね方に左右されない「バッチ不変」な計算を使う方法が登場していますが、おおむね 1.6〜2 倍ほど遅くなるという速度との引き換えになります。実務では、温度 0 に加えて seed を固定しても「完全再現の保証ではない」と知っておくのが安全です。

08推論モデルでは温度をいじれない

2026年に主流となった推論(reasoning)モデル——OpenAI の o3・o4-mini や GPT-5 の推論モード等——では、温度や top-p を指定できません。これらの値は内部で 1.0 に固定されており、API に温度や top_p を渡すと「未対応パラメータ」としてエラーになるか無視されます。frequency_penalty なども同様に受け付けないことがあります。

理由は仕組みにあります。推論モデルは答える前に複数の思考の道筋を内部で試し、比較して良いものを選ぶ方式です。ここで温度を 0 にすると、すべての道筋が同じ一本道に潰れてしまい、複数案を比べる意味がなくなります。だから温度を外から触らせない設計になっているわけです。これらのモデルを使うときは、温度の代わりにプロンプトと、推論の深さ(effort/budget 系の指定)で挙動を整えます。

09まとめ

温度・top-p・top-k は、LLM の「くじの引き方」を変えるダイヤルです。温度は分布のとがり具合、top-p は割合での足切り、top-k は個数での足切り。基本方針はシンプルで、分類・事実は低温、創作・発想は高温。そして温度と top-p は片方だけ動かす。さらに、温度 0 でも完全再現は保証されないこと、推論モデルでは温度を指定できないこと、上限値や使えるパラメータは提供元ごとに違うこと——この3点を押さえておけば、設定で迷うことはほとんどなくなります。最後は必ず実際に出力を見て微調整するのが、いちばん確実な使い分けです。