【プロンプトエンジニアリング超入門】10.生成AIの精度を上げる「論文で証明された4つのテクニック」|Few-shot、思考の連鎖、自己整合性、思考の木

プロンプトエンジニアリング

プロンプトエンジニアリング超入門の最終回です。
この動画では、論文で証明されたプロエンジニアリングのテクニックについて学びます。
この動画では次のような疑問を解消します。

・効果的に生成AIの性能を引き出すプロンプトテクニックは何?
・論文で証明されたテクニックを学ぶメリットは?
・論文で証明されたテクニックを具体的にどのように実現するの?

「フューショット」「思考の連鎖」「自己整合性」「思考の木」という4つのプロンプトテクニックをご紹介します。
今までの動画と重複する内容もありますが、これらのテクニックを学ぶことで、生成AIの理解が深まり、応用力が高まります。
復習のためにも、生成AIの教養のためにも学習するとよいでしょう。

ITやDXについての学びを発信する「キノコード」です。
私は紀貫之の子孫で、文章ではなくコードを書いているので「キノコード」と名乗っています。
ぜひ、チャンネル登録をお願いします。

この記事の執筆・監修

キノコード
キノコード    

テクノロジーアンドデザインカンパニー株式会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
著書「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」や、雑誌「日経ソフトウエア」や「シェルスクリプトマガジン」への寄稿など実績多数。

論文で効果が証明されたプロンプトテクニック

プロンプトエンジニアリング超入門のレッスンはこれで最後です。
最後のセクションでは、「論文で効果が証明されたプロンプトテクニック」についてお話をします。
ご紹介するのは以下の4つです。

1つめ、フューショット(Few-shot)
2つめ、思考の連鎖(Chain of Thought)
3つめ、自己整合性(Self-Consistency)
4つめ、思考の木(Tree of Thought)

なお、最近の生成AIはますます賢くなってきているため、これらのテクニックが不要になりつつあります。
しかし、これらのテクニックを知っておくことは、生成AIの理解にもつながります。
基本を知っておくと、応用が効くようになるケースがあります。
生成AIの教養のためにも、ぜひこれらのテクニックについても覚えてください。
これから、それぞれのテクニックについて詳しく説明していきます。
ぜひ最後までお付き合いください。

フューショット(Few-shot)

まず最初に、Few-shotについて説明をします。
Fewとは少数という意味ですよね。
「shot」とは、機械学習やAIの文脈において「試行」や「例」を意味します。
つまり、少数の例を与えて生成AIにタスクを依頼するという方法です。
いくつかの手順を見せることで、生成AIは、より精度の高い結果を出してくれます。

Few-shotは、以前の動画「具体的な例を挙げる」のセクションで解説した内容です。

具体例をみてみましょう。
「成長とは何ですか?」と問われたら

質問例1: 「成長とは何ですか?」
回答例1: 「成長とは、昨日の自分より一歩前に進むことです。
それは、土に根を張りながらゆっくりと伸びていく木のようなものです。
時間が経つほど強く、大きくなります。」

というイメージで答えてほしいとします。
そしてもう1つ例を与えてみましょう。
「学びとは何ですか?」と問われたら

質問例2: 「学びとは何ですか?」
回答例2: 「学びとは、新しい知識や経験を取り入れることです。
それは、乾いた大地に雨が降り注ぎ、豊な実りを育むようなものです。」

これを回答例として与えます。
「挑戦とは何ですか?」と質問してみましょう

新しい質問: 「挑戦とは何ですか?」  
回答例: 「挑戦とは、自分の限界を超えようとする勇気のことです。
それは、荒れた海を越えて新しい島を目指す船のようなもので、
どんなに風が強くても、波が高くても、その先に何かを見つけるために進み続ける力です。」

と、返ってきました。私が与えた例に似ていますよね。
このように、例をいくつか与えると、より精度の高い結果を出してくれます。
なお1つだけ例を与えて、生成AIにタスクを依頼するという方法のことをone-shotといいます。

今度「成長とは」の回答例だけを与えて、「挑戦とは何ですか?」と質問してみます。

