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も同じような発想で取り入れられたものだと思います。(違ったらご指摘いただけるとありがたいです)
この記事が気に入ったらサポートをしてみませんか?