ChatGPTにテキスト生成のチューニング項目を聞いてみた　〜ChatGPTのGeneration conditions〜

![IMG_1432.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/3f57fcd2-6ab5-4f90-6f5a-6751443553c7.jpeg)
2023/05/05:Conceptとtagsの違いに関する記事を修正

# はじめに

ChatGPTは人工知能の会話エージェント。
単刀直入に「○○について教えて」という内容なら迷うことなく尋ねるだけですが、**ChatGPTにすこしレベルの高いテキストを生成してもらいたい！って場合は、入力条件やテキスト生成の内容をうまく設計しないといけない**らしい。
この設計をプロンプトデザインと呼ぶようですが、セオリーがあるようなないようなところがあるので「こんな指示でChatGPTに伝わっているだろうか」思うことが多い今日この頃。。。

そんなある日、プロンプトに Tags: や Concept: といったコンディションを反映されてる方がいるなと気づき、これらを知っておけばちょっとはマシな指示を作ることができるようになるかも！？ということで、ChatGPTに聞いてみることにしました。

# ChatGPTに指示できること

まず、ChatGPTに指示できることの確認です。ChatGPTに「どんな指示ができるの？」という投げかけた返答を見てみましょう。

- **質問をする：** ChatGPTに興味深いトピックや質問を投げかけることができます。ChatGPTは、多くの分野について知識を持っており、可能な限り正確な答えを提供しようと努めます。

- **情報を要求する：** ChatGPTに特定のトピックに関する情報を要求することができます。ChatGPTは、オンラインで入手可能な情報源から情報を引き出し、提供することができます。

- **意見を尋ねる：** ChatGPTに、あなたが関心を持っているトピックについての意見を尋ねることができます。ChatGPTは、論理的な推論や経験から意見を提供し、あなたの視点を拡張することができます。

- **相談する：** ChatGPTに、人生の問題や課題について相談することができます。ChatGPTは、より広い視点からアドバイスや支援を提供し、あなたがよりよい決断をするのに役立てることができます。

- **会話を楽しむ：** ChatGPTは、シンプルなおしゃべりから、知的な会話まで、幅広い会話を楽しむことができます。ChatGPTは、あなたが投げかけたトピックに関連する興味深いトピックを提供し、あなたと楽しく会話することができます。

どのようにすれば、これらの回答の質を高めることができるでしょう？ChatGPTには、回答の質をチューニングする項目があるようなので、いろいろ尋ねてみました。

# テキスト生成条件・パラメータ＝Generation conditionsとは？

上記の質問・相談・会話いずれの場合も、ChatGPTに思いつくまま投げかければ返答してくれますが、すこし込み入ったことを尋ねる時は条件を明確にしたほうがいいですね。どんな条件があるのかな？とChatGPTに尋ねると、Generation conditionsとかGeneration parameters というキーワードが出てきました。

Generation conditionsは、テキストのトピックやコンテキスト、文脈などの生成条件。
Generation parametersは、テキストの長さ、語彙の種類、温度、特定の単語の出現頻度などのパラメーターということらしい。なるほど🧐

※ この記事では、ChatGPTに与えるテキスト生成条件・パラメータ＝Generation conditions に統一しています。ChatGPTも混同してる感じでしたので😅。

![IMG_1434.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/a7cd69ec-d65f-1060-cd9c-0117d699288b.jpeg)

# Generation conditionsにはどんなものがある？

次に、Generation conditions にはどんなものがあるのかをChatGPTに聞いてみました。たくさんあり、ビックリ🫢です。（この記事で紹介するのは代表的なものです）

すべて把握しないとできないというものではありませんので、「あぁ、こんなのがあるのか」と、まずは眺めるというスタンスでよいと思います。

## Generation conditions

**Prompt（プロンプト）:** Promptは、ChatGPTに話題や質問を提供するための短い文章です。ChatGPTに与える「入力」のことです。ChatGPTに生成させたい文のコンテキストを提供しますので、「今日の天気は？」と入力すると、ChatGPTは「晴れです」「雨です」「曇りです」など、天気に関する文を生成することができます。例えば、以下のようなPromptを与えた場合、ChatGPTは以下のような文を生成します。