質問例: 「成長とは何ですか?」
回答例: 「成長とは、経験を積み重ねて自己を高めることです。
つまり、小さな流れがやがて大河となるように、少しずつ自分を広げていくことです。」

新しい質問: 「挑戦とは何ですか?」
回答: 「挑戦とは、自分の限界を試し、未知の領域に足を踏み入れることです。
それは、困難や障害が待ち受けているかもしれませんが、その先に成長や達成感が待っている道でもあります。
挑戦は、自分を信じ、前進し続ける力を与えてくれるものです。」

結果が返ってきましたね。最後の、「挑戦は、自分を信じ、前進し続ける力を与えてくれるものです。」の部分は、私が与えた例にはない構成なので、精度が落ちる部分です。

とはいえ、Few-shotよりも精度が落ちるものの、1つの例でそこそこの精度の生成結果を返してくれることを理解していただけたと思います。

また、「Zero-shot」という方法もあります。
「Zero-shot」は、生成AIに具体的な例を与えずに、直接タスクを依頼する方法です。

「挑戦とは何ですか?」と単純に指示をしてみましょう。

質問: 「挑戦とは何ですか?」  
回答: 挑戦には、以下のような特徴があります  
1. 不確実性:結果が予測できない、または自分の力だけでは完全にコントロールできない状況に取り組むこと。  
2. 努力と学び:目標に向かって計画的に行動し、経験を通じて新たなスキルや知識を獲得すること。  
3. 成長と変化:挑戦を乗り越えることで、自分自身がより強く、賢く、または経験豊富になること。  
挑戦は、個人の成長だけでなく、社会やチームの発展にも大きな影響を与えるものです。

生成されました。回答を見てみましょう。
「挑戦には、以下のような特徴があります。」と回答した上で、不確実性、努力と学び、成長と変化をあげてくれています。
その上でそれぞれについて詳細に説明をしてくれています。
例を与えていたないので、Few-shotやOne-shotとは全くちがうテイストの生成結果が返ってきました。

まとめます。
Few-shotは、生成AIに、2つ以上の例を与えて、タスクを依頼する方法です。
精度の高い生成結果を得たい時に使うとよいでしょう。
生成結果をみて、さらに精度をあげたい場合は、例を追加して再度依頼をすればよいでしょう。

One-shotは、生成AIに、1つ例を与えて、タスクを依頼する方法です。
短い文章の場合、十分に精度の高い生成結果を得られます。
短い文章の場合にOne-shotを使うとよいでしょう。

「Zero-shot」は、生成AIに具体的な例を与えずに、直接タスクを依頼する方法です。手軽に答えを得たい時に使うと良いでしょう。

Few-shotの論文は次の通りです。
さらに詳しく知りたい方は、論文を生成AIに読み込ませて、学習してみるとよいでしょう。
https://arxiv.org/pdf/2005.14165

思考の連鎖

AIに難しい問題を解かせたときに、便利なテクニックを紹介します。
そのテクニックは、「思考の連鎖」です。「思考の連鎖」は、英語で「Chain of Thought」と呼ばれています。

Chain of Thought「思考の連鎖」では、問題をいくつかの小さなステップに分けて、それぞれ順番に考える方法です。
たとえば、「目的地に行くのに電車を使うとして、どれくらい時間がかかるか?」という質問の場合、
「ステップ1:家から駅まで歩く時間を考える(10分)」
「ステップ2:電車で移動する時間を計算(20分)」
「ステップ3:駅から目的地まで歩く時間を足す(10分)」
「結論:合計で40分かかる」
と導き出すと言うイメージです。
このように問題をいくつかの小さなステップに分けて、それが論理的につなげていき、結論を出す方法のことを思考の連鎖といいます。
思考の連鎖は、以前の動画「手順を指定する」のセクションで解説した内容です。

「手順を指定する」で紹介した例をもう一度見てみましょう。
桃太郎の勝因を分析するために、
ステップ1:成功するために必要な要素をすべて挙げてください。
ステップ2:それぞれの要素がどんな場面で役に立ったか考えてください。
ステップ3:一番重要だった要素を選び、その理由を説明してください。
という指示で分析をしてもらいましたね。
これは勝因の分析のフレームワークで、KSF、Key Success Factorsのフレームワークです。
また、生成結果を表形式でまとめてもらうように依頼をしましょう。

