【GPT】TemperatureとTop P、Frequency penaltyとPresence penaltyの違いとオススメ設定

備忘録

目次

導入

GPTをPlayground(およびAPI)から利用していると、以下の項目が設定できることは周知の事実かと思います。
・Temperature
・Maximum length
・Top P
・Frequency penalty
・Presence penalty

Maximum length,つまりMax Tokenはそこまで難しいものじゃなく、GPTの出力する回答のトークン数の上限値の設定であることはすぐに理解できるかと思います。

しかし、その他の値がGPTの出力にどのような影響を持つのか、公式のドキュメントだけではイマイチしっくりこなかったので、色々と調べてみて仮説として備忘録にしました。
あくまでWeb上で調べた限りの情報からの仮説+少数回の試行しかしてないので、しっかりとした検証は必要かと思います。

※要するに、あくまで自分の理解をもとにまとめた仮説の備忘録(検証数不足)なので、不正確な情報であるかもしれないことに注意してください。
※自分の理解をもとに「要するにこんな感じ」で捉えるために書いているので、正確な表現ではないかもしれませんが、ご了承ください。

TL;DR

使い物になる値

Top PTemperature0.8~1.0
Frequency penaltyPresence penalty0~1.0

Top P:高くなると、出力単語の「選択肢自体が増える」。
Temperature:高くなると、「選択肢の選び方に多様性が出る」。
Frequency penalty:一個の単語が出現したとき、「それが出現した回数に応じて」ペナルティを増やしていく(その単語がどんどん出にくくなる)。
Presence penalty:回数に関係なく、「一個の単語が出現したとき、その単語に」ペナルティをかける(違う単語を出しやすくなる)。

普通のチャットボットのように使いたい場合

Top P 中間~高め(0.9~1.0)
Tempareture 低め~中間(0.8~0.9)
Frequency penaltyとPresence penaltyはともに0

Top P:0.9, Tempareture:0.9,他0が一番安定しそう。

クリエイティブな出力をさせたい場合(要するに物語を書かせたいとき)

Top P 低め(0.8~0.9)
Tempareture 高め(0.9~1.0)
Frequency penalty 0.25~0.75の間で好みに合わせる。
Presence penalty 0から小刻みに上げて好みに合わせる。

Frequency penaltyの調整の優先度のほうが高い(表現力が高まる。でも上げすぎると壊れる)。

よほどのことがない限りPresence penaltyは弄る必要がないかも。(Presence penaltyを使いたい人って、一度使った単語は絶対二度と使ってほしくないマンくらいじゃないかな。間違ってるかも)
Top P:0.8,Temprareture:1.0,Frequency penalty:0.25,Presence penalty:0から、どこかの値を固定して、それ以外を一項目ずつ調整していくのがいいと思います。

Top PとTemperature

top_pとtemparetureの値が実際にGPTの出力にどのような影響を与えるかは、IT naviさんの以下の記事が参考になりました。
https://note.com/it_navi/n/n7b2a7dba4035
https://note.com/it_navi/n/n0376c2f4fb21

しかし理解力の低い僕には、2つの設定項目の明確な違いがいまいち感覚で理解できなかったので、GPTに説明させました。

了解しました。top_pとtemperatureの違いを、アイスクリーム屋さんの例え話で説明しますね。

アイスクリーム屋さんの例え

あなたが大好きなアイスクリーム屋さんに来ました。ここにはたくさんのフレーバーがあります。

top_p(トップピー):

この設定は「フレーバーの種類の選び方」に似ています。
top_pが低い場合(例: 0.7):「ベスト10のフレーバーだけから選ぼう!」という感じ。人気のある、みんながよく選ぶフレーバーだけを選ぶことになります。いつものバニラやチョコレートなど、確実に美味しいものが選ばれます。
top_pが高い場合(例: 0.95):「たくさんのフレーバーから選ぼう!」という感じ。人気のものだけでなく、あまり選ばれない変わったフレーバーも選択肢に入ります。たまにはキウイやワサビ味など、珍しいフレーバーを試すことができます。
temperature(テンパレチャー):

この設定は「フレーバーを選ぶ時の冒険心」に似ています。
temperatureが低い場合:「いつものフレーバーを選ぼう」という感じ。あなたがよく選ぶ、あるいは店員さんがおすすめするフレーバーを選びます。リスクは低く、安全に美味しいアイスクリームを楽しむことができます。
temperatureが高い場合:「今日は何か新しいフレーバーを試してみよう!」という感じ。普段選ばないようなフレーバーを選んでみることがあります。時々、予想外の美味しさに出会えるかもしれませんが、時々、ちょっと変わった味になることも。
これらの設定をうまく使って、自分の好みや必要に合わせたアイスクリーム(言葉の選び方)を選ぶことができます。

正確に合っているかどうかは断言できませんが、これを読んでから改めて各記事を読むと、だいたいそういうこと(Top Pが高くなると、出力単語の「選択肢自体が増える」。Temperatureが高くなると、「選択肢の選び方に多様性が出る」ということ)か、という感じになりました。間違ってたら誰か詳しく教えてください。

presence_penaltyとfrequency_penalty

公式のドキュメントだけでは、理解力の低い僕にはちっともよく分からなかったので、GPTに分かりやすく説明してもらいました。

分かりやすく解説するために、具体的な例を挙げてみます。

例1: リンゴのお話
考えてみてください、あるストーリーで「リンゴ」というキーワードが頻繁に使われる場面を想像してください。

presence_penaltyの場合:

ストーリーで「リンゴ」が1回でも出現していれば、次に「リンゴ」が出現する可能性に一定のペナルティがかかります。ただし、リンゴが1回出てきたか10回出てきたかは関係ありません。1回出てきただけで最大のペナルティが適用されます。
frequency_penaltyの場合:

「リンゴ」が1回出現すれば少しのペナルティ、2回出現すれば2倍のペナルティ、3回出現すれば3倍のペナルティ…という具合に、同じトークンの出現回数が増えるごとにペナルティが増えていきます。
例2: ペットのお話
「私のペットは犬です。犬はとても賢いです。犬と散歩するのは楽しいです。」という文があります。

presence_penaltyの場合:

「犬」というキーワードが初めて出現した時点で、次に「犬」というキーワードが出る確率にペナルティがかかります。しかし、その後「犬」というキーワードが何度繰り返されても、ペナルティの大きさは変わりません。
frequency_penaltyの場合:

「犬」というキーワードが1回目に出るとペナルティがかかり、2回目に出るとペナルティが2倍に、3回目に出ると3倍になります。
まとめると
presence_penaltyは「そのトークンが過去に出現しているか?」という点だけを見てペナルティを適用します。
frequency_penaltyは「そのトークンがこれまでに何回出現しているか?」という回数に応じてペナルティを増加させます。
この2つのペナルティを適切に使い分けることで、生成されるテキストの品質や多様性を調整することができます。

正確に合っているかどうかは断言できませんが、これを読んでから改めてドキュメントを読むと、だいたいそういうこと(Frequency penaltyは一個の単語が出現したとき、「それが出現した回数に応じて」ペナルティを増やしていく(その単語がどんどん出にくくなる)。Presence penaltyは回数に関係なく、「一個の単語が出現したとき、その単語に」ペナルティをかける(違う単語を出しやすくなる)。ということ)か、という感じになりました。間違ってたら誰か詳しく教えてください。

おわりに

GPTの設定は難解に感じるかもしれませんが、試行錯誤を繰り返すことで理解が深まります。この記事が皆さんのGPT活用の一助となれば幸いです。

コメント

タイトルとURLをコピーしました