>**Prompt: 今日はクリスマスイブです。私は友人たちと一緒に過ごすことにしました。**

>ChatGPTの生成文:
>- 友人たちと一緒にクリスマスパーティーをすることにしました。
>- クリスマスプレゼントを買いに行こうと思います。
>- 夕食は何を作ろうか迷っています。

　


**Concept（コンセプト）：** Concept（コンセプト）は、プロンプトの生成するテキストの基本的なアイデアやトピックを示すキーワードやフレーズのことです。コンセプトを指定することで、モデルが生成するテキストの方向性を制御することができます。
例えば、あるプロンプトに対して「Concept：旅行計画」というコンセプトを指定すると、モデルはそのプロンプトに関する旅行計画に関するテキストを生成するようになります。
また、「Concept：感謝の気持ち」というように、より抽象的なコンセプトを指定することもできます。コンセプトは、プロンプトの中に「Concept：」という形式で追加されます。例えば、「プロンプト：クリスマスプレゼントに何を買おうか迷っています。Concept：クリスマスプレゼントのアイデア」というように、プロンプトとコンセプトを同時に指定することができます。

また、Conceptは、複数の要素を指定することもできます。例えば、Promptをプロダクトの市場情報に設定し、Conceptにはプロンプトの複数の特徴や要素を設定しておくといったことができます。

ある新しいヘルスケア製品についてのプロンプトがあった場合、Conceptには以下のような複数の要素を設定することができます。

>Concept:
>- 自然な成分による優れた効果独自の技術による高い品質
>- ユーザーの利便性を考慮した簡単な使用方法
>- コストパフォーマンスに優れた価格設定

Conceptを決定する際には、ターゲットユーザーが関心を持つトピックやテーマを把握しておくことが重要ということになります。上記の例のようにすることで、プロダクトの特徴や優位性を強調し、市場ニーズに合わせたメッセージングを作成することができるからです。ターゲットユーザーが興味を持つトピックを把握し、指示に反映することで、より有益で魅力的な文章を生成することができます。

なお、Concept は Presence penaltyとともに使用することができ、Presence penaltyを使うことで、特定のコンセプトに関連するフレーズを回避することができます。このようなGeneration conditionsの組み合わせは、次項で紹介したいと思います。
　


**Tags（タグ）:** Tags（タグ）は、プロンプトに関連する追加情報を提供するために使用されるキーワードやラベルのことです。タグをプロンプトに追加することで、モデルがより正確な応答を生成することができます。
例えば、あるプロンプトに対して「タグ：英語、翻訳」というタグを追加すると、モデルはそのプロンプトに関する英語のテキストを生成するようになり、必要に応じて翻訳を行うことができます。また、タグを使用することで、特定のトピックや文脈に関する生成を促すこともできます。
例えば、あるプロンプトに対して「タグ：科学、天文学」というタグを追加すると、モデルはそのプロンプトに関する科学や天文学に関するテキストをより適切に生成するようになります。タグは、プロンプトの中に「タグ：」という形式で追加されます。
例えば、「プロンプト：今夜の夕食に何を作ろうか迷っています。タグ：料理、レシピ、食材」というように、プロンプトとタグを同時に指定することができます。
　

**Temperature（温度）：** Temperatureは、ChatGPTが生成するテキストの多様性を調整するためのパラメータです。Temperatureを低く設定すると、ChatGPTが生成するテキストはより予測可能で、正確になります。逆に、Temperatureを高く設定すると、ChatGPTがより多様な回答を生成するようになりますが、正確性が低下する可能性があります。
Temperatureのデフォルト値は0.7です。Temperatureが高い場合、生成されたテキストはより多様な結果になりますが、Temperatureが低い場合、より予測可能な結果になります。値が高い場合、より創造的で意外な文章が生成される可能性があります。

