はじめに
今回はプロンプトエンジニアリングについて。
会社のトップ技術者集団の方たちが会社の未来について語っていて、
聞いたことはあるけどプロンプトエンジニアリングって...?
となっている場合ではないと思い同じ境遇の人たちがこの記事を見て
ふーん、まあそんな感じなのね。ってなってもらえたらいいなと思います。
とりあえず今回の主役に聞いてみた
この時点でも十分すごいと思うのですが、chatGPTの力はこんなものではない!
プロンプトエンジニアが年収5000万円っていう記事もあったり、
この時点で興味が湧きますし、奥が深いです...
プロンプトエンジニアリングの基本
大規模言語モデル(Large Language Model、LLM)
近年世界中の注目を集める文章を扱うAIモデル。
OpenAIのChatGPT や GoogleのBard などで使われています。
こんなコードを書いて。とかだけじゃなく、普通に生活してる中でも使えるところは結構あるかなと思います。翻訳して。とか、この言葉ってどういう意味?とか。
最近ではエンジンに組み込む動きもあることから、最新の情報が返ってくるようになるんだとか。ググり力じゃなくてChatGPT力とか言われるようになるんですかね...
chatGPTの問題点
ハルシネーション(幻覚) という問題があります。簡単に言うと、正しい答えを返さない、虚偽の回答をする。といったこと。頻繁に使っている人だとこの問題に直面した人もいるんじゃないかと思います。
タルサス・モンス、調べました。
そんな山はないです。(笑)
あとは個人情報や機密情報の漏洩もあります。業務でChatGPTの利用を禁止するところもあるので、使い方には十分注意が必要です。
OpenAIが推奨するプロンプト作成のコツ
これまでChatGPTに質問する時は特に何も考えていませんでしたが、
やはりコツはあるようです。
1.最新のOpen AIモデルを使用する
例えば、GPT-3.5を使うより GPT-4 を使った方が比較的新しい情報を用いて回答してくれる。ということです。
2.プロンプトの最初に指示を書く
×××××××××××××××××××××××××××
上記を翻訳してください。
このように書くよりも
以下のテキストを翻訳してください。
×××××××××××××××××××××××××××
このように書いた方が期待する出力が得られやすくなるということです。
特に、ChatGPTに対し要約や翻訳などのタスクを任せる場合は、指示とコンテキストを明確に分けると意図した回答が得られます。分ける場合は、#や”などの区切り記号を使いましょう。
3.具体的かつ詳細に指示する
ChatGPTに関して説明してください。
と質問するよりも
初心者でもわかりやすく、200字程度で説明してください
のように書いた方が良いみたいです。
4.目的の出力形式を例で明示する
例えば、OpenAI社の概要を知りたい場合、「#出力:設立年、事業内容、会社本拠地住所、資本金」のように具体的な項目や内容例を提示しましょう。
OpenAI社の概要を説明してください。
に追加して
#出力:設立年、事業内容、会社本拠地住所、資本金
と書くと形式に沿って簡潔な回答が得られます。
5.ゼロショットから始める(具体例を示し、微調整する)
ChatGPTに具体例を挙げながら指示を出すプロンプトを「ファインショット」、具体例を入れない指示を「ゼロショット」と呼びます。
プロンプトは、具体例を提示せずに書く「ゼロショット」から始め、徐々に具体例を追加していく方法がおすすめです。
まずは具体例を提示せずに「ゼロショット」からプロンプトを作成。
ゼロショットのプロンプトで求める回答が得られなかった場合は、いくつか例を示すフューショット形式で微調整を行い、プロンプトを作成します。
6.形容表現ではなく、「数字」で指示を出す
大雑把で不明確な説明や表現を減らし、明確に指示を出すことで精度の高い回答が得られます。
そのため、「なるべく」「かなり」「少なく」「ある程度」などの形容詞を指示に使うのは控え、「3〜5文」「3点」などの具体的な数値をプロンプトに含めて、ChatGPTに指示を出しましょう。
ChatGPTに関して、ある程度の長い文章で説明してください。
というよりは、
ChatGPTに関して、100字以内で簡潔に説明してください。
と指示をした方が、簡潔な回答入力が期待できます。
7.何をしてはいけないかではなく、何をすべきかを言う
ChatGPTに指示する場合、してはいけないことではなく、何をすべきかを具体的にプロンプトに含めたほうが回答の精度がよくなるようです。
ChatGPTに関して、専門用語を使わずに簡潔に説明してください。
ではなく、
ChatGPTに関して初心者でもわかるように簡潔に説明してください。
こういった感じです。
その他のテクニック
1.Chain-of-Thought Prompting
複数の中間的な推論ステップを介して複雑な推論を実現すること。
上記は簡単な例ですが、結果を得るために少し複雑な過程を踏まなければならない時に有効なテクニックになります。
2.Self-Onsistency(自己整合性)
Wang et al. (2022)によって提唱され、「連想思考プロンプティングで使用される単純な貪欲復号化を置き換えることを目的としています」と述べています。アイデアは、few-shot CoTを通じて複数の多様な推論パスをサンプリングし、生成物を使用して最も整合的な回答を選択することです。これにより、算術および常識的推論を必要とするタスクにおけるCoTプロンプティングのパフォーマンスが向上します。
例.
Q:林には15本の木があります。林業従事者は今日、林に木を植える予定です。その後、21本の木があります。林業従事者は今日、何本の木を植えましたか?
A:15本の木から始めます。後で21本の木があります。差は、彼らが植えた木の数でなければなりません。したがって、彼らは21-15 = 6本の木を植えなければなりません。回答は6です。
Q:駐車場に車が3台あり、さらに2台の車が到着した場合、駐車場には何台の車がありますか?
A:駐車場には既に3台の車があります。2台の車が到着しました。これで、車が3+2 = 5台あります。回答は5です。
Q:リアは32個のチョコレートを持っており、彼女の姉妹は42個のチョコレートを持っています。彼らが35個食べた場合、彼らが残したピースの数は何ですか?
A:
上記が一例です。
さいごに
これまでは特に何も考えずに答え教えてくれーって感じで質問していましたが、様々なテクニックを利用すればより正確に、より求めている答えが返ってくることがわかりました。
他にも意識しないとそんな聞き方しないな...というようなテクニックが色々あります。
今後極めていけば業務が格段と楽になるだろうな...と思うので引き続き学習していこうと思います。