The George Inn
© Copyright Ian Capper and licensed for reuse under this Creative Commons Licence.

前回は、今まで有効利用していなかったChatGPTの設定「カスタム指示」で、GPT-4の振舞を制御するパラメータの1つであるTemperatureの指示が可能であることがわかり、Bingの3種類の会話モードと、Bingが内部的にGPT-4を呼び出す際に指定するTemperatureパラメータに設定する値とが、どのように対応するかを調べてみました。

実は、その後、Bing自身(Microsoft Copilot with Bing Chat)に、Bingの「会話モード」の設定は、内部的にGPT-4を呼び出す際の制御パラメータとどう対応するのか尋ねてみたのですが、Temperatureの値と関連するところまでは教えてくれましたが、具体的なTemperatureに設定する値までは、教えてもらえませんでした。

 

本日は、OpenAI PlaygroundでGPTを制御できる以下のパラメータが、同じくChatGPTの「カスタム指示」で指定可能か確認した結果のご報告です。

  • Max length (max_length:~256):生成するトークンの最大数を設定
  • Top P(top_p:0~1):小さい値にするほど、より多様なテキストを生成
  • Stop sequences:文の終わりなど、目的のポイントでモデルを停止させるために使用

1)Max lengthパラメータについて

まず、Max lengthパラメータの使い方についてChatGPTに訊いてみましょう。

私#1

GPTの出力を制御する「Max length」パラメータについて教えてください。

ChatGPT#1

「Max length」パラメータは、GPTが生成するテキストの最大トークン数を指定します。1トークンは通常、スペースで区切られた単語や句読点などです。この値を設定することで、出力されるテキストの長さを制御できます。小さい値を設定すると短いテキストが、大きい値を設定するとより長いコンテンツが生成されます。適切なmax_lengthを設定することは、目的に応じたテキスト生成には非常に重要です。

 

以下は、次のプロンプトに対するChatGPT(GPT-4 Default)の回答です。

私#2

次の未完成な文を完成させる5種類の文字列を生成してください。「吾輩は猫である。名前はまだ」

 

  • max_length=3の場合のChatGPTの回答

1.     ない。

2.     無い。

3.     未定。

4.     知らぬ。

5.     なし。

最大トークン数なので、出力トークン数が3以下の場合もあるということですね。

 

  • max_length=4の場合のChatGPTの回答

1.     ない。

2.     未定だ。

3.     無いんだ。

4.     知られていない。

5.     決まっていない。

出力最大文字数ではなく、トークン数なので、4番目、5番目もトークン数が4ということなのだと思います。

以下、max_length=5 ~ max_lenght=15くらいまでは、同じような回答が返されました。

 

  • max_length=16の場合のChatGPTの回答

1.            ないが毎日が楽しい。

2.            無いけれども元気だ。

3.            ないけれど好奇心旺盛。

4.            なくとも自由気まま。

5.            ないが散歩が好きだ。

この辺りから、最大出力トークン数の制約に縛られず「名前はまだ無い」というだけの表現からバリエーションが出てきました。

 

  • max_length=20の場合のChatGPTの回答

1.     「吾輩は猫である。名前はまだない。」

2.     「吾輩は猫である。名前はまだ決まっていない。」

3.     「吾輩は猫である。名前はまだ与えられていない。」

4.     「吾輩は猫である。名前はまだ無いんだ。」

5.     「吾輩は猫である。名前はまだ思い浮かばない。」

この辺りになると、プロンプトで与えられた部分も含めた文章で回答が示されるようになりました。

 

  • max_length=50の場合のChatGPTの回答

1.     「吾輩は猫である。名前はまだない。」

2.     「吾輩は猫である。名前はまだ決まっていない。」

3.     「吾輩は猫である。名前はまだ与えられていない。」

4.     「吾輩は猫である。名前はまだ思いつかない。」

5.     「吾輩は猫である。名前はまだ秘密だ。」

最大トークン数を30増やしたにもかかわらず、出力にはあまり代わり映えがありません。

 

  • max_length=100の場合のChatGPTの回答

1.     「吾輩は猫である。名前はまだない。」

2.     「吾輩は猫である。名前はまだ決まっていない。」