>**Prompt: 「人生の意味は何ですか？」**
>
>**temperature=0.1:** 「人生の意味は、幸福で充実した存在を生きることです。」
**temperature=0.5:** 「人生の意味は主観的で、人によって異なりますが、根本的には存在意義や充足感を見出すことが重要です。」
**temperature=1.0:** 「人生の意味は複雑で多面的な概念であり、簡単に定義することはできませんが、幸福や充足感、個人的成長などに関連することが多いです。」
**temperature=1.5:** 「人生には固有の意味や目的はなく、それぞれの個人が自分自身で意味を作り出し、自分なりの道を見つけることが求められます。」
**temperature=2.0:** 「人生の意味は、哲学的な問いであり、何世紀もの間議論されてきました。生き残りと繁殖をするためであると考える人もいれば、知識や理解を追求することであると主張する人もいます。」


　
**Best of ：** Best ofは、生成された文章の中から特定の条件を満たしたものを選び出すための指示です。例えば、生成された文章の中で最も面白いものや、最も的確なものを選び出すことができます。このような選別は、生成された文章の品質を向上させるために重要な役割を果たします。（生成されたテキストに必ず含めるべき重要な情報やアイデア。）

　
**Title：** Titleは、生成された文のタイトルを指定することができます。タイトルは、読者がその文を読む前に、どのような内容かを理解するために役立ちます。例えば、以下のようなPromptに対して、Titleを「クリスマスイブの過ごし方」と指定した場合、ChatGPTが生成する文のタイトルは「クリスマスイブの過ごし方」となります。

>Prompt: 今日はクリスマスイブです。私は友人たちと一緒に過ごすことにしました。Title: クリスマスイブの過ごし方

>ChatGPTの生成文:「クリスマスイブの過ごし方」と題して、私は友人たちと一緒にクリスマスパーティーをすることにしました。彼らと一緒に夕食を作り、ケーキを食べて、プレゼントを交換しました。楽しい時間を過ごすことができました。
　


**Length（長さ）：** ChatGPTが生成するテキストの長さを制御するパラメータです。長さは、生成されるテキストの最大トークン数で指定されます。

　
**Top-p（確率の合計を上限に含めるトークンを使用するかどうか）：** トップpは、生成された単語の確率分布を制御するためのパラメータです。このパラメータは、ChatGPTが確率の合計を上限に含めるトークンを使用するかどうかを制御します。上限を含める場合、ChatGPTは確率の合計が上限を超えないトークンの中からランダムに選択し、生成されるテキストの多様性を増加させます。



**Top-k（上位k個のトークンを使用するかどうか）：** このパラメータは、ChatGPTが上位k個のトークンを使用するかどうかを制御します。上位k個のトークンを使用する場合、ChatGPTは確率の高いトークンの中からランダムに選択し、生成されるテキストの多様性を増加させます。



**Max length（最大長）：** ChatGPTが生成するテキストの最大トークン数を指定します。このパラメータは、生成されたテキストの長さを制御するために使用されます。このパラメーターを設定することにより、生成されるテキストの長さを制御できますので、長すぎる文章を生成することを防ぐことができます。



**min_length（最小長）：** ChatGPTが生成するテキストの最小トークン数を指定します。このパラメータは、生成されたテキストの長さを制御するために使用されます。



**Presence penalty（存在ペナルティ）：** Presence penaltyは、生成されたテキストに特定の単語やフレーズが存在することを抑制するために使用されるパラメータのことです。存在ペナルティを調整することで、モデルが特定のトピックや表現を避けるようになります。
例えば、存在ペナルティを設定すると、生成されたテキストに特定の単語やフレーズがある場合、それに対してペナルティが課せられます。このようにすることで、特定のトピックや表現を回避し、より多様なテキストを生成するようになります。存在ペナルティは、通常、生成されたテキスト中で特定の単語やフレーズが出現するたびに増加する値で設定されます。存在ペナルティを高く設定すると、モデルは特定の単語やフレーズを完全に回避し、より多様なテキストを生成するようになりますが、同時に生成されるテキストの流暢さが低下する可能性があります。
存在ペナルティは、プロンプトの中で「presence_penalty:」というパラメータを使用して設定することができます。
存在ペナルティは、通常、0から1の範囲で設定されます。存在ペナルティを調整することで、生成されるテキストの多様性と流暢さをバランス良く調整することができます。



