文はどのように生成されるのか?
前の章では Token を紹介しました。
モデルは一連の Token を受け取った後、それらをどのように文の続きへ組み立てるのでしょうか?
まず、まだ完成していない次の文を見てください。
I love
次に何が続くでしょうか?
理解しやすくするために、簡略化した架空の候補リストを用意します。
you 30%
this 18%
music 12%
it 8%
...
これらの数値は説明用であり、実際のモデル出力ではありません。
モデルは現在のコンテキストに基づいて、次に現れる可能性のある Token の確率分布を計算し、使用するデコード戦略に従って一つを選びます。
ここで you が選ばれると、現在の内容は次のようになります。
I love you
続いて、モデルは新しい内容をコンテキストに戻し、次の Token を予測します。
I love
I love you
I love you too
I love you too.
この処理は、終了を示す Token が生成されるか、出力上限に達するか、システムが別の方法で停止させるまで繰り返されます。
ここで、特に一つ訂正しておくべき点があります。Tokenizer は、テキストと Token ID を相互に変換するだけです。テキストを分割するときに、各 Token にいつまでも変わらない回答確率を割り当てるわけではありません。
確率は、生成時の現在のコンテキストに基づいてモデルが計算します。同じ単語でも、置かれた文が異なれば、その後に現れやすい内容も変わります。
同じ質問から異なる回答が出るのはなぜか?
とても簡単な実験ができます。
互いに影響しない新しい会話画面を二つ開き、それぞれに次の文を入力してください。
昔々、あるところに小さな王子がいました
二つの回答は似たところから始まりながら、その後は異なる物語へ進むかもしれません。
なぜでしょうか?
多くの生成処理では、各段階で常にスコアが最も高い Token を選ぶのではなく、サンプリングを行うからです。一度でも選択が異なれば、その後のコンテキストが変わり、回答全体も別の道筋に沿って生成されます。
このほか、モデルのバージョン、システム指示、会話履歴、ツールから返された内容、サーバー側の実装も結果に影響します。
したがって、「同じ文を入力した」ことが、二回の実行条件がすべて同じだったことを意味するとは限りません。
Temperature とは?
Temperature(温度)は、一部のモデル API が提供するサンプリング用のパラメーターです。
直感的に言えば、候補 Token の確率分布がどれほど集中するかを調整します。
- Temperature が低いほど、通常は高確率の候補がより優位になり、出力が集中します。
- Temperature が高いほど、通常は多くの候補が選ばれる可能性を持ち、出力が多様になる一方、不安定になることもあります。
これは「創造性スイッチ」ではなく、事実を自動的に正しくするものでもありません。
情報抽出、分類、固定形式の出力では、通常は一貫性をより重視します。ブレインストーミングでは、より多くの変化を受け入れたい場合があります。
どちらの場合でも、結果の確認は必要です。
Temperature はいくつに設定すべきか?
あらゆるタスクに適した固定値はありません。
Temperature に対応しているか、指定できる範囲はどこまでか、ほかのサンプリング用パラメーターとどう組み合わせるかは、モデルや API によって異なります。一般向けのチャット製品でも、生成に使われたすべてのパラメーターが毎回公開されるとは限りません。
したがって、「Web 版のデフォルトは 0.7」「この値が最善」といった説明を、一般的な結論として扱わないでください。
より確実なのは、実際にやりたい作業で何度か試し、設定ごとの結果を見てから使う値を決めることです。
そのインターフェースが Temperature に対応しているか、どの範囲を設定できるかは、利用中のプラットフォームの最新公式ドキュメントで確認してください。Temperature が低くても出力が毎回同じとは限らないため、重要な結果は引き続き確認が必要です。
プロンプトエンジニアリングに戻る
ランダム性を理解すると、モデルを毎回同じ結果を返すデータベース検索のようには扱わなくなります。
Prompt の役割は、得られる可能性のある答えを必要な範囲へ近づけることです。検証の役割は、今回の結果が本当に使えるかを確認することです。
前の章: Token とは?
次の章: 良い出力を得るための六つのコツ