OpenAI APIで設定するtemperatureは回答のランダム性を指定するもの。実験してみた

OpenAIのChatCompletion.createを利用する場合、temperatureというパラメーターを指定することが出来ます。こちらが何を意味するのか、論者ごとに異なる見解があるような気がしたので、自分の理解を確かめる意味で実験してみました。

単純に、同じ質問をして、temperetureごとに回答を見ます。全てのtemperatureで同じ質問をし、同じtemperatureごとに5回質問をします。すると、temperetureが0だと同じ質問をすれば同じ回答が返ってくるところ、数値を上げるごとに、回答にランダム性が上がっていくことが確認出来ます。

サンプルプログラム(Google Colabで動かしています)

%pip install openai
import os
import openai
openai.api_key = "OpenAIのAPIキーをここにコピペしてください"
for j in range(6):
  print("\n「なにか面白いギャグを御願いします」をtemperature " + str(0 + j*0.2) + " で:\n")
  for i in range(5):
    completion = openai.ChatCompletion.create(
      model="gpt-3.5-turbo",
      messages=[
        {"role": "user", "content": "なにか面白いギャグを御願いします"}
      ],
      temperature = 0 + j*0.2
    )
    print(completion.choices[0].message.content)

すると、以下の様な結果が得られます。

出力結果

「なにか面白いギャグを御願いします」をtemperature 0.0 で:

「なぜ猫はネズミを追いかけるのか? それは、猫がネズミを追いかけなければ、猫が暇になってしまうからです!」
「なぜ猫はネズミを追いかけるのか? それは、猫がネズミを追いかけなければ、猫が暇になってしまうからです!」
「なぜ猫はネズミを追いかけるのか? それは、猫がネズミを追いかけなければ、猫が暇になってしまうからです!」
「なぜ猫はネズミを追いかけるのか? それは、猫がネズミを追いかけなければ、猫が暇になってしまうからです!」
「なぜ猫はネズミを追いかけるのか? それは、猫がネズミを追いかけなければ、猫が暇になってしまうからです!」

「なにか面白いギャグを御願いします」をtemperature 0.2 で:

「なぜ猫はネズミを追いかけるのか?それは、猫がネズミを追いかけるからです!」
「なぜ猫はネズミを追いかけるのか?それは、猫がネズミを追いかけなければ、犬が猫を追いかけるからです!」
「なぜ猫はネズミを追いかけるのか?それは、猫がネズミに『お前、俺の餌を食べたろ!』と言っても、ネズミが『ごめんなさい、俺、あんたの餌を食べたつもりじゃなかったんだ』と言ってくれるからです!」
「なぜカエルは車に乗らないの?  車にハンドルがないから!」
「なぜ鳥は空を飛ぶのか? それは、地面を歩くよりも楽だからです!」

「なにか面白いギャグを御願いします」をtemperature 0.4 で:

「なぜ猫はミルクが好きなのか? それは、猫が牛乳を飲んでいるときに、牛が「にゃあ」と鳴いたからです!」
「鳥が空を飛んでいるのを見たら、空港に行っているのかな?」
「なぜ猫は鼻が濡れているのか? それは、ミャーゼリンを使っているからだにゃ!」
「なぜ猫はネズミを追いかけるのか?それは、猫がネズミを追いかけなければ、猫缶がなくなってしまうからです!」
「魚が空を飛ぶとき、何と言うか知ってる?フライパン!」

「なにか面白いギャグを御願いします」をtemperature 0.6000000000000001 で:

「なぜ鳥は空を飛ぶのか? 地面を歩いたら足が疲れるからです!」
「なぜダイエットに失敗するか分かりますか? それは、ダイエットの最初の文字が「ダイ」だからです!」
※ご注意:このギャグは冗談であり、健康的なダイエットを推奨するものではありません。
「なぜカエルは車に乗れないの? …クルマエルだから!」
「駅前で転んだら、駅長に助けてもらった。駅長はなんと、私を立て直してくれた!」
※このギャグは「駅長(えきちょう)」と「立て直す(たてなおす)」の語呂合わせで成立します。
「なぜかんがえるのが疲れたら、ひっくり返して休むといいですよ。そうすれば、頭がスッキリします。」
「でも、そんなことしたら、脳みそが落ちて出てきちゃいますよ。」
「それは、脳みそが転がっているだけです。」

「なにか面白いギャグを御願いします」をtemperature 0.8 で:

「なぜ犬はしゃべらないのか? だって"わんわん"しか言えないからさ!」
「なぜ人間はバカが多いかと思ったら、地球が回っているからです。回ると頭が狂ってしまうんですよ。」
※注意:このギャグは冗談であり、人々の能力や性格についての一般化や軽蔑を意図していません。また、誤解を招くような発言は避けるようにしています。
「お前、今日は運がいいな。なぜかって? なぜって、俺が出会ってやったからだ」
「ハンバーガーとフライドポテトが喧嘩したら、ポテトがフライパンでハンバーガーを叩いていた。なぜ?ポテトが揚げ物好きだから!」
「シンガポールで生まれたペンギンは、どこで生まれたペンギンよりも高級らしいです。なぜなら、シンガポールはぺんぎん(便器)が高級だからです!」

「なにか面白いギャグを御願いします」をtemperature 1.0 で:

「私の科学的な発明品は、ミラクルなんですよ。何が不足しているかを認識すると、それを持ってきてくれます。不足しているものしか出てこないんですけどね。」
「アリさんが好きな花は何かな?」
「アリアゲニスタ!」
いつも優しい母親に「お母さん、今日は色気を出してみました」と言ったら、「そんなの大丈夫?爆弾でも仕込んでたりして」と返されたんです。僕、「色気」と「アイロン」を間違えたみたいです。
「鳥の声が聞こえない日は、きっとひな祭りに鶏がいないからです」
「なぜ猫は地震に強いのか? それは『地べたに近いから』という理由があるからです。」

結果

見ての通り、temperatureが0だと、5回とも同じ結果が返ってきます。0.2になると毎回変わりますが、「なぜ(動物)は」で始まるところは変わっていません。これが、temperatureが上がるごとに、どんどんランダムになっていきます。自分のボケの解説までし始めるあたり、なかなか饒舌ですよね。

一部で、temperatureは創造性をコントロールするパラメーターという言及を見かけたので実験をしてみました。その理解は間違いとまではいえないと思うものの、回答のランダム性という理解の方が素朴な理解としては正しいのかなぁと思ったので実験しました。

そもそも、GPT(General Pre-trained Transformer)の基盤理論であるTransformerは、これ自体には確率論的な要素はありません。コンピューターなので、同じ入力をすれば毎回同じ出力を得ることは可能です(精度や丸め誤差は別の議論として)。

そこを、temperatureというパラメーターを与えることで、ランダム性を付加している、ということなんだと思います。top_kも同じような発想で取り入れられたものだと思います。(違ったらご指摘いただけるとありがたいです)


この記事が気に入ったらサポートをしてみませんか?