**Stop sequence（ストップシーケンス）：** Stop sequenceとは、テキスト生成の際に、生成を停止するためのシーケンスのことです。ストップシーケンスを設定することにより、モデルが生成するテキストの長さを制限することができます。
例えば、ストップシーケンスを「。」に設定すると、モデルが文章を生成し続け、最初の「。」が現れたところで自動的に生成を停止します。同様に、ストップシーケンスを「！」や「？」に設定することもできます。ストップシーケンスを設定することで、生成されるテキストの長さを制限し、望む長さのテキストを得ることができます。
ストップシーケンスは、プロンプトの中で「stop_sequence:」というパラメータを使用して設定することができます。例えば、「stop_sequence: 。」と設定すると、モデルは文章生成を最初に「。」が現れたところで停止します。生成されるテキストに含めたくない特定の単語やフレーズを指定します。Stop sequenceを指定することにより、生成されるテキストに不適切な内容が含まれる可能性を低減できます。
　


**Frequency penalty（頻度ペナルティ）：** Frequency penaltyとは、生成されたテキストの中で、特定の単語やフレーズが繰り返されることを抑制するために使用されるパラメータのことです。このパラメータを調整することで、モデルが同じ単語やフレーズを繰り返し使わず、より多様なテキストを生成するようになります。
例えば、頻度ペナルティを0.5に設定すると、同じ単語やフレーズが生成される回数が半減し、より多様なテキストが生成されるようになります。頻度ペナルティを高く設定すると、より多様性が増し、単語の繰り返しを抑制することができますが、同時に生成されるテキストの流暢さが低下する可能性があります。
一般的には、頻度ペナルティは0から1の範囲で設定されます。頻度ペナルティを調整することで、生成されるテキストの多様性と流暢さをバランス良く調整することができます。
※ Presence penaltyとどう使い分けるかは、次項で説明します。



**Length penalty：** Length penaltyが小さい場合、生成されたテキストの長さが長くなる傾向があり、大きい場合は短くなる傾向があります。具体的には、Length penaltyが1.0より小さい場合、生成されたテキストの長さが長くなり、1.0より大きい場合は短くなります。例えば、Length penaltyを0.8に設定すると、より長い文章が生成されやすくなります。一方、Length penaltyを1.2に設定すると、より短い文章が生成されやすくなります。Length penaltyの設定によって、生成される文章の長さが変化するため、応用によっては適切な値を設定する必要があります。

Promptが「ChatGPTってなんですか？」の場合にLength penaltyが0.5と2.0の場合に生成される文章を比較してみます。

Length penaltyが0.5の場合： 

>ChatGPTは、オープンソースの自然言語処理技術の一種であり、大量のテキストを学習して、文書生成、質問応答、文章の意図理解、言語翻訳などのタスクを実行できるAIの一種です。ChatGPTは、言語モデルの一種であり、事前学習を行うことで、様々なタスクに適応できる柔軟性を持っています。

Length penaltyが2.0の場合

>ChatGPTは自然言語処理技術の一つです。


　


**No repeat n-grams：** ChatGPTに特定の単語やフレーズを繰り返し生成しないように指示するパラメーター。このパラメーターは、生成されるテキスト内で重複するn-gram（n個の単語が並んだ単位）を制御します。
No repeat n-gramsを設定することにより、生成されるテキストに重複したフレーズが含まれる可能性を低減できます。
例： no_repeat_ngrams=True とすることで、2つのn-gramが連続して出現しないようにすることができる。


