ChatGPTやBing、BardなどのAIチャットボットあるいは画像生成AIツールへ質問や文章・画像作成の指示をしても、今一つうまくいかないことがあります。
質問の仕方、回答のさせ方にも工夫が必要ですが、コツはあるのでしょうか。
言語モデルを効率的に使用するためのプロンプトを開発および最適化する研究分野がプロンプトエンジニアリングと呼ばれ、その内容が「Prompt Engineering Guide」に纏められています。
プロンプトエンジニアリングとは?
「プロンプト」はもともとコンピュータへの命令(コマンド)を入力する場所を表す画面上の表示ですが、コンピュータ(AI)へのコマンドや入力文の意味でも使われているようです。
プロンプト( prompt)
引用;Wikipedia
「刺激・促進」を意味する英語。
コンピュータへの入力を促す表示。
プロンプトエンジニアリングとは、AIとの対話において、より効果的なコミュニケーションを実現するために、適切な質問をするプロンプトの設計や改善を行なうことを指します。
具体的には、ユーザーがAIに対して質問や指示を出す際に、AIが理解しやすく、正確かつ適切な回答を返すためにはどのようなプロンプトが必要かを考え、そのプロンプトを改善することによって、よりスムーズな対話が実現できます。
プロンプトエンジニアリングは、AIの利用範囲がますます広がるにつれて、重要性が高まっています。
Prompt Engineering Guide
Prompt Engineering Guideは、海外のAI研究所DAIR.AIでまとめられたプロンプトエンジニアリングのガイドです。
最新の論文、モデル、講義、参考文献などをもとに作成されていて、現在も研究開発中のセクションもあり、最先端の研究結果にもとづく最新理論、技術を読むことができ、ここまで纏まったものは他にはないのではないかと思います。日本語訳もされております。
その内容については、原文を直接読む方が良いと思いますが、特徴的な点について、以下について纏めてみます。
はじめに(抜粋)
プロンプトエンジニアリングは、言語モデル(LM=Language Model)を効率的に使用するためのプロンプトの開発と最適化のための比較的新しい学問分野です。プロンプトエンジニアリングのスキルは、大規模な言語モデル(LLM=Large Language Model)の能力と限界をより良く理解するのに役立ちます。研究者は、プロンプトエンジニアリングを使用して、質問応答や算術推論などの一般的で複雑なタスクの幅広い範囲でLLMの能力を向上させます。開発者は、プロンプトエンジニアリングを使用して、LLMやその他のツールとインターフェースする堅牢で効果的なプロンプティング技術を設計します。
このガイドでは、プロンプトの基本をカバーし、大規模な言語モデル(LLM)とやり取りして指示する方法の概要を提供します。
引用;Prompt Engineering Guide
プロンプトの要素
プロンプトとして入力するのは以下の要素があります。
指示・命令 – モデルに実行してほしい特定のタスクまたは命令
文脈 – 外部情報や追加の文脈が含まれる場合があり、モデルをより良い応答に導くことができます。
入力データ – 応答を見つけたい入力または質問
出力表示・形式 – 出力のタイプや形式を示します。
単に質問だけ入力するのでなく、文脈とかどのような形で回答してほしいか、とか色々な条件を入力しているということだね。
具体的にはどのようなものか、下の表に纏めてみました。
構成要素 | 要素の内容、役割 | 具体例 |
指示・命令(instruction) | モデルに実行してほしい特定のタスクまたは指示・命令 | ・「書く」「分類する」「要約する」「翻訳する」「並べ替える」など |
文脈(context) =前後関係、事情、 背景 | 外部情報や追加の文脈が含まれる場合があり、モデルをより良い応答に導くことができます。 | 予備知識、情報 ・対象者(子供、専門家、など) ・回答内容への要求(科学的、世間話、など) ・role prompting(あなたは‥です) |
入力データ (input data) | 応答を見つけたい入力または質問 | ・質問、指示、テーマ |
出力表示、形式(output indicator) | 出力のタイプや形式を示します。 | ・箇条書き、見出し(h2~h6) ・表(テーブル) ・プログラムコード ・文字数指定 |
質問や指示をするときに、どのような点に注意してプロンプトを作成すれば良いか、ガイドは詳しく説明しています。次で見てみましょう。
プロンプトにおける技術
プロンプト作成においては、具体的な情報入力がある方が結果が良くなりますが、特に数学的な問題など、統計的な機械学習では回答が得にくい領域では、高度な技術が必要になると述べています。
それを改善するためのテクニックも含めて、以下の表にまとめました。
詳細については、ガイド本文を参照いただきたいと思いますが、現状のLLMの能力と限界がどこにあるか、分かるのではないかと思います。
情報抽出、会話、コード生成はAIの得意な分野、推論は苦手分野なんだね。
必要な情報を提供するなどして、AIに回答させる必要があるということが分かったよ。
項目 | 内容、特徴 | プロンプトにおける技術 |
質問 | 最適な結果を得るためには、タスクに関連した例や文脈が具体的であるほど、結果が良くなる。 | ・シンプルなプロンプトから始め、要素や文脈を追加しながら、反復的に最適な結果を得る ・タスクをシンプルなサブタスクに分解する ・zero-shot prompting (例を提供せず直接回答を求める) →LLMではある程度の精度が得られる ・few-shot prompting (例を提供して直接回答を求める) Q:例1 A:例1 Q:質問 A: (またはダブルスラッシュで表現 Q//A) |
指示 「書く」 「分類する」「要約する」「翻訳する」「並べ替える」など | 指示はプロンプトの最初に配置し、指示と文脈を区切るための区切り記号を使用することを推奨 | ・(例)### 指示 ###以下のテキストをスペイン語に翻訳してください。 Text: “hello!” |
テキスト要約 | 記事やコンセプトをクイックで読みやすい要約にまとめる | ・(例){文章} 上記の文章について1文で説明してください。 A: |
情報抽出 | 与えられた段落から情報を抽出する | ・(例){文章} 上記の文章において言及されている {抽出したい情報}を述べてください。 |
テキスト分類 | テキストを分類する指示 指示の他にデータ入力や例示などの情報提供が必要 | ・(例)テキストをneutral、negative、またはpositiveに 分類してください。 テキスト:先日の休暇はまずまずでした。所感: neutral テキスト:この食べ物はまずまずでした。 所感: |
会話 | 振る舞い、意図、アイデンティティの指示 (role prompting) | ・(例)以下はAI研究アシスタントとの会話です。 アシスタントの回答は小学生でも理解できるようになっています。 人: こんにちは、あなたは誰ですか? AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか? 人: ブラックホールの生成について教えてもらえますか? AI: |
コード生成 | プログラム言語でのプログラム作成 | ・(例)コード作成指示 “”” テーブル名 departments、カラム=[DepartmentId、DepartmentName] テーブル名 students、カラム=[DepartmentId、StudentId、StudentName] コンピュータサイエンス学科のすべての学生のためのMySQLクエリを作成してください。 “”” |
推論 | 推論タスクを実行するのが困難であるため、更に高度なプロンプトエンジニアリング技術が必要 | ・以下のような複雑な問題に対し、few-shot prompting は完璧なテクニックではない。 例)このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。 ・Chain-of-Thought prompting(中間的な推論ステップを介して複雑な推論を可能にする) →few-shot promptingと組み合わせるとより良い結果が得られる。 例)奇数の数値を合計して、回答するいくつかの例を示してから回答させる。 ・zero-shot promptingの場合、step-by-step(ステップを踏んで)が効果的 |
今後の展望
ガイドの目次を見ると、ここまでの内容は半分程度で以下のようなセクションがまだあります。内容が理解できていないので、ここでは説明できませんが、今後これらの技術を踏まえた新しい理論や手法が出てくるものと思います。
難しすぎてさっぱりわからない
- Self-Consistency(自己整合性)
- 知識生成プロンプティング
- 自動プロンプトエンジニア(APE)
- アクティブプロンプト
- 方向性刺激プロンプティング
- ReAct
- マルチモーダルCoTプロンプティング
- グラフプロンプト(GraphPrompts)
今後の研究に期待しましょう!
最後に
ChatGPTの利用については、世界的な議論になっている状況ですが、技術自体が未知の部分もあり、どのようにAIと向き合っていけば良いか、模索しながら進む必要があります。
今回、DAIR.AIのPrompt Engineering Guideを読み、なんとなくですが、現状のAIの実力が分かり、どのように対話していけばよいか理解できたような気がします。
ただし、日進月歩で技術が進んでいくと思いますので、今後も注目していきたいと思います。
コメント