3.     「吾輩は猫である。名前はまだ与えられていない。」

4.     「吾輩は猫である。名前はまだ思いつかない。」

5.     「吾輩は猫である。名前はまだ無いが、のどかな日々を過ごしている。」

5番目だけ、出力が少し長いですが、最大トークン数を更に50増やしたにしては、あまり代わり映えがありません。

 

  • max_length=256の場合のChatGPTの回答

1.     「吾輩は猫である。名前はまだない。」

2.     「吾輩は猫である。名前はまだ決まっていない。」

3.     「吾輩は猫である。名前はまだ与えられていない。」

4.     「吾輩は猫である。名前はまだ無いが、そんなことは些細なことだ。」

5.     「吾輩は猫である。名前はまだなく、ただの一匹の猫に過ぎない。」

最大トークン数を指定しても、このように、出力結果にそれほど代わり映えはしませんでした。

 

以上、カスタム指示で、Max lengthを「max_lenght=xx」と指定することで、GPTの出力をある程度制御できることが分かりました。ただし、Max lengthの値を大きくすれば出力トークン数が増えるというものではなく、(多分)temperatureやTop Pパラメータの影響で、GPTがより創造的に長い文章を生成するようになった場合、あまり長くなりすぎないようにするのが、このパラメータの役割だと思われます。

 

2)Top Pパラメータについて

まず、ChatGPTにTop Pパラメータについて、使い方を説明してもらいましょう。

私#3

GPTの出力を制御する「Top P」パラメータについて教えてください。

ChatGPT#3

「Top P」パラメータ、または「nucleus sampling」とは、GPTなどの言語モデルがテキストを生成する際の確率分布から選択する単語の範囲を制御する手法です。値が低いほど、より予測可能なテキストを生成し、高いほど予期せぬ、創造的な出力が増えます。具体的には、予測された次の単語の確率が累積で指定した「Top P」の値に達するまでの単語を選択肢として保持し、その中からランダムに次の単語を選びます。これにより、生成されるテキストの多様性と意外性が調整されます。

私#4

「Top P」の最大値と最小値を教えてください

ChatGPT#4

「Top P」の最小値は0、最大値は1です。0に近い値ではほとんどの確率を占める最も可能性の高い次の単語のみが選択されます。一方、1に設定すると、確率分布に基づいてすべての可能な次の単語が選択肢になります。これにより、テキスト生成時のランダム性が最大になります。通常は0.1から0.9の範囲で調整されます。

私#5

例えばOpenAI APIを使ってGPT-4を呼び出す際の「Top P」パラメータは、「Top P」、「Top_P」、「Top_p」、「top_p」のどれを使えばよいでしょうか?

ChatGPT#5

OpenAI APIを使用する際、「Top P」パラメータはtop_pとして指定します。パラメータ名は小文字で、ワードはアンダースコア(_)で区切られています。

 

では、カスタム指示にTop Pパラメータを指定して、Maximum lengthの場合と同じプロンプトを与えて、出力内容を見てみましょう。

  • top_p=0.1の場合のChatGPTの回答

1.      「吾輩は猫である。名前はまだないが、この辺りの人間たちはよく”ミャオ太郎”と呼んでくれる。」

2.      「吾輩は猫である。名前はまだ決まっていないけれど、そこはかとなく漂う風流を感じている。」

3.      「吾輩は猫である。名前はまだ与えられていないが、毎日の日向ぼっこが何よりの楽しみだ。」

4.      「吾輩は猫である。名前はまだないけれど、黄昏時に鳴く我が声はこの界隈ではすでに有名だ。」

5.      「吾輩は猫である。名前はまだなくても、魚をこよなく愛す姿は周りのみんなに知られている。」

確かに、自然で予測可能な回答が並びました。

 

  • top_p=0.5の場合のChatGPTの回答

1.     「吾輩は猫である。名前はまだ決まっていない。」

2.     「吾輩は猫である。名前はまだないが、この辺の主と自負している。」

3.     「吾輩は猫である。名前はまだ無いが、散歩するのが日課だ。」

4.     「吾輩は猫である。名前はまだ与えられておらず、ただの野良と見なされがちだ。」