## ちょっとマニアックなGeneration conditions
|condition item|内容  |
|---|---|
|**do_sample（サンプリングを行うかどうか）：**  |このパラメータは、ChatGPTがサンプリングを行うかどうかを制御します。サンプリングを行う場合、ChatGPTは確率的な手法でトークンを選択し、生成されるテキストの多様性を増加させます。サンプリングを行わない場合、ChatGPTは確率的な手法を使用せず、常に最も確率の高いトークンを選択します。  |
|**verbose（冗長モード）：** |このパラメータは、ChatGPTが生成を行う際に冗長な出力を行うかどうかを制御します。verboseがTrueの場合、ChatGPTは生成の進行状況を詳細に出力します。verboseがFalseの場合、ChatGPTは生成の進行状況を簡潔に出力します。|
|**return_full_text（全文を返すかどうか）：**|このパラメータは、ChatGPTが生成したテキストを全文返すか、あるいは最後の文のみを返すかを制御します。return_full_textがTrueの場合、ChatGPTは生成した全文を返します。return_full_textがFalseの場合、ChatGPTは最後の文のみを返します。|
|**is_training（学習を行うかどうか）：**  |このパラメータは、ChatGPTが学習を行うかどうかを制御します。is_trainingがTrueの場合、ChatGPTは学習を行います。is_trainingがFalseの場合、ChatGPTは学習を行いません。  |
|**use_cache（キャッシュを使用するかどうか）：**  |このパラメータは、ChatGPTがキャッシュを使用するかどうかを制御します。use_cacheがTrueの場合、ChatGPTは計算結果をキャッシュに保存し、後で再利用します。use_cacheがFalseの場合、ChatGPTは計算結果をキャッシュに保存しません。 |


***


Generation conditionsは、ChatGPTがテキストを生成する際に考慮する条件や要件です。これらの条件には、生成されたテキストの特定の部分を強制的に指定するものや、生成されたテキストに不要な情報含めないようにするものがあります。
適切なGeneration conditionsを使用することで、ChatGPTをより効果的に活用し、自然な流れのあるテキストを生成することができます。

たとえば、Presence penaltyを設定すると、ChatGPTは、同じ単語を繰り返し使用するのを避け流ようになります。
Length penaltyを設定すると、ChatGPTがより簡潔な文を生成するようになります。といったように、これらのパラメーターを適切に設定することで、ChatGPTによる文の生成をより効果的かつ自然なものにすることができます。

次にGeneration conditionsを組み合わせた具体例を見てみましょう。
![IMG_1433.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/40f3e15b-21e7-e7d6-e69f-769ebff30598.jpeg)



# Generation conditionsを組み合わせてみよう

## 組み合わせサンプル1

以下は、Prompt、Concept、Temperature、Max length、Length penalty、No repeat n-gramsを使用したプロンプトサンプルです。

>Prompt: 最近読んだ小説の感想を教えてください。
>Concept: 小説の感想 
>Temperature: 0.7 
>Max length:150 
>Length penalty: 0.8 
>No repeat n-grams: True

このプロンプトは、最近読んだ小説の感想を生成するためのものです。Conceptとして「小説の感想」が指定されており、それに基づいて生成されたテキストが期待されます。
Temperatureは0.7に設定されており、生成されたテキストが比較的自然なものになるように、一定のランダム性が加えられます。
Max lengthは150に設定されており、生成されたテキストが150文字以内に収まるように制限されます。
Length penaltyは0.8に設定されており、生成されたテキストが長くなりすぎないように、長さに応じたペナルティが課せられます。
No repeat n-gramsはTrueに設定されており、生成されたテキストに同じフレーズが繰り返し現れないようにします。

例えば、以下のようなテキストが生成される可能性があります。

>最近読んだ小説の感想ですが、とても感動しました。主人公が自分の夢を追いかけて、苦難を乗り越える姿が素晴らしかったです。また、登場人物たちの心理描写がとてもリアルで、彼らの人間関係にも深みがあって、物語に引き込まれました。ただ、結末が少し唐突だったので、もう少し丁寧な描写があれば良かったかなと感じました。全体的には、素晴らしい作品だと思います。

Temperature、Max length、Length penalty、No repeat n-gramsの値を変更すると、生成されるテキストはどのようになるでしょう？以下に、各パラメータを変更した場合の例を示します。

**Temperatureを0.2に設定した場合**

>最近読んだ小説の感想ですが、とても深いと感じました。主人公の苦悩や葛藤が繊細に描かれていて、物語に引き込まれました。また、筆者の文体がとても美しく、読んでいて心地よかったです。ただ、結末が少し予想通りでしたので、もう少し意外性があると面白かったかなと感じました。全体的には、非常に高いクオリティの小説だと思います。

**Max lengthを250に設定した場合**

