📚

OpenAI APIのパラメータで遊ぶ(top_p編)

2023/07/20に公開

前回からの続きで、今回はtop_pを変えていくと何が起こるのかを見ていこうと思う。

top_pってなあに?

Prompt Engineering Guideには以下のように書かれている。

Top_p - 同様に、核サンプリングと呼ばれるサンプリング手法であるtop_pでは、モデルが応答を生成する際の決定性をコントロールすることができます。正確で事実に基づいた回答を求めるのであれば、この値を低くしておきます。より多様な回答を求めるのであれば、より高い値にします。

「核サンプリング」。またしてものっけから優しくない。しかし、決定性をコントロールするというのは果たしてtemperatureと何が違うのだろうかという疑問が浮かんでくる。実際、Prompt Engineering Guideでも以下の通りレコメンドされている。

一般的には、両方ではなく、どちらかを変更することをお勧めします。

これだけではよくわからないので、例によって動かして検証してみよう。

top_pの値を0から1まで0.2ずつ上げるとどうなるか

前回のコードを流用して、以下のようにコードを用意した。

import openai
openai.api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXX'
stri = input("質問を入力してください:")


for j in range(6):
    print("top_p:"+str(j*0.2))
    for i in range(3):
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            top_p=0+j*0.2, #今回はtop_pの値をいじる
            messages=[
                {"role":"user","content":stri},
            ]
        )
        print(response.choices[0]["message"]["content"].strip())

さて、今回はオオタニサンについて3回ずつ聞いていこう(時間帯ゆえか、5回だと必ず途中でタイムアウトしたため)。結果はこちら。

top_p:0.0
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、2018年にはMLBの本塁打王にも輝きました。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、2018年にはMLBの本塁打王にも輝きました。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、2018年にはMLBの本塁打王にも輝きました。
top_p:0.2
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、2018年にはMLBの本塁打王にも輝きました。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、打撃でもパワフルな打球を放つ。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、打撃でもパワフルな打球を放つ。
top_p:0.4
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球と多彩な変化球を持ち、またパワフルな打撃も魅力です。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球とスライダーが武器で、2021年にはMLBオールスターゲームにも選出されました。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球と多彩な変化球を持ち、打撃でもパワフルな打球を放つ。
top_p:0.6000000000000001
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球と多彩な球種を持ち、長打力もあります。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球と多彩な変化球を持ち、打者としてもパワフルな打撃力を誇ります。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球と多彩な球種を持ち、またパワフルな打撃も魅力です。
top_p:0.8
大谷翔平は日本の野球選手で、投手としても打者としても活躍しています。速球と豪速球が武器で、2021年にはMLBで最優秀選手に選ばれました。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍する珍しい選手です。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍している。速球とスライダーが武器で、パワフルな打撃も魅力。
top_p:1.0
大谷翔平は日本のプロ野球選手で、投手と野手の両方をこなす稀有な才能を持つ。彼の活躍は世界中で注目されている。
大谷翔平は日本のプロ野球選手で、投手としても打者としても非凡な能力を持つ現役のスーパースターです。
大谷翔平は日本のプロ野球選手で、投手としても打者としても活躍しています。速球や変化球の球種が豊富で、打者としてもホームランを量産しています。

うーむ。回答のばらつきという点ではTemperatureと変わりないような...?top_pが0の時はビッタリと同じことを返している。ちなみに2018年にオオタニサンはMLBのホームラン王になっていない。 正確で事実に基づいた回答を求めるのであれば、この値を低くしておきます。 ではなかったのか。しかし3回同じ答えをきっちり返してくるということは、これはもうGPTちゃんが嘘つきというより、元ネタとなっている文献が間違っているか、もしくは無垢なGPTちゃんに大嘘を吹き込んだ奴がいるかのどちらかだろう。GPTちゃんが人間だったら。

では、質問を変えてみよう。こんな質問だったらどうだろう?

青春群像劇を書きたいのですが、キャラクターの名前の候補を5つ挙げてください。

結果はこちら。top_pの値ごとに見ていこう。

top_p:0.0
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 田中真理子(たなか まりこ)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)
----
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 田中真理子(たなか まりこ)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)
----
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 田中真理子(たなか まりこ)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)

いかにも青春群像劇に出てきそうな名前が列挙されている。top_pが0だとやはり、同じ回答が3回出てきている。

top_p:0.2
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 田中悠子(たなか ゆうこ)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)
---
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 田中悠子(たなか ゆうこ)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)
---
1. 佐藤美咲(さとう みさき)
2. 高橋拓也(たかはし たくや)
3. 中村真理子(なかむら まりこ)
4. 田中健太(たなか けんた)
5. 山田さくら(やまだ さくら)

top_pが0.2になると、少しだけバリエーションが出てくる。さくらが山田になったり、健太が田中になったり、中村真理子という新キャラが突然登場したり。しかし主人公は依然「佐藤美咲」が張り続けている。突然主人公という言葉を出したが、1番の名前の人を便宜的に主人公と考えるようにした。

