AI・機械学習
中級

トークンサンプリング(トークンサンプリング)

LLMが次のトークンを生成する際に、確率分布から確率的にトークンを選択する手法の総称。Temperature・Top-k・Top-pなどのパラメータで出力の多様性と品質のバランスを制御する。

0 回閲覧
0 いいね

トークンサンプリングとは

トークンサンプリングとは、大規模言語モデル(LLM)がテキストを生成する際に、語彙全体の確率分布から次のトークンを確率的に選び出すプロセスの総称である。LLMは各生成ステップで語彙中の全トークンに対してlogit(非正規化スコア)を出力し、softmax関数で確率分布に変換した上で、その分布に従ってトークンを選択する。

なぜサンプリングが必要か

最も単純なデコーディング手法は、常に最高確率のトークンを選ぶGreedy Decodingである。しかしGreedy Decodingには致命的な欠点がある。出力が決定論的になり、同じプロンプトに対して常に同じ応答しか返せない。また、局所最適に陥りやすく、文章全体としては不自然な繰り返しや冗長な表現が生まれやすい。

サンプリングはこの問題を解決する。確率分布から確率的にトークンを選ぶことで、同じプロンプトでも多様な応答を生成できる。創作文・ブレインストーミング・対話など、多様性が重要なタスクではサンプリングが不可欠である。

主要なサンプリングパラメータ

トークンサンプリングの挙動を制御する主要パラメータは以下の3つである。

パラメータ範囲効果推奨用途
Temperature0.0〜2.0低いほど確定的、高いほどランダム0.0-0.3: 事実回答、0.7-1.0: 創作
Top-k1〜語彙数上位k個のトークンのみ候補に残す10-50: 一般的な範囲
Top-p (Nucleus)0.0〜1.0累積確率がpに達するまでのトークンを候補に0.9-0.95: 一般推奨

これらのパラメータは組み合わせて使用できる。例えばTemperature=0.8 + Top-p=0.95のように設定すると、まずTemperatureで確率分布を調整し、次にTop-pで低確率トークンをカットする二段階フィルタリングが行われる。

サンプリングの実行順序

OpenAI APIやHugging Faceのtransformersライブラリでは、サンプリングは以下の順序で実行される。(1) モデルがlogitを出力、(2) Temperature Scalingでlogitをスケーリング、(3) Top-k Filteringで上位k個に絞り込み、(4) Top-p Filteringで累積確率閾値以下を除外、(5) 残ったトークンからカテゴリカル分布でサンプリング。この順序を理解することで、各パラメータの相互作用を正しく予測できる。

再現性とシード値

サンプリングは本質的に確率的であるため、同じ入力・同じパラメータでも異なる出力が生成される。再現性が必要な場合はseedパラメータを固定する。OpenAI APIではseedパラメータが提供されており、同一seedを指定すれば高い確率で同一出力が得られる(ただしモデルアップデートにより保証は限定的)。

FAQ

Q1: Temperature=0とGreedy Decodingは同じ?

実質的に同じ結果になる。Temperature=0ではsoftmax後の確率分布が最大確率トークンに集中するため、常に同一トークンが選択される。ただし実装によってはTemperature=0を内部的にGreedy Decodingに切り替えるものもある。

Q2: サンプリングパラメータの最適値は?

タスクによって異なる。事実ベースのQ&AではTemperature=0〜0.3が推奨される。コード生成ではTemperature=0〜0.2が一般的。創作・ブレインストーミングではTemperature=0.7〜1.2 + Top-p=0.9〜0.95が良い結果を出しやすい。

Q3: Top-kとTop-pは併用すべき?

多くの実装では併用可能だが、通常はどちらか一方で十分である。Top-pの方がコンテキストに応じて候補数を動的に調整するため、単体での使用が推奨されることが多い。