>最近読んだ小説の感想を述べさせていただきます。この小説は、主人公が大きな壁にぶつかって苦悩し、最後にその壁を乗り越えるまでの物語です。登場人物たちの感情描写がとても細かく描かれており、読んでいて感情移入できました。筆者が細かい描写に力を入れているため、情景が鮮明に浮かび上がってくる感覚がありました。ただ、個人的にはストーリーの進み方に少し緩急があるように感じました。全体的には、素晴らしい作品だと思います。

**Length penaltyを1.0に設定した場合**

>最近読んだ小説の感想ですが、とても面白い作品だと思います。主人公が人生の岐路に立ち、苦悩しながらも自分の道を見つけ出すまでの物語です。筆者が緻密な描写に力を入れているため、物語の世界観が非常にリアルに描かれています。ただ、ストーリーの展開が少し遅かったので、もう少しペースが速くなるとよかったかなと感じました。全体的には、素晴らしい作品だと思います。

**No repeat n-gramsをFalseに設定した場合**

>最近読んだ小説の感想ですが、とても深い作品だと感じました。主人公が自分自身と向き合い、自分の人生を見つけ出すまでの物語です。

## 組み合わせサンプル2

>Concept: 家庭料理のアイデア 
Tags: 料理、食事、家庭料理 
Best of: よく作る、おいしい 
Temperature: 0.7 
Max length: 100 
Length penalty: 0.8 
No repeat n-grams: True 
Presence penalty: 0.5 
Stop sequence: "\n\n"
Prompt: もうすぐ週末ですが、何か美味しい家庭料理を作りたいと思っています。よく作る、おいしい料理のアイデアを教えてください。

このプロンプトでは、「家庭料理のアイデア」というConceptに加えて、「料理」「食事」「家庭料理」というタグが使用され、Best of:には「よく作る」「おいしい」というキーワードが指定されています。また、Temperatureは0.7、Max lengthは100、Length penaltyは0.8、Presence penaltyは0.5、No repeat n-gramsはTrueに設定されています。

このプロンプトに対する例の回答は、以下のようなものです。

>オムライスはどうですか？とろとろの卵と、ケチャップの甘酸っぱいソースが絶妙です。よく作る家庭料理の一つで、子供から大人まで人気です。

>焼きそばがおすすめです。野菜と肉をたっぷりと入れて、ソースと一緒に炒めたものです。大人も子供も好きな味で、よく作る家庭料理の一つです。

>豚肉の生姜焼きはいかがでしょうか？ジューシーな肉に、生姜の香りが広がって美味しいです。ご飯に合わせると、食欲が増します。よく作る家庭料理の一つで、おいしいですよ。

Temperature、Max length、Length penalty、No repeat n-gramsを変更すると、回答の内容や品質に影響を与える可能性があります。
例えば、Temperatureを高くするとより冒険的な回答が生成される可能性がありますが、不自然な回答が生成される可能性もあります。
Max lengthを増やすと、より長い回答が生成される可能性がありますが、不必要な情報が含まれる可能性があります。
Length penaltyを変更すると、より短いまたはより長い回答が生成される可能性があります。
No repeat n-gramsをFalseに設定すると、同じ単語やフレーズが連続して出現することが許可されるため、回答がより重複している可能性があります。例えば、同じ言葉を繰り返したり、同じ文を繰り返したりすることがあります。しかし、Falseに設定することでより自然な文章が生成される場合もあります。

## 組み合わせサンプル3

ConceptとTags、Presence penaltyを含んだプロンプトの例です。

>Prompt: 最近、スマートフォンのバッテリー持続時間が短く感じます。バッテリー持続時間を延ばすためのコツやアイデアを教えてください。 Concept: スマートフォンのバッテリー持続時間を延ばす方法 
Tags: テクノロジー, スマートフォン, バッテリー, 電池 
Presence penalty: 「充電器を使用する」という回答を避ける

このプロンプトでは、スマートフォンのバッテリー持続時間を延ばす方法に関するアイデアを求める内容を表しています。
また、テクノロジー、スマートフォン、バッテリー、電池に関するタグを追加し、生成されるテキストにおいてそれらのキーワードが含まれるようにします。さらに、Presence penaltyを使用し、「充電器を使用する」という回答を避けるように指示しています。

以下は、上記のプロンプトで生成されたテキストの例です。

