Azure OpenAI の GPT モデルを使って作成したチャットボットを動かしていると、同じ質問をなげても回答内容がバラつくことがあります。安定した回答を返すか、回答にランダム性をもたせるかは、Azure OpenAI に実装されている2つのパラメーターで設定することが可能です。

パラメーターの種類

『Temperature(温度)』

モデルが生成する回答候補の各々の”確率”を調整します。

  • 設定値が高い場合(1に近い場合)
    確率が均等になるよう調整します。均等になることで、確率が低かった単語やフレーズも対象になり、多様な回答になります。
  • 設定値が低い場合(0に近い場合)
    確率が高い単語やフレーズの確率をより高く設定し、対象を絞ります。毎回一定の回答が返るようになります。

『Top P(上位P)』

モデルが生成する回答候補の上位何%までを対象とするかを決定します。

  • 設定値が高い場合(1に近い場合)
    確率の低い単語やフレーズも対象に含めるため、広い範囲からの回答になります。
  • 設定値が低い場合(0に近い場合)
    確率の高い単語やフレーズのみを対象にするため、毎回一定の回答が返るようになります。 

Temperature と Top P の比較

どちらもランダム性を制御するパラメーターであり、低い値を設定すると一定の回答が返るようになりますが、どのような違いがあるのでしょうか。Azure OpenAI Studio のプレイグラウンドを使って実際の回答を比較します。

(使用モデル:gpt-4)

質問:松本城を建てたのは誰?
回答1:既定値(Temperature = 0.7 Top P = 0.95)の場合
1回目松本城は石垣と天守部分の大部分を建てたのは石川数正です。ただし、現在見られるような形に完成させたのは水野勝成で、両名が重要な役割を果たしました。
2回目松本城は織田信長の家臣である石山氏が築城を開始し、後に石山氏が没落した後は、織田信忠が引き続き築城を行いました。
3回目松本城の築城者は、戦国時代の武将石川数正です。彼は城の初期の構造を作り、その後、織田信長の家臣である小笠原長時が引き継ぎ、現在の形に発展させました。

共通事項もありますが、比較的ランダムな回答が返ってきました。


回答2:Temperature = 0.0 Top P = 1.0の場合
1回目松本城は織田信忠(織田信長の子)が築城を開始し、後に石川数正が完成させました。しかし、現在見られる天守は石川氏の後、松本藩主となった石山氏が建てたものです。
2回目松本城は織田信忠(織田信長の子)が築城を開始し、後に石川数正が完成させました。しかし、現在見られる天守は石川氏の後、松本藩主となった石山氏の時代に建てられました。
3回目松本城は織田信忠(織田信長の子)が築城を開始し、後に石川数正が完成させました。しかし、現在見られる天守は石川氏の後、松本藩主となった石山氏の時代に建てられました。

一言一句までほとんど同じ回答になりました。


回答3:Temperature = 1.0 Top P = 0.0の場合
1回目松本城は織田信忠(織田信長の子)が築城を開始し、後に石川数正が完成させました。しかし、現在見られる天守は石川氏の後、松本藩主となった石山氏が建てたものです。
2回目松本城は織田信忠が築城を開始し、その後、織田信雄が完成させました。しかし、現在見られる天守は石垣とともに石川数正が築いたものです。
3回目松本城は織田信忠が築城を開始し、後に石山城から移った織田信長が完成させました。しかし、現在見られる天守は石川数正が築いたものです。

「織田信忠が築城を開始し、その後石川数正が築いた」とベースとなる部分は共通していますが、その他に毎回異なる情報が含まれています。

まとめ

『Temperature』と『Top P』どちらもランダム性を制御する項目ではありますが、今回の検証では、『Temperature』を使用した場合はより一定の回答が返ってくることがわかりました。ただし、Microsoft 社も Azure OpenAI の回答が正しいと思い込むのは安全ではない と述べている通り、回答が一定だからといって、その回答が正しいとは限らないことに注意が必要です。
今回は 0 と 1 の極端な値で検証を行いましたが、実際に設定される際は運用や回答候補となるドキュメントの内容等に合わせて調整することをおすすめします。