top_p:0.4
1. 佐藤太一(さとうたいち)
2. 高橋美咲(たかはしみさき)
3. 山田健太(やまだけんた)
4. 田中さくら(たなかさくら)
5. 小林直人(こばやしなおと)
----
1. 佐藤真央(さとうまお)
2. 高橋拓也(たかはしたくや)
3. 田中美咲(たなかみさき)
4. 山田健太(やまだけんた)
5. 小林さくら(こばやしさくら)
----
1. 佐藤真央(さとうまお)
2. 田中拓也(たなかたくや)
3. 高橋美咲(たかはしみさき)
4. 山田健太(やまだけんた)
5. 中村さくら(なかむらさくら)

top_pが0.4になると、佐藤美咲が主人公から外れ、とうとう男子が主人公になるケースが現れる。太一!高校ではラグビーやってただろ!佐藤真央のユニセックス感は線の細いイケメンかスポーティな女子を彷彿とさせる。一方で山田健太がいずっぱりなのが少し面白い。

top_p:0.6000000000000001
1. 佐藤明子(さとう あきこ)
2. 高橋大輔(たかはし だいすけ)
3. 田中美香(たなか みか)
4. 山田健太(やまだ けんた)
5. 小林さくら(こばやし さくら)
----
1. 佐藤美香(さとう みか)
2. 高橋健太(たかはし けんた)
3. 山田真由美(やまだ まゆみ)
4. 田中拓也(たなか たくや)
5. 渡辺さくら(わたなべ さくら)
----
1. 佐藤 美咲(さとう みさき)
2. 高橋 太一(たかはし たいち)
3. 山田 さくら(やまだ さくら)
4. 田中 健太(たなか けんた)
5. 中村 あやか(なかむら あやか)

0.6になるとだいぶ登場人物がぐちゃぐちゃになってくる。3回回して一人も被っていない。そして佐藤美咲が主人公に返り咲いている。中村あやかは中盤あたりでドロドロのトラブルを引き起こしそうな気がする。

top_p:0.8
1. 佐藤明子 (さとう あきこ)
2. 山田太郎 (やまだ たろう)
3. 田中美咲 (たなか みさき)
4. 高橋健太 (たかはし けんた)
5. 中村さくら (なかむら さくら)
----
1. 田中太郎(たなかたろう)
2. 山田美月(やまだみづき)
3. 佐藤健太(さとうけんた)
4. 鈴木真理子(すずきまりこ)
5. 小林拓海(こばやしこうみ)
----
1. 佐藤明子(さとう あきこ)
2. 高橋健太(たかはし けんた)
3. 中村美咲(なかむら みさき)
4. 田中大介(たなか だいすけ)
5. 山田麻衣(やまだ まい)

0.8になると名前の多様性がさらに増え、一周回って「山田太郎」が現れる。田中太郎が主人公の青春群像劇は、泰然と過ごす田中太郎の周囲にいる人たちの変化を描くようなものになりそうだ。「天才柳沢教授の生活」のような。

top_p:1.0
1. 田村みなみ(たむら みなみ)
2. 中島雄大(なかじま ゆうた)
3. 佐藤真理子(さとう まりこ)
4. 小林恵美(こばやし えみ)
5. 高橋光男(たかはし みつお)
----
1. 佐藤真央(さとうまお)
2. 高橋健太(たかはしかんた)
3. 田中美穂(たなかみほ)
4. 山田拓実(やまだたくみ)
5. 小林さくら(こばやしさくら)
----
1. 佐藤由美子(さとう ゆみこ)
2. 高橋悠介(たかはし ゆうすけ)
3. 田中美夏(たなか みなつ)
4. 伊藤健太(いとう けんた)
5. 山田さくら(やまだ さくら)

「みなみ」という新キャラが登場した。第一シーズンの主要キャラが卒業した後、あらたに同じ場所でドラマを繰り広げていく第二シーズン感がある。第三話くらいで小林さくらあたりが理解のある(そしていろいろな事情を知る)OGとして帰ってくるのだろう。

top_pは結局何の役に立つのか

top_pをいじって、プロットすらない架空の物語の登場人物の名前の案をGPTに出してもらうとどうなるかを観察した。

完全な主観だが、top_pを上げればあげるほど頭が柔らかくなっていく感じがした。0.0の時は「青春群像劇の主人公といえば佐藤美咲に決まっておろう」みたいな厳粛な空気を感じたが、0.8にでもなると「太郎が主人公でも面白そうじゃね?」とあえてのヌケ感すら垣間見られるようなアウトプットを出してきている。

冒頭にもあった通り、正確で事実に基づいた回答を求めるのであれば、この値を低くしておきます。 ということなので、オオタニサンの偉業を知りたいときにはtop_pは0にしておくのが無難そうだ。(大嘘ついてたけど)

一方で、登場人物の名前出しのようなクリエイティブなブレインストーミングをしたい場合はtop_pの値はなるべく高くしておくのがいいのだろう。MAXが1.0なので、素の状態では「田中美夏」あたりがクリエイティビティの限界のようだ。よりクリエイティブに思考を発散させたい場合はプロンプトでうまく指定してあげる必要がありそう。

Discussion