>スマートフォンのバッテリー持続時間を延ばす方法には、以下のようなコツがあります。まず、明るさを下げたり、無駄な通知をオフにするなど、バッテリーを節約する設定を行うことが大切です。さらに、Wi-FiやBluetoothを切ったり、位置情報サービスを制限することで、バッテリーの持続時間を延ばすことができます。また、バッテリーセーバーアプリを使用することも有効です。ただし、充電器を使用することは避けるようにしてください。充電器を使用すると、バッテリーの寿命が縮まってしまうため、バッテリーを長持ちさせるためには、定期的な充電と、上記のような節電設定が必要です。

このテキストでは、スマートフォンのバッテリー持続時間を延ばすための具体的なアイデアがいくつか示されています。また、タグとして指定した「テクノロジー」「スマートフォン」「バッテリー」「電池」が含まれていることがわかります。
さらに、Presence penaltyを使用して、「充電器を使用する」という回答が回避されていることも確認できます。

## 変数も設定してみよう

一般的には、変数が一つの水準しかない場合は[]を、複数の水準がある場合は{}を使用することが推奨されます。

例えば、以下のような場合、変数に[]を使用することが適切です。

>Prompt: "あなたが今日食べた[食べ物]は何でしたか？"変数: 食べ物 = "寿司"

>生成されるテキスト: "あなたが今日食べた寿司は何でしたか？"

一方、以下のような場合、変数に{}を使用することが適切です。

>Prompt: "あなたが好きな[色]は何ですか？以下から選んでください：{赤,青,黄色,緑}"変数: 色 = "青"

>生成されるテキスト: "あなたが好きな青は何ですか？以下から選んでください：赤、青、黄色、緑"

変数に{}を使用することで、複数の選択肢を提示し、ユーザーに選択させることができます。ただし、実際には、[]を使って複数の水準を与えても、水準がひとつの変数で{}を使ってもChatGPTは認識してくれています。
変数の使い方の基本はこうなんだと理解しておけば、第3者のプロンプトをみた時に意図を素直に理解できるでしょう。

## TagsとConceptの違いは？

Concept: は、ある商品や技術分野に関する、抽象的な概念や関連する単語・キーワードなどを示す言葉のことを指します。たとえば、ある商品に対してその特徴や機能、使用方法などを説明する際に、その商品に関連するConceptを列挙して説明することができます。

Tags: は、ある商品や技術分野に関連する、具体的な特徴や属性、用途などを示す言葉のことを指します。たとえば、ある商品のカラーや形状、用途や機能、素材などを示すために、Tagsを用いて説明することができます。

Conceptはより抽象的な概念を示し、Tagsはより具体的な属性を示す点が異なります。例えば、「スマートフォン」という商品のConceptには、「モバイルデバイス」「通信機能」「アプリケーション」といった抽象的な概念が含まれます。一方で、「スマートフォン」のTagsには、「ディスプレイサイズ」「カメラ性能」「バッテリー寿命」といった具体的な属性が含まれます。

ChatGPTで、商品「ビデオドアフォン」に関するテキストを生成し、指定したタグ、アプリケーションを含めたテキストを生成するという場合、以下のような指示もありです。
※私が 元々知りたかったのは実はコレだけ。ChatGPTとやり取りしてたら色んなのがいろいろでできて。。。💦

>**Prompt: "ビデオドアフォンに関するテキストを生成してください。"**
>
>Concepts:
> - Product: ビデオドアフォン
> - Tags:[壁取付け,カメラ,屋外使用,スマホとの連携,既存のドアフォンとの取付互換]
> - Application:[玄関先のセキュリティを強化するために使用する,家庭内の訪問者を確認するために使用する,老人や障害者の安全確保のために使用する]

変数にしておくと、追加や削除が簡単ですね。

## PromptとConceptの違いは？

PromptとConceptは、どちらもGPTなどの言語モデルを使用する際に利用される用語ですが、その役割や意味合いには違いがあります。

Promptは、言語モデルに対して入力するテキストのことを指します。
Promptは、入力されたテキストを基に言語モデルが文章を生成するための出発点となります。Promptには、文章の要約、翻訳、質問応答、文書生成など、多様な目的に応じた形式が存在します。

