今日は「プロンプト」と「プロンプトエンジニアリング」について話そう。
むずかしいのはキライだから、一言で説明してー。
プロンプトは、ChatGPTへの入力のことで、プロンプトエンジニアリングはプロンプトの開発や最適化を行う技術だよ。
プロンプトとは、簡単に言うと、人がコンピューターやAIに対して与える指示や質問のことを指します。適切なプロンプトを与えることで、期待する結果や情報を得ることができます。
プロンプトが上達したらなにができるの?
こちらの質問に対して応答の精度を上げたり、算術計算をしたりできるよ。
それってChatGPTに入力するだけでしょ?わざわざ学ぶ必要はある?
ChatGPTは曖昧な入力だと曖昧な返事しか返してくれないから、何がしたいか明確に伝えるスキルが必要になるんだ。
なるほど。やってほしいことをバシッと伝えるんだね。
- ChatGPTの性能を最大限に引き出す
- 問題解決を効率化する
- ChatGPTと円滑に対話する
ChatGPTの力を引き出し、外部ツールとの組み合わせや新しい機能まで作れるように、一緒に学んでいこう!
しょうがないなぁ、やってみるよ。
この講座は、日本語訳Prompt Engineering Guide を教材としてプロンプトとプトンプトエンジニアリングについて解説する全6回の講義です。
本来プロンプトエンジニアリングはChatGPTに限らずAIへの入力全般に対するものですが、本記事はこれからChatGPTを使ってみたい読者を対象とするため、主にChatGPTのプロンプトについて解説しています。
LLM設定とは? Temperature と Top_p
それじゃ、LLMの設定について話すよ。「Temperature」と「Top_p」というパラメータについてだよ。
うげー!英語はムリです!帰りますね、ありがとうございましたー
待って待って!人によってここは読み飛ばしても構わないよ!APIを使いたい人だけ読んでね。
ここでは、LLM設定として Temperature と Top_P の設定について解説します。
APIを使いたい場合、この項目は重要となります。
対して、ChatGPTをWebの画面から触ってみたいだけでしたら、この項目はあらかじめ設定されていますので、覚える必要も入力が必要になるタイミングもありませんので安心して読み飛ばしてください。
APIとは、アプリやWebサービスが相互にやりとりする際に橋渡し役となる機能です。
例えば、GPT-3.5のAPIを使って LINEで会話できるようにしたり、音声出力のAPIを利用してChatGPTの出力を読み上げさせたりできます。
Webブラウザ上でChatGPTとの会話を楽しむ分には、APIは必要ありません。
Temperature:多様性とランダム性を制御
Temperatureは、結果がどれだけ確定的になるかを決めるパラメータで、Temperatureが低いほど、次に来る単語がより確率の高いものが選ばれることになるよ。
Temperature が低いとブナンな答え、高いと多様な答えが出力されると考えていい?
そうそう!教育に使うならTemperatureを低くして正確な回答を、物語や詩を書くならTemperatureを高くして答えをバラつかせるなどして使うよ。
ChatGPTにプロンプトが入力されると、過去のデータと統計的な関連性に基づいて、適切な回答や文章を生成します。
文章生成の際、予測される各単語の確率を計算し、条件に適合する単語を選択。この一連のプロセスを繰り返し、最終的な文章が出力されます。
スマホの予測変換がめちゃくちゃ優秀で、予測変換だけで文章が出来上がってしまうようなイメージです。
Temperatureは、生成される文章の多様性とランダム性を制御します。
値が高いほど(例えば2.0)、より多様で予測しづらい文章が生成され、逆に値が低いほど(例えば0.1)、より保守的で短い文章が生成されます。
デフォルト値は通常0.7で、これは適度なバリエーションを持った文章が生成されることを意味します。
Top_p;単語の候補範囲を制御
Top_pは、Temperatureと同様に、モデルが生成する回答がどれだけ確定的かを制御するパラメータで、核抽出法(nucleus sampling)という手法を使っているんだ。
やめてー!横文字で横文字を説明しないでー!
ごめんw 正確で事実に基づく回答を求める場合は、Top_pを低く設定することが推奨されると覚えてね。もっと多様な回答を得たい場合は、Top_pを高く設定するといいよ。
Nucleus Samplingとは、AI言語モデルの文章生成時に用いられるサンプリング手法の一つです。
確率分布に基づいて、次の単語を選択する際の候補範囲を制御します。
通常、言語モデルは確率分布を使用して、次に来る単語の候補を生成します。しかし、すべての単語を候補として選択すると、品質が低い文章が生成されることがあります。Nucleus Samplingは、この問題を解決するために開発されました。
Nucleus Samplingでは、確率分布に基づいて最も確率が高い単語群(nucleus)を抽出し、その中から次の単語をサンプリングします。パラメータTop-p(0から1の間の数値)で、どれだけ幅広い範囲の単語を候補とするかを制御します。Top-pが高いほど、より多様な単語が含まれ、逆に低いほど、候補範囲が狭まります。
Nucleus Samplingを使用すると、生成される文章の一貫性と品質が向上し、適度な多様性を保ちながら、ランダム性を抑えることができます。
Top-pは、ChatGPTが文章を作るときに、言葉を選ぶ範囲を決めるためのルールです。
Top-pが小さいと、ChatGPTは確率に基づき言葉を選ぶ範囲を狭めるため、似たような文を生成します。
対して、Top-p の値を大きくすれば言葉を選ぶ範囲が広がり、ChatGPTはいろいろな言葉を使って文章を生成し始めます。
Temperatureとの違いは、Top-pは言葉を選ぶ範囲を決めるルールで、Temperatureは選んだ言葉をどれくらい自由に組み合わせるかを決めるルール。両方をうまく使って、コンピュータが作る文章をちょうど良い感じにしましょう。
ふーん、TemperatureとTop_p、どっちを変えたらいいの?
どっちでもいいけれど、どちらか一方だけを変更することが推奨されているよ!
基本的なプロンプト
基本的なプロンプトでも、色々なことができるんだ。結果の質は、どれだけ情報を与えるかや、どれだけうまく作成されたプロンプトかによって変わるよ。
基本的なプロンプトって、どんなものなの?
モデルに伝える指示や質問、文脈、入力、例などの情報だよ。これらの要素を使って、モデルにより良い指示を出し、結果的により良い結果を得ることができるんだ。
まずは、ChatGPTにシンプルなプロンプトを入力してみましょう。
今日はありがとう
対話型の言語モデルであるChatGPTは「今日はありがとう」という単純な入力に対して、会話をするような出力を返します。
出力内容を調整するために、指示と文脈を追加してみましょう。
「今日はありがとう」と取引先に伝えるメールを生成して
メールの文章を作ってほしいという指示や、送り先は取引先であるという背景の文脈を伝えたため、出力の精度は高くなりました。
タスク実行の精度を高めるために最適なプロンプトを設計する。それが「プロンプトエンジニアリング」だよ。
基本となる2つのプロンプトをかんたんに解説します。
- Zero-shot prompting
- Few-shot prompting
今の段階で完ぺきに理解するのはむずかしいので「こういう方法があるんだね」程度でサラッとご確認ください。
Zero-shot prompting
Zero-shot prompting(ゼロショットプロンプティング)は、ChatGPTにいきなりタスクを解決させる方法です。
あなたの質問に対して、ChatGPTは事前に学習しているデータの中から答えを導き出します。
しりとりのルールを教えて
ゼロショットプロンプティングを上手く使うためには、ChatGPTが適切な答えを導き出せるようにするための工夫が必要です。
例えば、質問の文脈を明確にしたり、答えの形式を指定したりすれば、より正確な回答を得られます。
しりとりのルールを5歳児に説明してください。遊び方だけを簡潔に伝えます。出力はひらがなでお願いします。
しりとりのルール説明という命令、5歳児に遊び方だけを伝えたいという文脈、ひらがなでという出力の条件を指定して、期待する情報を引き出すことに成功しました。
新しいことを教えなくてもAIが答えを導き出せるのか!
プロンプトが上達すると、出力させたい情報に合わせて文脈や出力方法を指定できるようになるよ!
Few-shot prompting
Few-shot prompting(フューショットプロンプティング)は、ChatGPTにいくつかの例を与えて特定のタスクを解決させる方法です。
このアプローチでは、プロンプトの中にそのタスクの解決方法を示す例(ショット)を含めます。
ChatGPTは与えられた例からタスクのパターンを学び、新しい問題に対してもそのパターンを適用して答えを導き出します。
田中 = 名前
東京 = 地名
山田 = 名前
大阪 = 地名
坂本 = 名前
沖縄 = ?
大量のデータをカテゴリー分けしたり、コメントやレビューをポジティブとネガティブに振り分けたりできるよ!
人が判断しなくても、AIがパターンで考えてくれるってことか!
フューショットプロンプティングは、タスクのパターンをAIに効果的に伝えるために例を用いることで、より正確な回答を得るアプローチです。
In-context learningとは、命令や質問と一緒に文脈や情報をプロンプトで伝えるテクニックです。
Zero-shot prompting や Few-shot prompting と組み合わせて使います。
例えば、本記事のチキン君とナマケモノ君の会話は、Prompt Engineering Guide を利用した In-context learning で生成しました。
商品情報をインコンテクストにして、説明文を生成するなども可能ですよ!
Zero-shot prompting と Few-shot promptingの違いを簡単にまとめるね!
Zero-shot prompting | Few-shot prompting |
---|---|
事例なし 訓練データからの知識活用 未知タスク適用可 | 事例あり 事例でタスク理解を助ける 類似タスク適用可 |
タスクに合わせた使い分けが大事なんだね
プロンプトの4つの要素
プロンプトは4つの要素のいずれか、または組み合わせでできています!
- 命令:ChatGPTに実行してほしいタスク
- 文脈:タスクを依頼する背景となる情報
- 入力データ:タスクと一緒に入力する
- 出力指示:出力形式を指定する
それぞれ簡単にチェックしていきましょう!
命令:ChatGPTに実行してほしいタスク
ChatGPTに何をしてほしいのか、プロンプトでしっかり伝えましょう!
できることが多い分、何をしてほしいのかちゃんと伝えなければいけません!
- 要約:以下の文を要約して
- 翻訳:以下の文を日本語に翻訳して
- 並べ替える:締切が近い順に並べて
- 書く:セミナーのたたき台を書いて
ChatGPTに「これってできる?」と相談しながら、得意なタスクを見極めてみてください。
文脈:タスクを依頼する背景となる情報
タスクを依頼している理由や、出力情報の使い道、マネしてほしい言葉づかいなど追加情報となる文脈を伝えましょう。
文脈をきちんと説明できると、出力の精度がグッと上がりますよ!
- 使用目的:メールの本文として
- 対象者:小学生にもわかるように
- モノマネ:以下の文の言葉づかいをまねて
- ロール:専門家として
ChatGPTを使いこなすには、この文脈の入力が重要となります。ぜひいろいろな条件を伝えて試行錯誤してみてください。
入力データ:タスクと一緒に入力する
ChatGPTはある程度の長文なら処理できます。むしろ参考になるデータがある方が精度が上がるケースもあるほどです。
命令や文脈と組み合わせて使います!
- 要約してほしい文章
- 翻訳してほしい文章
- 続きを書いてほしい文章
- 参照してほしいデータ
「#」などを使って、命令とは別の入力データであることを伝えるとよいでしょう。
出力指示:出力形式を指定する
ChatGPTは、出力の形式や文字数を指定できます。
- 400文字程度で
- 表形式で
- ひらがなで
- 一言で
出力をなにかに使用したい場合は、そのまま使用できるように指示するといいですよ!
一つの情報から、400文字で作文を作ったり、一言でタイトルをつけたりもできます。
プロンプト設計を始める5つのポイント
プロンプト設計の初心者が意識するポイントを解説します。
- 簡単なタスクから始める
- 文脈を追加して調整する
- 出力ごとに入力を変える
- 条件は具体的に伝える
- 「すること」で指示する
意識して取り入れやすい順にご紹介しています。
簡単なタスクから始める
指示や文脈、入力データをガッツリ指定すると、プロンプトは長く複雑になります。
はじめのうちは、無理に長いプロンプトを使おうとせず、簡単なタスクから挑戦するべきです。
「要約して」「教えて」など、かんたんな指示で求める結果を得る経験を積むとよいでしょう。
ネットで公開されている、すごいプロンプトを使っちゃダメなの?
すごいプロンプトを知るよりも、失敗パターンをたくさん知る方が上達しやすいよ!
すごいプロンプトを見ると、それで十分な気がしてしまう気持ちは非常によくわかります。
ただ、そのすごいプロンプトは多くの失敗の末に作られた最終結果であることを忘れないでください。
ひとつずつ、小さなタスクから成功と失敗の経験を積むことをお勧めします。
文脈を追加して調整する
簡単なタスクをこなすのに慣れてきたら、文脈を追加して出力を調整してみましょう。
はじめのうちは言葉を入れ替えるだけでも構いません。「小学生に向けて」「10歳に向けて」「小学校の先生として」など似た意味を持つ言葉に置き換えるなど実験してみてください。
似た意味なのに出力が変わるの?
「先生として」とお願いすると「こんにちは!」と言いたがるとか、クセがわかってくるよ!
例えるならば、Google検索での「イヤホン おすすめ」と「イヤホン ランキング」で若干結果が違うと気づけるような、肌感覚が形成されていきます。
出力ごとに入力を変える
ChatGPTで行いたいタスクに応じて、入力を微調整するクセをつけましょう。
入力するプロンプトは具体的であるほど結果が良くなるからです。
万能なキーワードはありません。求めている出力に向けて、適切に入力を調整できるように試行錯誤してみてください。
「これさえあれば十分!」みたいなのがあれば楽なのにね。
そういう「このタスクならこのフォーマット」と使い分けできるのがプロンプトエンジニアリングでもあると思うよ!
具体的に説明するといっても、ChatGPTの入力文字数には制限もありますし、不要な情報を入れたがために出力の方向性がズレることもあります。
必要十分量を伝えるスキルが試されます。
条件は具体的に伝える
プロンプトでは、条件や指示は具体的に指定してください。
ChatGPTは、あいまいな指示に対しても返答してくれますが、あいまいな指示にはあいまいな返答をする可能性が高くなります。
誰に説明するのか、文量はどの程度か、具体的である後者の方がより安定した出力を期待できます。
「すること」で指示する
ChatGPTに指示を出す際は「しないこと」ではなく「すること」で指示してください。
その方が精度が良くなります。
「できない気がしないわけじゃなくもない」的なのは理解できないんだね。
ごめん、それはちょっと僕も理解できない。
ChatGPTは賢いので、否定語にもある程度対応してくれますが、より精度を高めるために注意すると良いでしょう。
プロンプトの例
最後に、いくつかプロンプトの例をご紹介します。
- テキストの要約
- 情報の抽出
- 質問
- テキストを分類
- 会話形式で出力
- コードを生成
- 推論
それぞれの例もご紹介します!
テキストの要約
要約はChatGPTが最も得意とするタスクのひとつです。
要約の指示と元の文章を入力しましょう。「一言で」「一文字で」といった無茶振りにも答えてくれます。
以下の文を1文に要約してください。
{ここに文を貼り付け}
すげー!URL読み込ませて要約させよーっと
ChatGPTはURLからページの中身は見れないよ。内容をでっち上げたりするから注意してね。
ChatGPTで要約をする際には、文章をそのままプロンプトに入力することをおすすめします。
情報の抽出
膨大なテキストの中から情報を探したい時も、ChatGPTが役立ちます。
これってページ内検索で十分なんじゃない?
ページ内検索では見落とす「仮想通貨」と「暗号資産」みたいな関連性の高いワードを拾ってくれるから便利だよ!
AIのキャラクターとして喋らせたい場合は、設定を入力して、質問に対してはそこから返答してもらうなども対応できます。
質問
ChatGPTに質問すると、学習済みデータや入力データから回答を探して答えてくれます。
学習データが足りない領域や、あいまいな質問などの原因で、ありもしない答えをでっちあげるハルシネーションには注意が必要です。
テキストを分類
プロンプトに入力したテキストを分類できるのも、便利な使い方のひとつです。
ユーザーの声などを人間が分類すると「これは、ポジディブか?ニュートラルか?」と迷いが生じますが、ChatGPTを使えば一瞬で振り分けてくれます。
自動的に振り分けてくれるのは便利だね!
キーワードに単調に反応しているのではなく、文脈も理解してくれるから超優秀だよ!
あいまいな情報を分類する際は、パターン認識してくれるChatGPTの機能が役立つでしょう。
会話形式で出力
会話の一部を提供して続きを考える、キャラクター設定をして会話を始めるなども、ChatGPTが得意とする作業です。
発言者の口調や性格を指定すると、それを演じて会話を続けてくれます。
理想の異性を演じてもらう人とか居るんだろうなぁ。
可能だけれど、ChatGPTだけだと長期記憶がないから、記憶喪失のパートナーみたいになるよ。
コードを生成
ChatGPTはプログラムのコードも生成できます。
細かい用件などを定義しなくても、とりあえず生成可能です。
プロンプトでプログラム言語や環境を指定すれば、それに応じたコードを生成してくれます。
すごい!これって動くの?
ちゃんと動くよ!プログラミングの勉強がしやすくなったよね!
推論
答えのわからない問題に対して、推論を進めて答えに近づくことも可能です。
ある程度の論理パズルなら、すぐに解いてしまいます。
顧客の購買行動の分析や、新規プロジェクトのKPI設定なども、プロンプトを工夫して精度を高めることができます。
ただし、ChatGPTを含む大規模言語モデルは基本的に推論が苦手です。
出力を安定させるにはプロンプトエンジニアリングのスキルが必要となる点にご注意ください。
まとめ|初心者はプロンプトをとにかく試してみるべし
ChatGPTってなんでもできるんだね!
今日学んだ内容を組み合わせるだけでも、かなり幅広く対応できるね。次回はもっと高度なテクニックも解説するよ!
解説中に何度もお伝えした通り、プロンプトが上達するために一番大事なのは、失敗を何度も繰り返しブラッシュアップすることです。
入門編の今回お伝えした内容だけでも、あらゆるタスクを効率的にこなせるようになるでしょう。
第二回の次回は、プロンプトエンジニアリングのテクニックをさらに掘り下げてご紹介します。
Zero-Shot と Few-Shot だけでなく、Chain-of-Thought(CoT)など、高度なテクニックまでマスターしていきましょう!
コメント