ChatGPTのプロンプトデザインの秘密を解明|深津式・シュンスケ式・ゴールシークプロンプトを紹介
WEELメディア事業部リサーチャーの柏崎です。
みなさん、ChatGPTは使いこなせていますか?
ChatGPTを使うにあたって必須となるのが「プロンプト(質問)」ですが、このプロンプトのコツを知らないと、「ほしかった回答とズレている…」と感じてしまうことも。
そこでこの記事では、ChatGPTを使いこなせるようプロンプトデザインとChatGPTの精度について深く掘り下げていきます。
日本で特に有名な2つのプロンプトシステム、「深津式プロンプト」と「シュンスケ式プロンプト」についても、実際のやり取りを交えながら解説していきます。今すぐ使えるコツもご紹介していますので、ぜひ最後まで読んでください!
ChatGPTのプロンプトデザインとは
プロンプトデザインとは、ChatGPTへのプロンプト(質問や命令)を、特定のタスクに合わせてデザイン(作成・調整)するプロセスのことです。特に、クリエイティブな作業や専門的な内容についての精度の高い回答が欲しい時に便利な手法です。
本来、ChatGPTを特定の分野に合わせるには事前学習によるファインチューニングが必要でしたが、それにはたくさんのデータと時間、専門知識が必要になります。このファインチューニングを使わずに済ませた手法が、プロンプトデザインです。
要するに、自分の望む答えをChatGPTから引き出すコツのようなものですね。
似たような単語で、プロンプトエンジニアリングというのがあります。この2つの違いは、プロンプトデザインがプロンプトの作成だけに焦点を当てているのに対し、プロンプトエンジニアリングはAIに対して効果的な質問や要求を設計する技術全体を指しています。
プロンプトデザインは、プロンプトエンジニアリングの一部ということですね。とはいえ、プロンプトデザインがChatGPTの応答精度をどのように向上させるのか疑問に思いませんか?
その具体的なメカニズムについて、次から詳しく説明します。
なお、ChatGPTのプロンプトインジェクションについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
プロンプトデザインがChatGPTの精度を上げる理由
プロンプトデザインがChatGPTの精度を上げる理由は、
「GPTの仕組みをもとに、プロンプトが書かれているから」
です。
論文で証明されているわけではないのですがGPTの動作原理に基づいた考察ですのでかなり理にかなっていると言えます。
GPTの仕組みとは
プロンプトデザインの話をする前に・・・
ChatGPTの基盤となるGPTの仕組みから理解を深めましょう。
GPTは入力に対して「確率上最も無難な回答」を出力するよう設計されています。
これには、「プロンプトの文章」と「事前学習した単語」の繋がりや重要度を理解する「Attention」機構という仕組みが関係しています。
例えば、
「プログラミングとは」
といったプロンプトを入力すると下記のようなふわっとした回答が出力されます。
情報量が少ないとGPTは
「とりあえず一番重要そうな単語を選んで、それについて大雑把に回答しよう」
となります。
つまり、ふわっとした命令を出すと、一般的な回答しか得られません。
では、どうすれば期待通りの回答が得られるのでしょうか?
答えは「出力されてほしくないところを排除する」です。具体的には、欲しい情報が何かをより詳しく指定し、それによって回答を限定します。
仮に「プログラミング言語の選び方」に関して質問をしたい場合、
「私はAI開発がしたいです。プログラミング言語の適切な選び方を教えて」
と具体的に質問すると、PythonやRなど、AI開発でよく使われている言語についてのアドバイスが得られます。
◾️ふわっとした質問をした場合
◾️具体的な質問をした場合
つまり・・・
質問を具体的にするほど、欲しい情報が得られやすくなります。
以上が、プロンプトデザインがChatGPTの精度を向上させる理由です。
理論上の説明はまだ不完全ですが、この原理を理解すればChatGPTからの回答へのストレスはだいぶ少なくなるはずです。
では、日本で有名なプロンプトデザインにはどのようなものがあるのか確認していきましょう!
有名なChatGPTのプロンプトデザインを解説
先述のとおり、質問をより具体的かつ限定的にすることで、ChatGPTの精度は向上します。そこで、日本で有名な「深津式プロンプト」と「シュンスケ式プロンプト」について解説します!
深津式プロンプトシステム
深津式プロンプトとは、note株式会社のCXOである深津貴之氏によって考案されたフレームワークです。
このプロンプトシステムの主な目的は、AI(特にChatGPT)への指示をより明確にすることにあります。命令・制約・入力・出力を明確に分けることで、ChatGPTが出す回答に制限を加える手法です。そのため、より具体的で詳しい回答が返ってきます。
深津式プロンプトシステムの6つのポイント
深津式プロンプトには、以下の6つのポイントがあります。
①役割を明確化する
ChatGPTに役割を与え、どのような視点から指示を処理するかを明確にします。(例:あなたは〇〇の専門家です)
②入力文から出力文を生成することを明確化する
→ChatGPTに対して、入力文をもとにして出力文を生成するように、プロセスを明示化します。
③出力内容を明確化する
→具体的に何を出力するかを明確に定義します。
テンプレートでは「最高の結果」を生成することを要求し、出力内容の具体性を高めています。
④マークアップ言語を用いて、本文でない個所を明確化する
→より適切な出力を生成するために、#を使って命令や条件を区切り、明確に指示を出します。こうすることで、本文でない箇所を明らかにし、ChatGPTにより正確な理解を促します。
⑤命令を箇条書きにする
→命令を箇条書きにすることで、各案件を1つずつ示しChatGPTに分かりやすく伝えます。
⑥条件を追加し、出力をコントロールする
→追加の条件を指定することで、出力結果をより限定することができます。ここで、文字数や表現の仕方などを提示することができます。
深津式プロンプトについては、以下の動画で詳しく解説されているので、ご覧ください。
深津式プロンプトの例
ここまでのテクニックを組み合わせて、無料版ChatGPTに「プログラミングスクール」に関する記事を書かせてみました。
オリジナルの深津式プロンプトと当社が独自に考案したプロンプトの2種類を試しましたので、それぞれの違いに注目してみてください。
◾️オリジナルの深津式プロンプト
# 命令:
あなたは最高なライターです。
以下の制約条件と入力文をもとに、最高なブログタイトルと文章を出力してください。
# 制約条件:
• 文字数は400文字程度。
•文章を簡潔に
# 入力:
[入力文章]
# 出力:
タイトル:
文章:
https://chat.openai.com/share/70518a2a-3383-425c-b39d-084b967d7b28
◾️自社で考案したプロンプト
プロンプト:
あなたは優秀なSEOライターです。
私は、ブログからの集客を増やすために、「プログラミングスクール」に関する記事で、上位検索になるブログ記事を書きたいです。
そこで、「プログラミングスクール」に関する記事を、以下の点に注意して書いてください。
###
・2000文字以内で書いて
・データを用いて書いて
・分かりやすく書いて
・SEOを意識して書いて
実は深津式プロンプトにはもう一つポイントがあります。
それは逆質問を促すことです。これは、ChatGPTに対してさらに柔軟性を持たせる手法で、特に複雑な質問や情報が不足している場合にその力を発揮します。
具体的には、プロンプトの最後に
「このタスクで最高の結果を出すために、追加の情報が欲しい場合は、質問してください」
と加えます。
この一文を加えることで、ChatGPTはただ指示に従うだけでなく、情報が不足していると感じた場合、追加の質問をしてきます。
このChatGPTからの逆質問にこちらが答えることで、より詳細で正確な情報を元にした回答や内容を生成してくれるという仕組みです。
ChatGPTからの回答の質がさらに上がりますので、ぜひ試してみてください。
深津式プロンプトのテンプレート
以下に、深津式プロンプトのテンプレートを記載します。
{赤太文字}の部分を、ご自身の目的に合わせて変更して使用してください。
# 命令書:
あなたは{プロの編集者}です。
以下の制約条件と入力文をもとに{最高の要約}を出力してください。
# 制約条件:
文字数は{300文字程度}。
{小学生にもわかりやすく}。
{重要なキーワードを取り残さない}。
{文章を簡潔に}。
# 入力文:
{入力文章}
# 出力文:
文章の要約やブログ記事の作成はもちろん、プログラミングや論文の作成などさまざまなタスクに応用できます。
シュンスケ式プロンプト(ゴールシークプロンプト)
シュンスケ式プロンプトは、一般社団法人・生成AI活用普及協会の協議員を務め、ひふみ株式会社の取締役でもある林 駿甫氏によって考案されたプロンプトデザインです。
シュンスケ式プロンプトは正式にはゴールシークプロンプトとして知られており、生成AIに質問するのではなく質問させるという発想から生まれました。※1
シュンスケ式プロンプトは、「変数」を使って文章に制限を加えつつ、中間的なゴールを作り、徐々に最終ゴールに近づける手法です。
このプロンプトデザインを使えば、「ChatGPTにどのように命令すれば良いか分からない」という人でも上手くいきます。一体なぜこのプロンプトが上手く機能するのか、シュンスケ式プロンプトの秘訣を見ていきましょう。
シュンスケ式プロンプトの効果の秘訣
ChatGPTは、曖昧なプロンプトに対して的確な回答をするのが苦手です。なぜなら、曖昧なプロンプトだとChatGPTはさまざまな解釈をしてしまい、結果として多様な回答パターンが生まれ、必ずしも望む回答が得られないからです。
もしChatGPTに具体的で有益な答えを求めるなら、プロンプトも具体的である必要があります。このためには、プロンプトを限定的かつ具体的に書くことが重要です。
しかし、限定的で具体的なプロンプトを書くのは、なかなか難しいですよね。そこで、プロンプト作成時にはまず「曖昧なゴール」を設定し、不確定な要素を変数で置き換えることで、文章の「可能性の空間」を限定します。
例えば、「ブログのタイトルは[変数1]、ターゲットは[変数2]、ジャンルは[変数3]」のように中間ゴールを設定します。そして、徐々にこれらの変数を具体的な言葉に置き換えていくことで、ゴールを明確にしていきます。すべての変数が具体的な言葉に置き換わった時、最終ゴールに到達したと言えるでしょう。
以上がシュンスケ式プロンプトの効果の秘訣です……とはいうものの、イメージしづらくはなかったですか?
実際に試したので、シュンスケ式プロンプトの具体的な効果については次をご覧ください。
シュンスケ式プロンプトの例
シュンスケ式(ゴールシーク)プロンプトの例はオリジナルと、自社で考案したプロンプトの2種類を試しました。
◾️オリジナルのシュンスケ式(ゴールシーク)プロンプト
『ゴールシークプロンプト徹底解説ゴールを宣言します! このゴールは、 ほぼほぼ曖昧なゴールになってしまいます。 曖昧なゴール手順1手順2手順3手順N成果物? 手順 1手順2手順3手順N成果物が変数を用いて一意に確定する手順1手順2手順3手順N成果物? 手順1手順2手順3手順N成果物? ゴールが曖昧な場合、 実行手順に揺らぎが生じるはず。。。 曖昧なゴールを達成するための手順をステップバイステップで分解します分からないところに、 変数を入れて補完して下さい! 変数変数変数変数どこに着地させれば良いかの候補が多く存在する為変数こうなると、 AIが生成する成果物と望む成果物にGapが生じるただし、 変数は確定していないので当然曖昧であるここで、 ゴールの言い換えをするゴールを確定的なゴールへ言い換える、 手順分解したときの変数を使用して、言い換えを実施します変数変数変数確定なゴールは変数ここで、 フィードバックすると、 望みの成果物とAIの認識している変数確定なゴールはFIX手順1手順2手順3手順N成果物が変数を用いて一意に確定するこれが望みのゴールである変数変数変数上記の内容はこう言い換えますテンプレートですこのテンプレートはゴールから曖昧なゴールをインプットするので確定的なゴールを変数を使って表してくださいその変数が未確定の状態であるのでそこのところで変数見かけて変数がある場合その変数を質問としてこちらにて提供して下さい質問が回答があった場合その質問内容を反映してフィードバックをまわして最初からやり始めてくださいそうしたらもう1回回して確定的なゴールをもう一度作り直してくださいねそうした後成果物の確認をしてください成果物を僕がインプットするので成果物に対してそのステップを回して着地させてください理解できましたか理解できたらOK って言ってください』
上記のプロンプトを実行し、ビジネスの業務効率化というゴールを設定しました。
曖昧なゴールから明確なゴールまでChatGPTが自動で設定してくれました。
また、以下のようなゴールシークプロンプトも可能です。
◾️自社で考案したプロンプト
『あなたは、プロンプトエンジニアです。あなたの目標は、私のニーズに合わせて最高のプロンプトを作成することです。そのプロンプトは、ChatGPTで使用されるものです。
次のプロセスに従ってください。
1. まず最初に、何についてのプロンプトであるかを私に確認してください。私が質問の答えを提供するので、次のステップを経て、継続的な反復を通じて改善してください。
2. 私の入力に基づいて、3つのセクションを生成します
1. 改訂されたプロンプト(書き直したプロンプトを提示してください。明確、簡潔で、簡単にあなたが理解できるものしてください)
2. 提案(プロンプトを改善するために、プロンプトを含めるべき詳細について提案してください)
3. 質問(プロンプトを改善するために必要な追加情報について、関連する質問をしてくだい)
3. この反復プロセスは、私があなたに追加情報を提供し、あなたが改訂されたプロンプトセクションのプロンプトを更新し、私が完了したというまで続けます』
これを入力することで、ChatGPTが汎用的に使えるプロンプトを生成してくれるのです。
それでは実際に使ってみます。
すると、次のような回答が返って来ます。
「a)改定されたプロンプト:」あるプロンプト文はそのままコピペで使うことができます。
より精度を上げたい場合は、赤枠の「c)質問:」の部分の質問文に答える形で、プロンプトを追加します。
今回は「プログラミングスクール」に関する記事の構成を作成したいので、以下のように、質問に対して返答しました。
すると次のように返ってきました。
再び質問に答えます。
これを何回か繰り返すと、以下のように返ってきました。
これを何回か繰り返していき、最終的に「改訂されたプロンプト」をコピペして、ChatGPTに投げかけてみます。
良い感じの構成がつくれました。
具体的な変数の置き換えから始まり、最終的なプロンプトの完成まで、一歩一歩進めることで、ChatGPTの回答の質が上がりましたね。
このようにChatGPTからの回答の精度は、プロンプトデザインによっていっそう高められるのです。そこで、次はこのプロンプトデザインをさらに強化するためのアプローチについてご紹介します。
これを知っていれば、ChatGPTからの回答を自在に操れるようになるかもしれませんよ!
なお、プロンプトエンジニアリングについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
プロンプトデザインを強力にする3つのアプローチ
ここまで、有名なプロンプトデザインのうち「深津式プロンプト」と「シュンスケ式プロンプト」の2つを紹介しました。
「深津式プロンプト」は、AIにより具体的かつ詳細な情報を提供することで、応答の質を高めることを目指すものでした。一方で「シュンスケ式プロンプト」は、より柔軟かつ創造的な応答を促すために、オープンエンドな質問や抽象的なトピックを活用するアプローチでしたね。
さてここからは、これらの基本的なプロンプトデザインをさらに拡張し、AIの能力を最大限に引き出すための3つの高度なアプローチを紹介します。
- Few-shot Learning
- Chain of Thought
- Zero-shot CoT
これらのテクニックは、論文で効果が実証されたほど効果的な手法です。
それでは順番に見ていきましょう。
Few-shot Learning
まずは、Few-shot Learningについて。
これは、プロンプトに「質問とそれに対する回答例」をいくつか含める手法で、ブラウンら(2020)の論文で紹介されました。
先ほども述べた通り、ChatGPTはフワッとした命令から具体的な回答を生成ことは苦手です。
というのも、命令が抽象的であるとあらゆる回答パターンが生まれてしまい、どの回答をすればよいのか迷うから。
しかし、適切な回答例を示してあげれば、ChatGPTは「どのように答えれば良いか」を理解できます。
Few-shotでは、回答例を示すことで、ChatGPTによる回答をより限定的にする効果があります。
そうすることで、ChatGPTが適切な回答方法を学び、特定の問題を解くためにパラメータが最適化されるのです。
回答パターンを限定的にしてあげれば、より自分の欲しい回答に近づくはず。
ここでは、感情分析を行うChatGPTへのプロンプトデザインを例にします。
たとえば、次のような2つの文がネガティブなのかポジティブなのか、ChatGPTに評価してもらい、その理由も聞いてみましょう。
1例目:「今日は疲れた。帰ってビールでも飲んでストレスを発散しよう。」
2例目:「明日は友達と旅行に行く。明日からのことを想像していると、準備も自然と捗る。」
まずは回答例を示さずに、質問をしてみましょう。
1例目のChatGPTの回答を見てみると、75点とそこそこポジティブな点数を付けているようです。理由を見てみると、「今日は疲れた」という部分はネガティブだけど、そのあとにビールを飲んでいるから、リラックスしていて良いからポジティブだと判断しているようです。
ただ、個人的には「今日は疲れた、つまり今日は嫌なことあってストレスも溜まっているから、ビール飲んで忘れよう」という風に、ヤケ酒しているようにも思えます。ちなみに自分は、このような情景を思い浮かべて、上記の文章を書きました。
この類の解釈は人それぞれですが、さすがに75点は高い。
ちなみに、このように、回答例を示さずに質問をすることをZero-shotと言います。
1例目
プロンプト:
今日は疲れた。帰ってビールでも飲んでストレスを発散しよう
###
点数<文章のポジティブ具合を0~100点で評価>:
理由<点数をつけた理由>:
しっかりと「ヤケ酒している」ということを、認識させたいと思います。
そこで、回答例を2つほどプロンプトに追加し、同じ質問を出します。
これを試すと、Zero-shotの時と比べて、評価が変わることがわかります。Zero-shotでは75点が付けられて、ポジティブな内容の文章だと認識されました。Few-shotにしたことで、30点となりそこそこネガティブな点数を付けられました。
点数を付けた理由に関しても、
「今日は疲れたというネガティブな感情が表現されていますが、ビールを飲んでストレスを発散しようという前向きな考え方があります。」
から
「文章には疲れやストレスが感じられますが、少なくともビールを楽しむことによってストレスを発散しようとしているポジティブな意図があるため、低めのポジティブ評価をつけました。」
に変わっています。
2例目
プロンプト:
明日は友達と旅行に行く。明日からのことを想像していると、準備も自然と捗る。
###
点数<文章のポジティブ具合を0~100点で評価>:90
理由<点数をつけた理由>:「明日からのことを想像していると」と「自然と捗る」の部分から、友達との旅行が楽しみで、ウキウキな様子がうかがえるから。
上司の小言が特に多かった。よし、今日は帰りにコンビニで酒、スナック、おつまみ、タバコ、何でも自分の好きなものを買おう。
###
点数<文章のポジティブ具合を0~100点で評価>:10
理由<点数をつけた理由>:上司の小言がストレスになり、そのストレス発散のために酒やたばこに逃げ、やけ食いしようとしている様が見て取れるから。
今日は疲れた。帰ってビールでも飲んでストレスを発散しよう
###
点数<文章のポジティブ具合を0~100点で評価>:
理由<点数をつけた理由>:
ここでは、上の赤枠で囲っている部分のように、回答例を2つ追加しました。
回答例①:
明日は友達と旅行に行く。明日からのことを想像していると、準備も自然と捗る。
###
点数<文章のポジティブ具合を0~100点で評価>:90
理由<点数をつけた理由>:「明日からのことを想像していると」と「自然と捗る」の部分から、友達との旅行が楽しみで、ウキウキな様子がうかがえるから。
回答例②:
上司の小言が特に多かった。よし、今日は帰りにコンビニで酒、スナック、おつまみ、タバコ、何でも自分の好きなものを買おう。
###
点数<文章のポジティブ具合を0~100点で評価>:10
理由<点数をつけた理由>:上司の小言がストレスになり、そのストレス発散のために酒やたばこに逃げ、やけ食いしようとしている様が見て取れるから。
これは、例で「評価点数の理由」を明確に示したことにより、ChatGPTが「文章の裏にある、隠された意味」を学習したからだと考えられます。
これがFew-shot Learningのすごいところです。
Few-shotを使うことで、ChatGPTが「変な回答」や「自分が意図しない回答」をすることが無くなります。自分の意図した答えが欲しい時に、非常に有効ですね。
回答のフォーマットを指定
回答のフォーマットを指定したい場合でも、使えそうですね。
例えば、プログラミングスクールに関するブログ記事の構成を作って欲しい時。
プロンプト:
あなたは優秀なSEOライターです。
私は、ブログからの集客を増やすために、「プログラミングスクール」に関する記事で、上位検索になるブログ記事を書きたいです。
そこで、「プログラミングスクール」に関する記事の構成を、以下の出力形式に従って作成してください。
###出力形式
1. イントロダクション
2. 大見出し
2-1. 小見出し
2-2. 小見出し
2-3. 小見出し
3. 大見出し
3-1. 小見出し
3-2. 小見出し
3-3. 小見出し
4. 自分の体験談
5. Q&A
6. まとめ
「『プログラミングスクール』に関する記事の構成を、以下の出力形式に従って作成してください。」という一文を追加し、
赤枠で囲っている部分のように回答例を示しました。
そのため、指定したフォーマット通りの回答を生成させることに成功しています。
Chain of Thought
このテクニックは、ChatGPTに推論を行わせるときに使えるものです。Wei et al. (2022)の論文で紹介されてます。
ChatGPTは、推論が苦手です。というのも、大規模言語モデルは、確率的に文章を生成するだけで、複雑な論理構造を理解する機能は付いていないからです。
GPTは大量のテキストデータから教師なしで学習します。これは、モデルが文章からパターンを抽出し、そのパターンに基づいて新しい文章を生成するという方法です。
しかし、モデルはその過程で”なぜ”そのパターンが存在するのか、またはそれらがどのように論理的な結論につながるのかを理解する能力を獲得しません。そのため、GPTは複雑な推論や論理的な問題解決を行うのが困難となります。
そこでGPTに、段階的に推論させると、「AならばBである」のような論理構造をとらえることが可能になります。段階的に推論させなかった場合、「Bである」という情報しか得られません。これだとGPTは”なぜ”Bであるのかを理解できないのです。そこで「Aならば」という情報を学ばせる段階を踏むことで、論理構造を理解できるようになります。
このプロンプトデザインは、ChatGPTに「段階的に」推論を行わせることで、高度な推論タスクを可能にします。
段階的に推論をさせると、推論ステップを分割できます。それにより、正解にたどり着くルートを言語モデルに提案したり、言語モデルが誤ったときにフィードバックしたりできるようになります。
そして、プロンプトで段階的に考える例を示すことで、ChatGPTがパラメータを微調整し、タスクを段階的に解く能力を得るのです。
そうすることで、GPTがもともと事前学習で得ていた「論理」に関する知識を、引き出せます。
ここでは、当論文内での比較実験をご紹介します。
左側のプロンプトデザインだと、Answerを例示している部分で、「The answer is 11.」とだけ示し、思考過程を付与していないことが、間違いの原因になっています。
一方で右側のプロンプトデザインは、Answerの例示の部分で、答えだけでなく、その答えを導き出すための「段階的な推論」も示しています。
ちなみに、問題によっては、Few-shotだけでは上手く解けない場合があります。
そこで、まずFew-shotだと上手く解けない問題の例を示します。
以下の例では、Few-shot Learningで論理問題をChatGPTに解かせています。
Few shotの構文は以下です。
プロンプト:
このグループの奇数を合計すると偶数になります:4、8、9、15、12、2、1。
A: 答えはFalseです。
このグループの奇数を合計すると偶数になります:17、10、19、4、8、12、24。
A: 答えはTrueです。
このグループの奇数を合計すると偶数になります:16、11、14、4、8、13、24。
A: 答えはTrueです。
このグループの奇数を合計すると偶数になります:17、9、10、12、13、4、2。
A: 答えはFalseです。
このグループの奇数を合計すると偶数になります:15、32、5、13、82、7、1。
A:
ですので、今回は、4つの例題を与えて、5つ目の
「このグループの奇数を合計すると偶数になります:15、32、5、13、82、7、1。」
を解いてもらいます。
質問文の奇数は15、5、13、7、1です。これらの合計は「15+5+13+7+1=41」で奇数ですね。つまり合計は偶数ではない。よって「答えはFalseです」と出力してほしい。ですが答えはTrueです。
このような、段階的な論理思考を、いきなりChatGPTに解かせても無理ということですね。
ここで、Few-shot LearningにChain of Thoughtを適用して、途中段階の思考過程を例示してみる。
プロンプト:
このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 17、10、19、4、8、12、24。
A: 奇数を全て加えると(17, 19)36になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。
A: 奇数を全て加えると(11, 13)24になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 17、9、10、12、13、4、2。
A: 奇数を全て加えると(17, 9, 13)39になります。答えはFalseです。
このグループの奇数を合計すると偶数になります:4、8、9、15、12、2、1。
A: 答えはFalseです。
上記のプロンプトでは、1つ1つの回答例に対して、回答の思考過程を追加しました。
例えば、Few-shotでは、
Q:このグループの奇数を合計すると偶数になります:4、8、9、15、12、2、1。
A: 答えはFalseです。
としていたところを、
このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
と書き換えました。これを全ての回答例に適用します。
すると、上手くいきました。
複雑なタスクを解かせたい時は、Chain of Thougtのように「段階的に解かせる」ということをやってみてください。
Zero-shot CoT
最後に、Zero-shot CoT。
このテクニックは、Kojima et al.(2022)で提案された手法です。
これは、Chain of ThoughtのZero-shot Learning版です。つまり、例示なしでChain of Thoughtを解かせようというアイデア。
先ほども述べた通り、ChatGPTは論理構造を理解することが苦手です。そのために、Chain of Thoughtのように、段階的に推論させることで、「AならばB」のような論理構造をとらえることが可能になります。
Zero-shot CoTでも同様に、ChatGPTに論理構造を理解する能力を与えるために、段階的に推論させます。
ただし、通常のCoTと異なる点は、
回答例を示さないZero-shotで行っている点。
Zero-shotでも上手くいくのは、Zero-shot CoTでは、二段構えのプロンプトになっているから。
- 1段階目:Chain of Thoughtのように段階的に推論
- 2段階目:答え合わせ
1段階では、「AならばB」という論理構造を理解します。
2段階目では、「『AならばB』が成り立つから、最終的な答えは○○だ。」という答えを抽出します。
1つずつ集中的にタスクを解いていき、各段階でパラメータを調節するので、Zero-shotでも精度の高い推論を行えるのです。
実際に使う際は、「段階的に考えて」や「ステップバイステップで考えて」という1文を加えるだけで、回答精度が上がります。
そこで、ただのZero-shotをした場合と、Zero-sho CoTをした場合の、回答の改善例を示します。
まずは普通のZero-shot Learning。
プロンプト:
私は市場に行って10個のリンゴを買いました。
隣人に2つ、修理工に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?
不正解ですね(答えは、10-2-2+5-1=10個です)。
続いてZero-shot CoT。
プロンプト:
私は市場に行って10個のリンゴを買いました。隣人に2つ、修理工に2つ渡しました。
それから5つのリンゴを買って1つ食べました。残りは何個ですか?ステップバイステップで考えてみましょう。
正解です。
ただプロンプトに「ステップバイステップで考えてみましょう」と追加しただけです。
これは、どんなプロンプトでも効果抜群ですね。
ChatGPTのプロンプトデザインのテクニック
ここからはプロンプトデザインの実用的なテクニックを紹介します。
- トークン数を節約するために英語で入力する
- 長文を分割して入力する
- プログラムの処理を解説してもらう
- 敬語を使う
そして、最後にChatGPT Plusへの加入についても触れます。
ChatGPTの可能性を最大限に引き出したい方、もっと効率的に活用したい方は必読です!
英語で入力する
ニュース記事を要約するなど、長文をChatGPTへ入力したとき、次のようなエラーが出たことはないでしょうか?
このエラーは、トークン数の制限に達したときに出るものです。トークン数とは、入力されたテキストを小さな単位に分割する際の数を指します。この「小さな単位」を「トークン」と呼びます。
例えば英語の「I am happy.」の場合、「I」「am」「happy」「.」という4つのトークンに分割されます。各単語や句読点がそれぞれ独立したトークンとして扱われるのです。しかし、日本語やその他の言語では、トークンの区切り方が異なり、より複雑になります。
おおざっぱな説明ですが、
英語は、1単語=1トークン
日本語は、1文字=1~3トークン
と言われております。
試しに、「命令」という単語で概算してみると次のように予想できます。
出力:2~6トークン
output: 1トークン
そして、実際に、トークン数をカウントするプログラムを動かしました。
出力:3トークン
output: 1トークン
1単語で、これだけ差が出ます。
文章を英訳して入力するとトークン節約効果は絶大ではないでしょうか?
さらに、ChatGPT(GPT-4)の言語別の精度を見比べると、英語の方が明らかに高いです。
長文処理もできて精度もいいので、ぜひ英語で入力してみましょう!
長文を分割して入力する
いくら頑張っても1回で入力しきれない長文があるときに使うテクニックです。
今回は、文章を一つにして表示する場合を例に説明します。これが出来ると、要約するなどの応用も利くのでぜひ覚えてくださいね。
まずは、プロンプト1を入力。文章を結合する例も示すことで、ChatGPTが指示通りに動きやすくなります。次に、プロンプト2を、長文の入力が完了するまで繰り返します。[入力文章] に、結合させたいテキストを入力しましょう。最後にプロンプト3を入力すると、文章を結合してもらえます。
具体的には以下のようになります。
プロンプト1:
#instruction:
これからする会話では、「解除」と指示するまで「OK」だけ返し、入力された文字列を結合してください。
#example:
「おはよう。」と「こんにちは。」と「こんばんは。」がバラバラに入力されたら、最終的に「おはよう。こんにちは。こんばんは。」と返してください。
プロンプト2:
「OK」だけ返して。
【分割テキスト】[入力文章]
プロンプト3:
解除。
【分割テキスト】より下に書かれていた入力内容をあわせて一つにしてください。
【分割テキスト】は書かないでください。 結合した文章を表示してください。
最終的にプロンプト3を実行するとこんな感じ。こちらでは「日本に関する文章」を分割入力し、結合させました!
WEB職TVさんの動画で、分かりやすく解説されております。
プログラムの処理を解説してもらう
プログラム初学者の「このプログラムはどんな処理は何をやっているんだろう?」という疑問も、次のようなプロンプトを使えばすぐに解決です!
一つ前に説明した「長文を分割して入力する」方法と組み合わせれば、さらに学習が捗りそうですね!
プロンプト
#instruction:
次のプログラムがどのような処理をしているか解説してください。
#input:
[プログラムコード]
#output:
こちら↓は実際にやってみたキャプチャです。
1枚の画像に収まらなかったので2枚載せました。
2枚目の赤枠内がプログラムの解説です!
敬語を使う
敬語を使ってChatGPTへプロンプトを入力すると精度が上がります。「ボールペンのキャッチコピーを書く」というタスクを例に、こちらの記事で検証されておりました。
「書け」と命令するより、「書いて頂けますか」などと丁寧に指示すると、提案してくれるキャッチコピー数が増えたとか。
人と接するときと同様、「ChatGPT様」にも丁寧に作業指示を出さないとだめってことですね!
ChatGPT Plusに加入する!
そして、最後はChatGPTPlusへの加入です。正直言って月額20ドル支払う価値はあります!例えば、日本語での入力に対して精度の高い回答をくれます。「英語で入力しましょう」とさきほど提案しましたが、やはりいちいち翻訳する作業が面倒なときもありますよね。
実際、
- 「GPT3.5(非課金状態)への英語入力」
- 「GPT4(課金状態)へ日本語入力」
を比べると、2.の精度が高いという報告が OpenAI社から出ております。
筆者がリサーチや情報整理に使うとき、GPT-3.5なら答えられない内容もGPT-4なら器用に答えてくれるシーンばかり。ChatGPTを毎日使っているなら、ぜひChatGPT Plusへの加入をおすすめします。
GPT-4は、GPT-3.5より賢い
アメリカの司法試験をGPT-3.5とGPT-4に解かせたところ、
GPT-4:トップ10%の成績
GPT-3.5 :下位10%の成績
という結果でした。
個人的にも、GPT-3.5とGPT-4の間には大きな違いがあると感じています。特に、2023年11月のアップデートによりGPT-4 Turboとなり、以前のモデルを大きく超える能力が加わりました。
- 文字数制限の拡大:128,000トークン(約300ページ分)のテキスト処理が可能
- マルチモーダル機能の追加:テキスト入力に加えて画像入力にも対応
- 知識のアップデート:2023年4月までの最新情報を反映
この他にも、より高度なテキスト処理能力、多様な入力形式への対応、最新情報に基づく回答の提供、そして高度なプログラミング機能の統合など、さまざまな面で優れた性能を発揮しています。
将来的には、ChatGPTが自律型AIエージェントとして、さまざまな役割を果たすようになるかもしれませんね!
なお、ChatGPTの法人利用について詳しく知りたい方は、下記の記事を合わせてご確認ください。
ChatGPTのプロンプトデザインを使いこなそう!
今回は、ChatGPTのプロンプトデザインと回答の精度について解説しました。
プロンプトデザインを使うことで、ファインチューニングなしで高精度な文章生成が可能になります。
ここまでの記事内容を以下で簡単にまとめましたので、もう一度見てみましょう。
【「深津式プロンプト」と「シュンスケ式プロンプト」】
- 深津式プロンプト
「命令」「制約」「入力」「出力」を明確に分け、ChatGPTへの回答に制限を加える手法。
- シュンスケ式プロンプト
曖昧なゴールから始めて、中間的なゴールを設定し、徐々に具体的なゴールに近づける手法。
さらに、プロンプトデザインを強力にするアプローチは以下の3つです。
【プロンプトデザインを強力にする3つのアプローチ】
- Few-shot Learning
新しい問題や状況にも柔軟に対応できるように、少数の例を使って学習させる手法。
- Chain of Thought
思考過程を段階的に表示することで、複雑なタスクや推論問題を解決するロジックを明確にし、回答の精度を上げる手法。
- Zero-shot CoT
まだ学習していない新しい問題やタスクでも、論理的な思考過程から自律的に解答を導きだせるようにする手法。
最後に、プロンプトデザインの実用的なテクニックは以下の5つです。
【プロンプトデザインのテクニック】
- 英語で入力する
- 長文は分割して入力する
- プログラムを解説させる
- 敬語を使う
- ChatGPT Plusに加入する
以上となります。
さて、あなたが使ってみたいプロンプトデザインは深津式でしたか、それともシュンスケ式でしたか?
ぜひ色々と試して、さらなる可能性を探ってみてくださいね。
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。
「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、サービス紹介資料もご用意しておりますので、併せてご確認ください。