ChatGPTの「プロンプトエンジニアリング」に関する重要知識をまとめました。
ChatGPTはソフトウェアです。
したがって、「使い方」が存在しています。
その「使い方」の中核をなすのが、ChatGPTへのコマンド、つまり「プロンプト」です。
プロンプトの精度によって、出力の精度が大きく変わることが数多くの研究で示されています。
しかし、プロンプトは自然言語かつ自由度が非常に高いので、プログラミング言語と比べて選択肢が多く、なかなか「どうすればいい」という法則を知ることが難しくなっています。
そこで今回は前回に引き続き、最も多くの書籍やサイトから引用されているプロンプトの教科書「プロンプトエンジニアリングガイド」を主たる文献として、様々な精度を高めるプロンプトの手法をご紹介します。
1.表記法の注意
ChatGPTは自然言語を理解できますが「精度の上がりやすい記法」が存在しています。
1.データや意味は"""で区切る
データや意味の区切りに、"""三重クオーテーション""" を使うことがOpenAI社のドキュメントでの標準になっています。
2.文章の最後には区切り文字
文章の最後には「。(句点)」などの区切り文字を入れると、ChatGPTによる誤解が減ります。
3.文章で書く
プロンプトは文章で書きます。単語だけのプロンプトに比べて、より出力の精度が上がる傾向があります。
4.丁寧語
プロンプトは丁寧語で書くことが推奨されています。これは「丁寧語で書かれた文章」のほうが、中身が濃い傾向にあるからだと推測されます。
例えば、同じことを説明させても、ぶっきらぼうに聞いたときと丁寧に聞いたときとでは、出力が結構異なります。
ーぶっきらぼうバージョン
ー丁寧語バージョン
5.マークダウン
プロンプトをより明確にするには「マークダウン」という記法を利用するのが推奨されています。
マークダウン記法(Markdown)は、テキストベースのマークアップ言語の一つで、読みやすく書きやすいプレーンテキスト形式を目的としています。
ウェブ上での記事やドキュメント、掲示板の投稿などによく使われています。
見出し(Headings)
# で始めることで見出しを作成できます。# の数で見出しのレベルが変わります(# は最大で6つまで)。
# 見出し1
## 見出し2
### 見出し3
#### 見出し4
##### 見出し5
###### 見出し6
段落(Paragraphs)
段落は空白の行を挟むことで作成します。
改行を入れたい場合は、行の末尾にスペースを2つ入れます。
強調(Emphasis)
* または _ を使ってテキストを強調できます。
*斜体* または _斜体_ で斜体になります。
**太字** または __太字__ で太字になります。
***太字斜体*** または ___太字斜体___ で太字と斜体の両方になります。
リスト(Lists)
箇条書きリストは、* 、+ 、または - で作成できます。
* 項目1
* 項目2
* 項目3
番号付きリストは数字に続けて . を使います。
1. 第一項目
2. 第二項目
3. 第三項目
リンク(Links)
[表示テキスト](URL) でリンクを作成できます。
例: [Google](http://google.com)
画像(Images)
![代替テキスト](画像URL) で画像を挿入できます。
例: ![OpenAI Logo](http://example.com/logo.png)
コード(Code)
インラインコードはバッククォート(`)で囲みます。
例: `コード`
複数行のコードブロックはバッククォートを3つ使用して囲みます。
引用(Blockquotes)
> を使って引用を作成できます。
例: > これは引用です。
水平線(Horizontal Rules)
--- 、*** 、または ___ で水平線を挿入できます。
これらの基本的なマークダウン記法を使って、テキストドキュメントに構造を加え、より読みやすく表現豊かな内容を作成することができます。
2.プロンプトの構成要素
つぎに「プロンプトの構成要素」についてです。
プロンプトエンジニアリングガイドには、プロンプトには次のような特定の要素が含まれているとしています。
ただし、この中に含まれている「コンテキスト」が何を示しているかは、文献によってかなりバラツキがあります。
例えば以下の文献では、プロンプトエンジニアリングは3要素と定義しています。コンテキストには「役割」「目的・背景」「要件」「参考例・サンプル」「アウトプット例」などが含まれているイメージです。
また別の文献では、以下のように定義されています。
①に記されている「役割」は精度を大きく変えることがあるため、別枠で紹介されている文献が多いようです。目的や条件、回答のサンプルも同様です。
わたしが個人的にわかりやすいな、と思ったのは以下の文献です。
命令は#依頼、出力インジケーターは#型式、コンテキストは#参照となっています。
特徴的なのは、#役割を強調している点。そして、#ルールと#評価の②つの項目です。
まず#ルールですが、以下の8つを取り上げています。
よく見ると、出力形式や参照情報と被っている部分もあるのですが、「禁止」や「順番」あるいはできるだけ詳細に、といった粒度の話も含まれているので、参考となるでしょう。
また、以下のプロンプトのテクニックに関わりますが、「ChatGPTの出力した結果を、ChatGPT自身に評価させる」という、再帰的な処理を含めると、一度のプロンプトで精度を上げやすくなります。
3.プロンプトの精度を上げる技巧
さて、プロンプトの構成要素を大まかに知ったところで、プロンプトに導入すると精度の上がることが知られている重要な「技巧」についてご紹介します。
基本:zero-shot プロンプト
「ゼロショット(Zero-shot)プロンプト」とは、特定のタスクに対する事前のトレーニングデータや例を一切使用せずに、そのタスクを実行するための指示や質問です。
難しく書いていますが、端的に言うと、「参考情報無しで命令だけ与える」のがzero-shotプロンプトであり、通常なにも知らずにChatGPTを使うときは、このプロンプトを使っているでしょう。
例)
「次のパラグラフの要約を提供してください。」
「このレビューの感情はポジティブですか、ネガティブですか?」
「量子コンピューターはどのように機能しますか?」
発展:Few-shotプロンプト
Few-shotプロンプトは、モデルに対して具体的な例をいくつか示し、その後に解決したいタスクを提示することで、モデルのパフォーマンスを向上させる手法です。
注意点ですが、下のように価値判断の例を示す場合、その例は、偏っていなくバランスを取ったものを。また、例示はランダムに与えるほうが良いとされています。
たとえばポジティブの例を下に固めたり、ニュートラルの例ばかりを与えると、間違った回答になりやすいことが研究結果として報告されています。
発展:ReAct(reason + Act)プロンプト
ReActプロンプトは、通常のプロンプトの最後に「Thought:」「Action:」「Observation:」の3つを付け加えるだけで、回答精度の向上を狙えるプロンプトです。
このプロンプトの利点は
「考えなければならないこと」
「やらなければならないこと」
「その後の経過観察」
について、総合的に出力させることができる点です。
発展:CoTプロンプト
CoT(Chain of Thought)プロンプトは、特定の問題を解決するための論理的なステップを記述することによって、回答の精度をあげる技巧です。
ここから先は
生成AI時代の「ライターとマーケティング」の、実践的教科書
ビジネスマガジン「Books&Apps」の創設者兼ライターの安達裕哉が、生成AIの利用、webメディア運営、マーケティング、SNS利活用の…
この記事が気に入ったらサポートをしてみませんか?