# 指示
桃太郎の勝因はなんですか?

ステップ1:成功するために必要な要素をすべて挙げてください。
ステップ2:それぞれの要素がどんな場面で役に立ったか考えてください。
ステップ3:一番重要だった要素を選び、その理由を説明してください。

# データ
昔々、ある村におじいさんとおばあさんが住んでいました。おじいさんは山へ柴刈りに、おばあさんは川へ洗濯に行きました。すると、川から大きな桃が流れてきました。おばあさんはその桃を家に持ち帰り、二人で切ってみると、中から元気な男の子が出てきました。
二人はその男の子を「桃太郎」と名付け、愛情を込めて育てました。桃太郎は成長するにつれて、とても強く、賢い若者になりました。ある日、鬼が島に住む鬼たちが村を襲い、村人たちの財宝を奪いました。桃太郎は村を救うために鬼を退治する決意をします。
おじいさんとおばあさんは、桃太郎にきびだんごを持たせ、旅の無事を祈って送り出しました。旅の途中で、犬、猿、キジに出会います。桃太郎はそれぞれにきびだんごをあげ、仲間に加えました。
ついに鬼が島に到着した桃太郎たちは、力を合わせて鬼たちと戦いました。犬が噛みつき、猿が引っかき、キジが空から攻撃し、桃太郎はその力をもって鬼のボスを打ち負かしました。鬼たちは降参し、奪った財宝をすべて返しました。
桃太郎は仲間たちと共に村に戻り、村人たちに財宝を返しました。村は再び平和になり、桃太郎は英雄として村人たちに称えられました。
めでたし、めでたし。

# 出力形式
要素、役に立った場面を表形式にまとめた上で、一番重要だった要素とその理由を教えてください

出力結果:
# 桃太郎の勝因に必要な要素

以下の表は、桃太郎が勝利するために必要だった要素と、それぞれがどの場面で役に立ったかを示しています。

要素 役に立った場面
桃太郎の強さ 桃太郎は成長して非常に強く、鬼のボスを打ち負かす力を持っていました。
賢さ 旅の途中で犬、猿、キジを仲間に加える方法を考え、協力を得ることができました。
仲間との協力 旅の途中で犬、猿、キジにきびだんごを分け与え、彼らを仲間にすることで鬼退治に成功しました。
きびだんご 犬、猿、キジを仲間に引き入れるための報酬として役立ち、協力を得るための重要なツールとなった。
鬼の財宝を取り戻す目的 村人を助けるため、鬼退治を決意し、目的を持ち続けて行動しました。
村人の支援と応援 村の人々の期待と祈りが桃太郎を勇気づけ、成功に向けて動機づけとなりました。
## 一番重要な要素: **仲間との協力**

### 理由:
桃太郎が鬼を退治できた最大の要因は、犬、猿、キジという仲間たちの協力です。
それぞれの動物が自分の特技を生かして戦い、桃太郎との連携で鬼たちを打ち倒しました。
もし桃太郎が一人で鬼の島に向かっていた場合、鬼の強さには太刀打ちできなかったかもしれません。
仲間たちと力を合わせることによって、桃太郎は鬼退治を成功させ、財宝を取り戻し、村を救うことができました。

要素を洗い出してくれましたよね。
例えば、要素として桃太郎の強さを挙げてくれています。そして、役に立った場面として「桃太郎は成長して非常に強く、鬼のボスを打ち負かす力を持っていました」と教えてくれています。
他にも、要素として「きびだんご」をあげています。役に立った場面として「犬、猿、キジを仲間に引き入れるための報酬として役立ち、協力を得るための重要なツールとなった」と教えてくれています。
そして、最大の要因も分析してくれ、「桃太郎が鬼を退治できた最大の要因は、犬、猿、キジという仲間たちの協力です」と教えてくれています。
これが最大の要因であるのは「それぞれの動物が自分の特技を生かして戦い、桃太郎との連携で鬼たちを打ち倒しました」と説明してくれています。
非常に良いですよね。

