🐷

最新情報!GPT4のAPIの出力結果をより一定にする方法

2023/11/28に公開

OpenAIのAPI・パッケージの進化が激しい

PythonのGPTのpakcageが1系に上がってコードの書き方が変わって、アップデートすると今までのコードを書き直さないといけないので要注意!という記事を書きました。
https://zenn.dev/pipon_tech_blog/articles/6fbc3cc6cb22be

上記の記事のようにAPIがどんどん進化しており、最新のAPIだと新しいパラメータが増えました。
seedというパラメータです。

このパラメータに値を入れておくことで、出力結果を一定にすることに貢献します。

出力結果の安定に貢献するパラメータ:temperature

今まではtemperatureというパラメータを0にすることで出力結果を一定にしていくことができると言われていました。

temperatureとは、GPTがどの単語を出現させるかという計算途中の選び方に関係するパラメータです。

GPTが文章を出力しているように見えていますが、その裏側では、INPUTの情報に対して、次に最も相応しい確率の高い単語を出力しています。

この確率の高い単語は、確率分布という分布の中で、選択されていきます。

図にするとこんな感じです。

temperatureをの値を変えることで、この確率分布の形を変える役割をしていました。

左の山の場合、単語B,Cも単語Aと距離が近いことがわかると思います。
temperatureが1だと、距離が近いため単語B,Cも選ばれてしまう可能性があります。

temperatureを0にすると、右の山のように、単語A,B,Cの位置関係は変わらないのですが、距離がかわり、単語Aが選ばれる確率が上がります。

こうして出力結果が一定になる、という効果があったのでした。

seedはどんな役割?

そして、今回出てきたseedというパラメータ。

このパラメータは、どの単語が選ばれるかを生成された乱数で抽出するときに、乱数の初期値が必要であり、その初期値を生み出す値がseedになります。

そのような時、確率的サンプリングと呼ばれる手法で、単語を決定しています。

確率的サンプリングとは、
研究者が確率論に基づいた方法を用いて、より大きな母集団からサンプルを選ぶ手法である。

OpenAIはモデルを公開していないので、正確なところはわからないんですが、
LLMのモデルは確率的サンプリングで単語を決定していることが多いため、想像で書いています。

seedの値を固定することがどの単語が選ばれるかに影響しているため、
出力結果を一定にすることに貢献するのです。

そして忘れていけないパラメータがもう一つ

fingerprintというパラメータも追加されました。
GPT4のモデルは同時にアクセスさせるために世界中のサーバーにいくつもあります。
fingerprintを設定することで、同じモデルにアクセスしにいくことができます。
出力結果を一定にしたければ、このパラメータも忘れてはいけません。

system_fingerprint = response.system_fingerprin

さらに詳細を知りたい方はこちらのOpenAIのコミュニティに詳しい議論が載っていますのでチェックしてみてください。
https://community.openai.com/t/seed-param-and-reproducible-output-do-not-work/487245

もちろん、株式会社piponでも技術でお困りのことがある方はオンライン相談が可能です。
こちらから会社概要資料をDLできます!
お問い合わせ内容に「オンライン相談希望」とご記載ください。
https://share.hsforms.com/19XNce4U5TZuPebGH_BB9Igegfgt

株式会社piponでは定期的に技術勉強会を開催しています。
ChatGPT・AI・データサイエンスについてご興味がある方は是非、ご参加ください。
https://chatgptllm.connpass.com/

株式会社piponではChatGPT・AI・データサイエンスについて業界ごとの事例を紹介しています。ご興味ある方はこちらのオウンドメディアをご覧ください。
https://bigdata-tools.com/

株式会社piponのテックブログ

Discussion