5.     「吾輩は猫である。名前はまだないけれど、この家の人々はよく”タマ”と呼ぶ。」

よくわかりませんが、少しは文章表現のバリエーションが広がっているでしょうか?

 

  • top_p=0.9の場合のChatGPTの回答

1.     吾輩は猫である。名前はまだないが、この辺の人間たちは呼ぶ時には「タマ」と呼んでいる。

2.     吾輩は猫である。名前はまだ決まっていないが、通りがかりの子供達からはしばしば「ミケ」と呼ばれている。

3.     吾輩は猫である。名前はまだ与えられていないが、自分ではこの黒い毛並みを見て「クロ」と思っている。

4.     吾輩は猫である。名前はまだないけれど、近くのおばあさんがいつも「シロちゃん」と声をかけてくれる。

5.     吾輩は猫である。名前はまだ定まっていないけれど、どうやら人々は「ふわり」という愛称で呼ぶらしい。

同時に生成した5種類の文章を比べると、確かにtop_p=0.5の場合より、生成された文章のバリエーションが広がっている感じがします。

 

  • top_p=0.0の場合のChatGPTの回答

1.     吾輩は猫である。名前はまだ決まっていない。

2.     吾輩は猫である。名前はまだ与えられていない。

3.     吾輩は猫である。名前はまだない。

4.     吾輩は猫である。名前はまだ思いつかない。

5.     吾輩は猫である。名前はまだ無いのだ。

Top Pが0だと生成される文章が画一的になるということで、これが一番わかりやすい例でした。

 

3)Stop sequencesパラメータについて

これも、まずChatGPTに、使い方を説明してもらいましょう。

 私#6

GPTの出力を制御する「Stop sequence」パラメータについて教えてください。

ChatGPT#6

「Stop sequence」とは、テキスト生成のプロセスで、モデルが特定のシーケンスや文字列に到達したときに出力を停止させるパラメータのことです。これは、例えば特定の文字や語句、またはパターンを生成終了のシグナルとして設定することができます。

例えば、ある特定のフォーマットやレイアウトで文章を生成してほしい場合、終わりを示す単語や記号を「Stop sequence」として設定することで、その単語や記号が生成された時点で文章の出力を終了させることができます。これにより、生成されるテキストの制御が可能になります。

具体的な使用例としては、自動的にメールを生成する際にメールの末尾に「よろしくお願いします。」というフレーズを「Stop sequence」として設定することで、そのフレーズが生成された時点でメール文の生成を終了させる、といった使い方が考えられます。

使用する際は、APIなどの設定で「Stop sequence」のパラメータを適切に設定する必要があります。ユーザーが自分の要望に応じたテキスト生成を行うための便利な機能の一つです。

私#7

例えばOpenAI APIを使ってGPT-4を呼び出す際の「Stop sequence」パラメータは、「Stop sequence」、「Stop_sequence」、「stop_sequence」のどれを使えばよいでしょうか?

ChatGPT#7

OpenAIのAPIを使用する際にテキスト生成を停止させるパラメータは stop として設定されています。stop_sequence というパラメータは存在しません。したがって、stop パラメータに停止させたいテキストのシーケンスを設定することで、そのシーケンスが生成された際に出力が停止されます。

 

では、カスタム指示にStop sequenceパラメータを指定して、Maximum lengthの場合と同じプロンプトを与えて、出力内容を見てみましょう。

 

  • stop=”\n” (改行を生成したら停止する)のChatGPTの回答

1.      吾輩は猫である。名前はまだないが、近所では「タマ」と呼ばれている。

2.      吾輩は猫である。名前はまだ決まっていないけれど、みんなからは愛情を込めて「チビ」と呼ばれている。

3.      吾輩は猫である。名前はまだ与えられていないが、この辺りではシロクロの毛並みから「パッチ」と呼ばれているんだ。

4.      吾輩は猫である。名前はまだ無いけれど、通りがかりの人々はその茶色い毛を見て「ココア」と呼んでくれる。

5.      吾輩は猫である。名前はまだないが、ここに来るたびに餌をくれる人が「ミケ」と呼んでくれるので、それが僕の名前になりつつある。