このように具体的なステップを指示をしてから生成してもらうと精度があがります。
しかし、具体的なステップの指示ができない場合はどうすればいいでしょうか?
その場合は、ステップバイステップで考えてくださいと指示をするとよいです。

例をみてみましょう。
例えば、次のような算数の問題があったとします。
「最初に40リットルの水が入ったバケツがあります。2分で毎分5リットルの速度で水を入れ、その後3分で毎分3リットルの速度で水を入れました。バケツには合計何リットルの水が入りますか?」
これを生成AIにといてもらいましょう。
計算すると、59リットルが正解です

精度の違いがわかりやすように、ChatGPT3.5 Turboにといてもらいましょう。

最初に40リットルの水が入ったバケツがあります。
2分で毎分5リットルの速度で水を入れ、その後3分で毎分3リットルの速度で水を入れました。
バケツには合計で何リットルの水が入りますか?

59リットルが正しい答えなのに、「35リットルの水が入ります」と間違った答えが出てきました。
最初の質問に、「ステップバイステップで考えてください」と付け加えてみましょう。

最初に40リットルの水が入ったバケツがあります。
2分で毎分5リットルの速度で水を入れ、その後3分で毎分3リットルの速度で水を入れました。
バケツには合計で何リットルの水が入りますか?
ステップバイステップで考えてください。

59リットルという正しい答えが返ってきました。

以上のように、「思考の連鎖」はAIが複雑な問題を解決する際に役立ちます。
具体的なプロセスを指示してあげると、より良い結果が得られます。
プロセスを指示する方が精度が高くなることが多いですが、もしプロセスを指示することが難しい場合は、「ステップバイステップで」というマジックワードを使ってみてください。

「ステップバイステップで考えてください」と指示を追加するだけなので、ぜひ試してみてください。

思考の連鎖の論文は次の通りです。
https://arxiv.org/pdf/2201.11903

自己整合性(Self-Consistency)

生成AIに同じ質問をすると、毎回少しずつ違う答えが返ってくることがあります。
その答えの中には、正解もあれば、間違いもあります。
そんなときに役立つのが「自己整合性」です。

自己整合性とは、同じ質問を何度か行い、一番多く出てきた答えを採用することで、正解の確率を高める方法です。
これによって、間違った答えが選ばれる可能性を減らすことができます。
自己整合性は、英語でSelf-Consistencyと呼ばれています。
「Consistency(コンシステンシー)」は一貫性という意味です。
つまり、Self-Consistencyとは、AIが自分でその一貫性を保つ方法のことを指します。

例をみてみましょう。
指示文は、「次の質問に対して、3回推論を行い、それぞれの回答を出力してください。その後、3つの回答の中で最も頻度が高かった回答を最終的な答えとして提示してください」と指示をすればいいです。
思考の連鎖の時と同じ問題をといてもらいましょう。
問題文は、「最初に40リットルの水が入ったバケツがあります。2分で毎分5リットルの速度で水を入れ、その後3分で毎分3リットルの速度で水を入れました。バケツには合計で何リットルの水が入りますか?」です。

精度の向上がわかりやすいように、古めのモデルであるChatGPT4を使ってみましょう。

# 指示
次の質問に対して、3回推論を行い、それぞれの回答を出力してください。
その後、3つの回答の中で最も頻度が高かった回答を最終的な答えとして提示してください。

# 質問
最初に40リットルの水が入ったバケツがあります。
2分で毎分5リットルの速度で水を入れ、その後3分で毎分3リットルの速度で水を入れました。
バケツには合計で何リットルの水が入りますか?

出力:
推論
1回目の推論: 最初に毎分5リットル入れていたため、2分間で10リットル水が入ります。  
その後、毎分3リットルで3分間入れたため、9リットル水が入ります。
合計で19リットルの水が入ります。

2回目の推論: 最初の40リットルの水に、2分間で毎分5リットルで10リットル、3分間で毎分3リットルで9リットルの水が加わります。
合計で40+10+9=59リットルの水が入ります。

