はじめに
ChatGPTをシステムに組み込んでいたりすると、同じことを入力した時は同じことを出力してほしい場面があったりします。
そういった場合はいつも何気なく”Temperature”で調整しています。
しかし、ChatGPTにはこういった場合に使えるリクエストパラメータがいくつか存在します。今回はそれらの紹介と比較結果を記事にしてみました。
検証内容
今回はPlaygroundを使って検証してみました。
Playground →(https://platform.openai.com/playground?model=gpt-4-turbo-preview)
今回検証する内容は「同じ食材指定でレシピを考えてもらった際の回答を見る」です。
具体的な入力プロンプトは「豚肉、玉ねぎ、人参を食材としてオリジナルのレシピを一つ考案してください。」にします。
確率制御がない場合
“Temperature”も”Top_p”もデフォルト値の指定でやってみます。
ちなみにデフォルト値は、“Temperature”、”Top_p”ともに「1」です。
■ 検証結果
「豚肉と野菜の甘辛煮込み」や「和風豚肉と野菜の味噌辛炒め」、「豚肉と彩り野菜のみそ炒め」などバラバラです。材料も2人前だったり、4人前だったり、、。
”Temperature”の指定による制御
■ どういったパラメータか?
0〜2の値をとり、0に近ければより集中的な結果を、1に近ければよりランダムな結果を得ることができます。(top_pとの併用は非推奨)
これはより小さな値にすることで、モデルが生成する単語を選択する際の確率分布が散らばり、確率の高い単語が選択されやすくなることで出力を安定させると言うものです。
■ 検証結果
どれも所々違いますが、材料が全て2人前だったり、出力のフォーマットが概ね同じだったりと、「1」で指定した時よりも安定感が出ました。
”Top_p”の指定による制御
■ どういったパラメータか?
0〜1の値をとり、例えば「0.1」だとモデルは上位10%のトークンのみを選択肢から、トークンの選択を行うようになります。
■ 検証結果
こちらは全て「豚肉と野菜の甘辛炒め」が出力されました!
材料の内容も概ね同じで、特に2回目と3回目は全て同じになりました。
”Seed”の指定による制御
■ どういったパラメータか?
Seed値とは、乱数生成器の初期値です。
基本的にSeed値を固定することでモデルは同じ入力には同じ出力をします。
本記事の執筆時にはベータ版のパラメータで完璧ではないとのことです。
またOpenAIの公式リファレンスによれば、結果の一貫性は保証されておらず、結果の変更を追跡するには、システムの更新を反映する”system_fingerprint”(APIレスポンスで確認可能)を確認する必要があります。つまり、システムのアップデートにより、同じ入力でも異なる結果が返される可能性があるということです。
■ 検証結果(※PlayGroundに”Seed”がなかったのでGoogleAppScriptで確認)
概ね似たような出力になりましたが、そこそこバラ付きのある印象ですね。
結論
現段階では、再現性を完璧にする方法はないです。
今回は簡易的な方法で、試行回数が少ないので結論付けるのは難しいですが、
所感としては”Top_p”が一番再現性が高いと思います。
また”Seed”に関してはベータ版なので、今後の改善を期待します。
コメントを残す