それぞれ、改行記号()を生成した時点で文章生成が停止しています。

 

  • stop=”呼ばれ” (「呼ばれ」を生成したら停止する)

1.      吾輩は猫である。名前はまだないが、この辺りの人間たちはよく「タマ」と呼ばれている気がする。

2.      吾輩は猫である。名前はまだ決まっていないけれど、ふとした時に「ミケ」と呼ばれることが多い。

3.      吾輩は猫である。名前はまだ無いが、小さな子供たちにはしばしば「ニャンコ」と呼ばれるのが心地よい。

4.      吾輩は猫である。名前はまだ与えられていないけれど、時々おばあちゃんに「シロ」と呼ばれるのが日課だ。

5.      吾輩は猫である。名前はまだないけど、近所の人たちにはたまに「クロ」と呼ばれることがあって、それが自分の名前のようだ。

「呼ばれ」までで文章生成が停止するのかと思っていましたが、「呼ばれ」を含む文章が完成した時点で文章生成が停止しています。

 

以上、今回は、カスタム指示にGPT制御パラメータを指定して、ChatGPTの生成する文章がどのように変化するかを確認しました。

最後に、以下のカスタム指示とプロンプトに従って、GPT-4(Defaultオプション)で生成された文章をご覧ください。

 

 私#8

次の未完成な文を完成させる5種類の文字列を生成して、日本語で200文字以上の文章を完成させてください。「吾輩は猫である。名前はまだ」

ChatGPT#8

  1. 「吾輩は猫である。名前はまだ無いが、その必要も感じない自由を謳歌している。毎朝目を覚ますと、まずは日差しの温もりを全身に感じながら、長いあくびを一つ。その後はのんびりと屋根の上を散歩し、街の様子を眺める。夕方には市場で魚の匂いを追いかけ、夜は月明かりの下、星を数えながら夜風に思いを馳せる。そんな日々の中で、いつかふとした瞬間に、自分だけの名前が心に浮かぶのだろうと期待している。」
  2. 「吾輩は猫である。名前はまだ決まっていないが、この街の小さな伝説となるべく日々を過ごしている。狭い路地を駆け巡り、古い家の軒下を自由に探検し、昼間は子供たちと追いかけっこをして遊ぶ。夜には温かい石畳に身を横たえ、遠くから聞こえる海の音を聞きながら、星空を眺める。こうして多くの人々との出会いを重ねる中で、いつしか「名前のない猫」として街の人々に愛される存在になっていく。そして、その愛が僕の真の名前となる。」
  3. 「吾輩は猫である。名前はまだつけてもらっていないが、毎日が小さな発見と冒険で満ちている。鮮やかな花々の間を縫うように歩き、時には高い木の上から世界を見下ろし、新しい視点を得る。人々の笑顔、季節の移ろい、温もりある日差し、冷たい雨粒、それら全てが僕の心に深く刻まれていく。この世界との対話の中で、僕は僕自身を理解し、やがて自分だけの名前を知る日が来るのをじっと待っている。」
  4. 「吾輩は猫である。名前はまだ持っていないが、この小さな街で生きる全ての命が持つ独自の輝きを知っている。朝霧が晴れる時の静けさ、川面を渡る風の優しさ、そして夜空を彩る星々の輝き。僕はこれらを日々の友とし、静かな時の流れの中で自分らしさを見つけている。人々は僕をただの猫と呼ぶかもしれないが、僕にはそれぞれの瞬間、それぞれの出会いが僕の名前を形作っていく。」
  5. 「吾輩は猫である。名前はまだないが、この多くの物語を紡ぐ街の片隅で、名前よりも大切なものを見つけている。季節の風を感じ、昼下がりには子どもたちの遊ぶ声に耳を傾け、夜には古い街灯の下で出会う他の野良猫たちと静かに語り合う。僕の日常は、そんな小さな幸せで満たされていて、そのどれもが僕にとっては名前以上の意味を持っている。やがて僕の物語が誰かの心に残る時、その人が僕に名前を与える。それまで僕は、ただの幸せな猫でいい。」

 

本日は以上です。

 

終わり