3回目の推論: 最初に40リットルの水が入った後、2分間で10リットル、3分間で9リットルの水が入ります。  
合計で40+10+9=59リットルの水が入ります。

最終的な答え: 合計で59リットルの水がバケツに入ります。

1回目の推論が19リットル、2回目と3回目の推論が59リットル。
最も多かったのが59リットルなので、最終的な答えとして「合計で59リットル」という答えを返してくれました。
このように、自己整合性は、何度も試すことで正解に近づく方法です。
自己整合性を利用することで、複数回の推論結果から最も頻度の高い答えを選び、正確性を高めることができます。
ぜひ試してみてください。

自己整合性の論文は次の通りです。
https://arxiv.org/pdf/2203.11171

思考の木(Tree of Thought)

最後に、「Tree of Thought」というテクニックについて紹介します。
難しい問題に直面したとき、いろいろな視点で結論を出したいときがありませんか?
そんな時に役に立つのが、Tree of Thoughtです。
「Tree of Thought」を日本語に訳すと「思考の木」です。

例えば、3人の異なる専門家が一つの問題に対して、それぞれ異なる視点から解答を示します。
そして、専門家たちはそれぞれの意見を持ち寄り、不適切なものを省きながら、最も正確な解答に近づけていきます。
この手順を踏むことで、多角的な視点で結論を出すことができます。

つまり、思考の木では、問題を解決するために、まず複数の解決策や選択肢を「枝」として展開します。
各ステップで異なる解決策やアプローチを考え、それらを枝のように広げていくことで、様々な可能性を検討するという方法です。
その中で、効果が低いと判断される枝を切り落とし、より適切と思われる解決策に絞り込んでいきます。
思考の木と呼ばれる理由がお分かりになりましたでしょうか?

具体例でみていきましょう。

「子供が最初リビングルームにいます。
そして、お皿を持ってキッチンへ歩きます。
お皿に卵を入れて、お皿を寝室まで運びます。
そして、お皿を逆さまにします。
その後、子供はお皿を持ってキッチンに向かいます。
卵はどこの部屋にありますか?」
という質問をといてもらいましょう。

寝室でお皿を逆さまにしているので、卵は寝室にありますよね。
精度の向上がわかりやすいように、古めモデルであるChatGPT3.5 Turboを使ってみましょう。

子供が最初リビングルームにいます。
そして、お皿を持ってキッチンへ歩きます。
お皿に卵を入れて、お皿を寝室まで運びます。
そして、お皿を逆さまにします。
その後、子供はお皿を持ってキッチンに向かいます。
卵はどこの部屋にありますか?

卵は寝室にあるはずなのに、生成AIから「卵はキッチンにあります。」と答えが返ってきました。
Tree of Thoughtで解いてもらいましょう。

具体的なプロンプトです。

# 指示
3人の異なる専門家が以下の質問に答えます。
最初に、専門家全員が、質問に対する答えとその理由を共有してください。
専門家全員が他の人の意見を聞いて自分が間違っていないか確認をしてください。
間違っていることに気付いた場合は、議論から退場してください。
残った専門家は次のステップに進み、同様のプロセスを繰り返してください
最後の一人になるまで議論を繰り返して答えを提示してください。

# 質問
子供が最初リビングルームにいます。
そして、お皿を持ってキッチンへ歩きます。
お皿に卵を入れて、お皿を寝室まで運びます。
そして、お皿を逆さまにします。
その後、子供はお皿を持ってキッチンに向け付けます。
卵はどこの部屋にありますか?

出力:
専門家1:卵は寝室にあります。子供が最後にお皿を運んだ場所が寝室だからです。

専門家2:卵はキッチンにあります。なぜなら、その後子供はお皿を持ってキッチンに向かったからです。

専門家3: 卵は散らばっています。なぜなら、子供が逆さまにしたお皿を持っていたからです。

