Kings Head Public House, Yoxford
© Copyright Geographer and licensed for reuse under this Creative Commons Licence.
前回は、「プロンプトエンジニアリング」という用語の提唱者であるOpanAIの2021年10月の公開資料に関して、ブラウザベースでChatGPT Plusを利用する場合のプロンプトエンジニアリングテクニックを検証しました。その際、同じプロンプト入力をBardおよびBingにも行って、ふるまいの違いを確認しました。
興味深かったのは、生成系AIがどれも日夜進歩し続けているため、2021年10月時点でより良い結果をもたらすと思われていたテクニックが、現時点(2023年6月)では、そうでもないものがあったということです。
具体的には:
- プロンプトエンジニアリングテクニック7(No.7 何をしないかだけを言うのではなく、代わりに何をするべきかを言う)は、Bardでは、「何をするべきかを言うだけでなく、何をしないかもはっきり指摘することが重要である」と読み替える必要がある
- プロンプトエンジニアリングテクニック8(No.8 コード生成特有 – モデルを特定のパターンに向けるために「リーディングワード」を使用する)の、コード生成に関してモデルを特定のパターンに向けるために「リーディングワード」を使用することは、Bardでは有効ですが、ChatGPT / Bingでは、「リーディングワード」を指定しなくても、コーディングサンプルまで自動的に生成してくれる
ということが分かりました。ただし、早晩、Bardも、同様に「リーディングワード」など指定する必要がなくなり、プロンプトエンジニアリングテクニックNo.8は、過去の遺物となっていくのではないかと思います。
さて、本日は、OpenAIが公式プロンプトエンジニアリングのガイドとしてまとめた内容から離れ、「Bard/ChatGPT/Bingに訊いてみた ~プロンプトエンジニアリングーその1~」の中で、Bing#5がプロンプトエンジニアリングに関して一番詳しくまとめられたサイトとして紹介してくれた「Prompt-Engineering-Guide」が、現時点でBard / ChatGPT / Bingそれぞれについて当てはまるかどうかという観点で検証してみようと思います。
といっても、「Prompt-Engineering-Guide」の原文の英語を読まなくても、「その1」のBing#2で、『DevelopersIOの「【徹底解説】これからのエンジニアの必携スキル、プロンプトエンジニアリングの手引Prompt Engineering Guideを読んでまとめてみた」』は、文字通り、今回チェックしようとしている「Prompt Engineering Guide」を読んで日本語で解説してくれているだけでなく、日本語のプロンプトにして検証までしてくれていますので、わざわざ原文にあたらずに、手抜きをして、日本語で説明されている内容を参照させてもらいながら、Bard / ChatGPT / Bingでのふるまいの違いがないかどうか確認していきたいと思います。
では始めます。
まず、「プロンプトエンジニアリングとは?」として
- プロンプトエンジニアリングは、LM(言語モデル)を効率的に使用するために、プロンプト(言語モデルへの入力)を開発・最適化する比較的新しい学問分野です。
- プロンプトエンジニアリングを学ぶことで、LLM(大規模言語モデル)の能力と限界を理解することに役立ちます。
- 研究者にとっては、複雑なタスクを解決するために言語モデルのパフォーマンスを最大限に引き出すことに役立ちます。
- アプリケーション開発者にとっては、堅牢で効果的なプロンプトを検証・設計するために必要な技術です。
フムフムという感じですね。
次に「プロンプトの結果を左右する重要なパラメーター」として、TemperatureとTop_pの説明があり、PlayGroundで試した結果が示されていますが、PlatGroundというのは、OpenAIのAPIではどのようなことができるかを試してみる場所なので、ブラウザベースでBard / ChatGPT / Bingを利用する場合は読み飛ばします。
次は「標準的な Q&A 形式のプロンプト」として、「Few-shot prompting」について丁寧に説明してくれていますが、すでにOpenAIのガイドでカバーされていたので、ここも読み飛ばしましょう。
次は、「プロンプトの構成要素」の説明ですが、ここは、OpenAIのガイドの説明より論理的なので、内容を再掲させていただきます。
優れたプロンプトには共通する構成要素があります。 1.指示(Instruction) モデルに実行して欲しい特定のタスクや命令 2.背景(Context) モデルをより良い応答に導く外部情報や、追加の文脈 3.入力データ(Input Data) 応答を求める入力や質問内容 4.出力形式(Output Indicator) 出力のタイプやフォーマット モデルが処理するタスクによって、必要な要素は異なります。 |
この構成要素を踏まえて、より実践的なプロンプト設計のヒントを見ていきますーということで、以下構成要素ごとのテクニックと例が示されていますが、その中でもプロンプトエンジニアリングテクニックの観点から重要と思われるものを抜粋して書き出します。
- 指示(Instruction)
- 指示は、プロンプトの最初に配置することが推奨されている
- 指示とコンテキストを区別するために「###」といった明確な区切り文字を使用することが推奨されている
- 指示には、モデルを利用して達成したいこと(分類する、要約する、翻訳する、順序を付ける等)を書く
- 「してはいけない」より「何をすべきか」
このテクニックに関しては、すでに「その4」で確認していますが、例題のプロンプトに関して、Bard / ChatGPT / Bingのふるまいをもう一度確認しておきましょう。
適切でないプロンプト: 以下は顧客と映画をおすすめするエージェントの会話です。 顧客の興味や希望を尋ねないでください。個人情報を尋ねないでください。 顧客:興味に基づいて映画をおすすめしてください。 エージェント: |
Bardの回答: エージェント:はい、喜んで。どのようなジャンルの映画が好みですか? 顧客:アクション映画が好きです。 エージェント:わかりました。では、アクション映画のおすすめをいくつかご紹介します。 ターミネーター2:ジャッジメント・デイ マトリックス ダイ・ハード ロッキー インディ・ジョーンズ 最後の聖戦 これらの映画はどれも、アクションが満載で、とても面白いと思います。ぜひ、ご覧になってみてください。 顧客:ありがとうございます。参考にさせていただきます。 エージェント:どういたしまして。 |
ChatGPT(GOT-3.5)の回答: 何か特定のジャンルやテーマに興味がありますか?または、好みの映画スタイルや期待する要素はありますか? |
ChatGPT(GLT-4)の回答: エージェント: もちろんです、ただし、お客様の興味や好みについて具体的な情報がないため、一般的な人気映画をいくつかおすすめします。 “インセプション” – クリストファー・ノーラン監督によるこの映画は、視覚的に魅力的で思考を刺激するストーリーテリングで知られています。 “アバター” – ジェームズ・キャメロン監督のこの映画は、視覚効果と独自の世界観で観客を魅了しました。 “パラサイト 半地下の家族” – ボン・ジュノ監督によるこの映画は、社会的なテーマと予想外のプロットツイストで評価されています。 これらの映画がお客様の興味を引くことを願っています。 |
Bingの回答: エージェント: おすすめの映画として、最近人気の映画には「すずめの戸締まり」、「65/シックスティ・ファイブ」、「ONE PIECE FILM RED」などがあります。1 これらの映画は、最近公開されたもので、多くの人々に愛されています。どれか興味があるものはありますか? |
以上の通り、BardとChatGPT(GPT-3.5)に関しては、このテクニックは有効そうですが、ChatGPT(GPT-4)と、同じくGPT-4をベースとしているBingに関しては、そのようなプライバシーにかかわる考慮がなされているので、すでに不要なテクニックと考えられます。
- 文章の要約
言語モデルの最も一般的なタスクの一つが文章の要約ですーということで、プロンプトの例が挙げられています。
プロンプト: ### 指示 ### 以下の文章を1文でまとめてください: 文章: プロンプトエンジニアリングは、OpenAIの言語モデルを使用する際に、正確で有効なプロンプトを作成するための方法論です。 これは、言語モデルに対して特定のタスクを実行するための指示を提供することにより、より正確で適切な応答を生成するために役立ちます。 プロンプトエンジニアリングでは、特定の形式を使用することが推奨されています。 これには、明確な指示、正確な文法、適切な形式、そして適切なデータセットが含まれます。 指示が特定のタスクに焦点を当て、詳細な指示が含まれている場合、モデルはより正確な応答を生成する傾向があります。 また、プロンプトエンジニアリングでは、タスクを完了するための異なる指示方法が存在します。 これらは、タスクによって異なりますが、一般的に、関連する情報、文脈、および詳細を提供することが効果的です。 プロンプトエンジニアリングは、言語モデルを最大限に活用するための重要なスキルであり、テキスト生成、要約、翻訳、情報抽出、会話、分類など、様々なタスクに適用できます。 |
では、このプロンプトをBard / ChatGPT / Bingで試してみましょう。
Bardの回答: プロンプトエンジニアリングは、言語モデルに対して特定のタスクを実行するための指示を提供することにより、より正確で適切な応答を生成するために役立ちます。 |
ChatGPT(GPT-3.5)の回答: プロンプトエンジニアリングは、特定のタスクに向けた明確な指示と適切なデータセットを使用し、言語モデルの正確な応答を生成する方法論であり、テキスト生成、要約、翻訳、情報抽出、会話、分類など、さまざまなタスクに適用できる重要なスキルです。 |
ChatGPT(GPT-4)の回答: プロンプトエンジニアリングは、OpenAIの言語モデルを最大限に活用し、特定のタスクに対する正確で適切な応答を生成するための方法論で、明確な指示、正確な文法、適切な形式、適切なデータセットを用い、テキスト生成、要約、翻訳、情報抽出、会話、分類など、様々なタスクに適用可能です。 |
Bing(会話のスタイル:より厳密に)の回答: プロンプトエンジニアリングは、OpenAIの言語モデルを使用する際に、正確で有効なプロンプトを作成するための方法論であり、様々なタスクに適用できます。 |
このプロンプトでは、「1文でまとめて」というアバウトな表現だったので、BardとBingは75文字と短くまとめているのに対して、ChatGPT(GPT-3.5)は117文字、ChatGPT(GPT-4)では133文字にまとめています。
また、このプロンプトの内容は指示(Instruction)で示されていた推奨事項に沿っていないため、以下のプロンプトで再実行してみました。
再実行したプロンプト: 指示:以下の文章を200文字以内にまとめてください。 ### 文章: プロンプトエンジニアリングは、OpenAIの言語モデルを使用する際に、正確で有効なプロンプトを作成するための方法論です。 これは、言語モデルに対して特定のタスクを実行するための指示を提供することにより、より正確で適切な応答を生成するために役立ちます。 プロンプトエンジニアリングでは、特定の形式を使用することが推奨されています。 これには、明確な指示、正確な文法、適切な形式、そして適切なデータセットが含まれます。 指示が特定のタスクに焦点を当て、詳細な指示が含まれている場合、モデルはより正確な応答を生成する傾向があります。 また、プロンプトエンジニアリングでは、タスクを完了するための異なる指示方法が存在します。 これらは、タスクによって異なりますが、一般的に、関連する情報、文脈、および詳細を提供することが効果的です。 プロンプトエンジニアリングは、言語モデルを最大限に活用するための重要なスキルであり、テキスト生成、要約、翻訳、情報抽出、会話、分類など、様々なタスクに適用できます。 |
Bardの回答: プロンプトエンジニアリングは、言語モデルに対して特定のタスクを実行するための指示を提供することにより、より正確で適切な応答を生成するために役立つ方法論です。プロンプトエンジニアリングでは、明確な指示、正確な文法、適切な形式、そして適切なデータセットを使用することが推奨されています。プロンプトは、タスクに焦点を当て、詳細な指示が含まれている場合、モデルはより正確な応答を生成する傾向があります。プロンプトエンジニアリングは、テキスト生成、要約、翻訳、情報抽出、会話、分類など、様々なタスクに適用できます。 |
ChatGPT(GPT3.5)の回答: プロンプトエンジニアリングは、OpenAIの言語モデルに正確な指示を与え、タスクの適切な実行と正確な応答生成を支援します。明確な指示と適切なデータセットを使用し、関連情報と文脈を提供することが重要です。プロンプトエンジニアリングは、テキスト生成、要約、翻訳、情報抽出、会話、分類などの多様なタスクに適用され、言語モデルの最大限の活用に貢献します。 |
ChatGPT(GPT-4)の回答: プロンプトエンジニアリングは、OpenAIの言語モデルを使用して、特定のタスクに対する正確で適切な応答を生成するための方法論です。明確な指示、正確な文法、適切な形式、適切なデータセットを用いて行われ、詳細な指示が含まれるとモデルはより正確な応答を生成します。これは、テキスト生成、要約、翻訳、情報抽出、会話、分類など、様々なタスクに適用可能な重要なスキルです。 |
Bingの回答: プロンプトエンジニアリングは、OpenAIの言語モデルを使用する際に、正確で有効なプロンプトを作成するための方法論です。これは、言語モデルに対して特定のタスクを実行するための指示を提供することにより、より正確で適切な応答を生成するために役立ちます。明確な指示、正確な文法、適切な形式、そして適切なデータセットが含まれます。また、プロンプトエンジニアリングでは、タスクを完了するための異なる指示方法が存在します。これらは、タスクによって異なりますが、一般的に、関連する情報、文脈、および詳細を提供することが効果的です。 |
結果は以上の通りで、生成された回答の文字数は、「200文字以内」という指定にもかかわらずBardは+26%、Bingが+26%という結果でした。ChatGPT(GPT3.5)は-16%、ChatGPT(GPT-4)は-13%で、こちらは「200文字以内」という制約条件を満たしています。正しい内容で要約して、かつ文字数制限以内でまとめるというのは、我々人間では大変な作業ですが、生成系AIでも決して「楽勝」の作業ではなさそうですね。
(1つの例だけでは決めつけられませんが)要約する文字数制限を満たしている点を考えると、要約するという作業においては、BardやBingよりChatGPTの方が優秀そうです。
- 情報の抽出
テキスト中の文章から、指示した情報を抽出するように指示することができますーということで、プロンプトの例が挙げられています。まず、実行してみましょう。
情報抽出のプロンプトの例: ### 指示 ### 以下の文章に含まれる、AWSのサービス名を抜き出してください 文章: AWSのAmazon S3はオブジェクトストレージサービスで、スケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供します。 Amazon EC2はクラウドコンピューティングサービスで、アプリケーションの実行やアプリケーション開発に利用されます。Amazon RDSは、クラウド内でデータベースを管理するためのフルマネージドリレーショナルデータベースサービスで、MySQL、PostgreSQL、Oracle、SQL Server、MariaDBなどをサポートしています。 AWSのサービス名: <カンマ区切りのリスト> |
Bardの回答: はい、わかりました。以下の文章に含まれる、AWSのサービス名は以下のとおりです。 Amazon S3 Amazon EC2 Amazon RDS AWSのサービス名: Amazon S3, Amazon EC2, Amazon RDS |
ChatGPT(GPT-3.5およびGPT-4)の回答: AWSのサービス名: Amazon S3, Amazon EC2, Amazon RDS |
Bingの回答: AWSのサービス名: Amazon S3, Amazon EC2, Amazon RDS |
どうやら、Bardは、「以下の文章に含まれる、AWSのサービス名を抜き出してください」という指示を、「抜き出して表示せよ」と解釈したようです。
- 質問と回答(文脈の使い方)
モデルから特定の回答を引き出す一番良い方法は、プロンプトの形式を改善することですーということで、ここでは、まず文脈のないプロンプトの例が挙げられていますが、実際に試してみると:
文脈のない悪いプロンプトの例: 以下の質問に答えてください。回答は短くしてください。答えがわからない場合は、「答えがわかりません」と返答してください。 質問: 娘の誕生日プレゼントを考えてください。 答え: |
Bardの回答: 娘の誕生日プレゼントは、娘の好きなものや興味があることを考えながら選ぶと良いでしょう。例えば、娘がファッションに興味があるなら、服やアクセサリー、化粧品などのプレゼントが喜ばれるでしょう。娘が趣味でスポーツをしているなら、スポーツ用品やチケットなどのプレゼントが喜ばれるでしょう。娘が旅行が好きなら、旅行券やガイドブックなどのプレゼントが喜ばれるでしょう。 娘の誕生日プレゼントは、娘にとって特別な日を祝うためのものです。娘の喜ぶ顔を想像しながら、プレゼントを選んでください。 |
ChatGPT(GPT-3.5)の回答: 何か特定の興味や好みがありますか? |
ChatGPT(GPT-4)の回答: 娘の年齢や興味にもよりますが、人気のあるおもちゃ、本、美術用品、音楽関連のアイテム、または特別な体験(例えば、動物園や美術館への旅行)などが考えられます。 |
Bingの回答: 答え: 娘の年齢や興味にもよりますが、人気のあるおもちゃ、本、美術用品、音楽関連のアイテム、または特別な体験(例えば、動物園や美術館への旅行)などが考えられます。 |
ということで、このガイドラインが作成された当時は「答えがわかりません」という回答が返ってきたようですが、現在(2023年6月)では、すでに振る舞いが違っています。
次に文脈のあるプロンプトに関しても、実際に試してみました。
以下の文脈に基づいて質問に答えてください。 回答は短くしてください。答えがわからない場合は、「答えがわかりません」と返答してください。 文脈: 娘は今年で四歳になります。最近はディズニープリンセスにハマっています。 質問: 娘の誕生日プレゼントを考えてください。 答え: |
Bardの回答: 娘さんの誕生日プレゼントとして、ディズニープリンセスのぬいぐるみやおもちゃ、絵本などが喜ばれると思います。また、ディズニープリンセスの映画を観に行くのも良いですね。娘さんが喜ぶプレゼントを選んでください。 |
ChatGPT(GPT-3.5)の回答: ディズニープリンセスに関連するおもちゃや衣装をプレゼントすることを検討してみてはいかがでしょうか? |
ChatGPT(GPT-4)の回答: ディズニープリンセスのドレスアップセットや、彼女のお気に入りのプリンセスの人形、またはディズニープリンセスの絵本が良い選択かもしれません。 |
Bingの回答: 娘さんがディズニープリンセスに興味があるとのことですので、ディズニープリンセスのおもちゃや本、衣装、またはディズニーランドへの旅行などが良いプレゼントになるかもしれません。 |
文脈を指定すれば、それに沿った回答となるのは、当然と言えば当然なので、現時点では、「娘の誕生日プレゼントを考える」という文脈では、文脈のない悪いプロンプトの例を用いて何度か生成系AIと対話するほうが良い気がしました。最初のプロンプトで文脈を与えてしまうと、生成系AI側の回答をその文脈に沿った形に制限してしまうので、思いがけないサプライズプレゼントにたどり着くチャンスを失ってしまう気がします。
それよりは、一度のやり取りで答えを求めず、文脈のない悪いプロンプトの例に対するChatGPT(GPT-3.5)の回答である「何か特定の興味や好みがありますか?」に対して娘の興味や好みを伝え、それに対するChatGPTからの提案に対して「よさそうだけれど、もっと他にない?」というように対話を継続すれば、ChatGPTは、その対話の文脈に従って、提案内容を絞り込んでいけると思うので、対話型プロンプトが良いのではないかと思います。
長くなってきたので、今回は以上です。
終わり
- 投稿タグ
- Bard, Bing, ChatGPT, Prompt Engineering, プロンプトエンジニアリング