一方、Conceptは、Promptに含まれるべき情報やキーワードのことを指します。Conceptは、Promptに含まれるべき情報を整理し、明確に定義することで、言語モデルによる文章生成の精度を向上させることができます。

例えば、Promptが「夏におすすめのおしゃれなスポットを教えてください」とする場合、Conceptは「夏、おしゃれ、スポット」といったキーワードを含みます。このConceptを明確に定義することで、言語モデルがより正確な文章を生成することが期待できます。

つまり、Promptは言語モデルに入力する文章を指し、ConceptはそのPromptに含まれるべき情報やキーワードを指します。

## Presence penaltyとFrequency penaltyはどう使い分ける？

Presence penaltyとFrequency penaltyは、生成された文章がより自然であるようにするための技術です。

Presence penaltyは、生成された文章に特定の単語やフレーズがあまり頻繁に出現しないようにすることを目的としています。これにより、文章がより多様で自然な印象を与えることができます。
例えば、文章生成において特定の単語やフレーズが繰り返し出現する傾向がある場合、Presence penaltyを導入することで、より多様な表現にすることができます。

一方、Frequency penaltyは、生成された文章に特定の単語やフレーズが適切な頻度で出現するように制御することを目的としています。これにより、文章がより自然であると同時に、意図した意味を伝えることができます。
例えば、文章生成において特定の単語やフレーズが頻繁に出現する必要がある場合、Frequency penaltyを導入することで、文章が自然でありながら目的の意味を正確に表現することができます。

これらのペナルティは、生成された文章の品質を改善するために使用されるため、どちらを使うかはタスクやデータセットによって異なります。
Presence penaltyは、より多様な表現が必要なタスクに適している場合があります。一方、Frequency penaltyは、特定の単語やフレーズが頻繁に出現する必要があるタスクに適している場合があります。

# Generation conditionsの指示順序について

一般的に、指示の順序は以下のようになります。

1. Titleの指示
2. ジャンルやトピックの指定
3. 生成される文章の形式の指定（文章の長さ、形式、語彙）
4. プロンプトの指定（具体的な文章や質問）
5. オプションの指定（Best of、temperature、max_tokens、stop_sequenceなど）

## Prompt: のなかにプロンプト？！

以下のプロンプトを見てください。

>Prompt: "
Title: レシピジェネレーター 
ジャンル: 料理 
形式: リスト形式 
プロンプト: [食材]を使った簡単なレシピを教えてください。 
オプション: Best of 3, max_tokens=50"

このPromptは、AIモデルに料理のレシピを生成するよう指示しています。Titleの指示は、生成される文章のタイトルが「レシピジェネレーター」であることを示しています。そして、生成されるレシピの形式（リスト形式）、トピック（食材を使った簡単なレシピ）、そしてオプション（Best of 3、max_tokens=50）が指定されています。

Prompt: は、AIモデルに対して与えられる初めの指示や問いかけのことを指します。これは、AIモデルに何を生成して欲しいのかを明確に伝えるために使用されます。
一方、その後のプロンプト: は、AIモデルに与えられる具体的な文章や質問のことを指します。プロンプト: は、AIモデルにとって理解しやすく、より具体的な指示を提供します。プロンプト: には、Prompt: で与えられた指示に加えて、生成される文章の形式、トピック、オプションなどが含まれる場合があります。

また、Prompt: は、通常はダブルクォーテーション（""）で囲まれた文字列として指定されます。これによって、Prompt: として認識されます。シングルクォーテーション（''）やバッククォーテーション（``）が使われる場合もあります。

# 最後に

ChatGPTのGeneration conditions の種類や使い方を紹介しました。ChatGPTは優秀なので、うまく指示できてなくても咀嚼してくれることが多いと思います。
この記事の通りでないといけない！というものではなく、案外自由度は高く、実際はゆるいなぁという感じではありますが、ChatGPTがトンチンカンな返答をするときはGeneration conditionsをチェックしてみるとよいと思います。

また、この記事で取り上げたGeneration conditions をすべて使うということはないと思いますが、Generation conditions を知っておけば、回答の質の向上、先の応用、よりよいプロンプトデザインにつながると思います。