議論: 専門家1と専門家2の議論を聞いた後、専門家3は、自分が間違っていると確信し、議論から退場しました。
専門家1と専門家2は引き続き議論を続けました。
専門家2が指摘したように、子供が最後にお皿を持ってキッチンに向かったという情報は重要です。
しかし、これは卵の最終的な位置を決定するものではなく、子供がお皿をどこに向けたのかという行動の結果を説明するものだと専門家1が説明しました。
そのため、専門家2も自分が間違っていることに気づき、議論から退場しました。

結論: 結局、専門家1だけが残りました。その答えは卵が寝室にあるというものでした。
子供がお皿を逆さまにして移動したのは寝室だけだったからです。
それ以降の子供の行動はお皿を持って移動しただけで、卵は寝室にあります。

専門家3は、自分が間違っていると確信し、議論から退場しました。
そして専門家1と2は議論を続けました。しかしその後、専門家2も、自分が間違っていると確信し、議論から退場しました。
結論、「専門家1だけが残りました」
その答えは「卵が寝室にある」というものでした。
正しい答えが出ていますよね。

このように、「思考の木」を用いることで、複数の可能性を同時に検討し、段階的に絞り込むアプローチが可能となります。
まとめると、思考の木を活用することで、複数の視点から問題を解決し、最適な答えにたどり着くことができます。複雑な問題に取り組む際に、ぜひ試してみてください。

論分は次のURLです。
https://arxiv.org/pdf/2305.10601
https://arxiv.org/pdf/2305.08291

生成AIは自分で考える力を手に入れた

生成AIが近年、どんどん賢くなっていっている理由の1つが「思考の連鎖」「自己整合性」と言われています。
実は、2024年の前半までの生成AIは、時間で考えて、答えを出しているわけではなかったのです。
人間からの質問や指示に対して「それっぽい答え」を出しているに過ぎなかったのです。
つまり、生成AIは、膨大な文章を学習させています。
そのパターンを覚えています。
AといえばB。
BといえばC。
と言ったパターンを覚えています。
つまり、人間からの質問や指示に対して、学習しているパターンに基づいて答えを返していただけで、自分で考えるわけではありませんでした。

しかし、「思考の連鎖」「自己整合性」のおかげで、生成AIは、自分で考える力を手に入れました。
思考の連鎖で論理的に考えて、自己整合性で自分が考えた論理に誤りがないか確認をする。
まるで人間のようですよね。
最近の生成AIでは、Chain of Thought「思考の連鎖」とSelf-Consistency「自己整合性」が標準実装されています。
その影響もあり、生成AIが賢くなっているのです。

まとめ

この動画で学んだことをまとめます。

・論文で効果が証明された4つのプロンプトテクニックを理解した
・「フューショット」「思考の連鎖」「自己整合性」「思考の木」の使い方を学んだ
・生成AIの性能を最大限に引き出す方法を身につけた

明日から、これらのプロンプトテクニックを実際に試してみてください。

個人の学習も法人のお客様もキノクエスト

個人のお客様向けのキノクエストでは、生成AIの活用事例の講座、無料で簡単に生成AIアプリを作れるDifyの講座が学べます。 また、Pythonを使ったRAGやファインチューニングや、企業オリジナルなLLMを構築できる学習コンテンツもあります。 動画で学んだ内容の確認問題やキノクエスト限定の認定試験で、知識の定着もバッチリです。
ログイン後、すぐに生成AIを使える環境であなたの学習をサポートします。
詳しくはYouTube動画の概要欄にあるURLからご確認ください。

法人のお客様には「キノクエストforBiz」がおすすめです。
YouTubeで培った多様なコンテンツを基に、DXを加速させる人材を育成するeラーニングサービス「キノクエストforBiz」を提供。 キノコードの動画を著作権や利用規約を気にすることなく安心して学習することができます。 今ならリスキリング助成金の申請・確定通知を受けられれば、キノクエストの料金の60~75%が国から助成されます。 弊社の提携社労士事務所が申請などをまるっとサポート。 高い費用対効果と助成金の活用で、DX人材の育成をサポートします。

キノクエストforBizサービス内容について

初回相談は無料です。下記フォームから、お気軽にご相談ください。
https://kino-code.com/contact-form/

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト