ChatGPTでプロンプトエンジニアリングが必要な理由
前回の記事「プロンプトエンジニアリングは『エンジニアリング』であるのが鍵」では、エンジニアリング(システムズエンジニアリング)の観点からプロンプトエンジニアリングについて解説しました。今回はもう少し角度を変え、具体的にプロンプトエンジニアリンに手法について述べたいと思います。
私たちがChatGPTを使う理由は多くの場合、何らかの「課題解決をしてほしい」ということだと思いますが、どのような質問に対しても、ChatGPTはそれらしい答えを出してくれます。
ただしこれはChatGPTがあなたの質問を吟味して、一番最適な答えを出してくれた・・・わけではありません。
あなたの書いた文章に続きそうな単語や文章の中から、確率の高いものを後ろにある大規模言語モデル(LLM)のデータセットの中から選んで出力しているだけなのです。
(問題:「むかしむかし・・」の次に来る文章で確率の高いものは?
答え:「おじいさんとおばあさんが・・・」)
だから一般的な質問にはとても強いのですが、特定のケース、踏み込んだ課題や悩みは苦手です。
もちろんそういう場合も解答を返してくれますが、そういうときにも一般的な解答(よくある解答)を返してきます。(「うーん・・・聞きたいのはそういうよくある意見じゃないんだけど・・・」)
普通の生活上の質問なら結構それで十分だったりしますが、ビジネス等個別の事情が多いケースの場合、それでは不十分ということが多いと思います。
そのため、一般解ではなく、自身のビジネスなどで発生する複雑な問題で、世間一般が納得する解ではなく、自分のための解答が知りたい、という場合には、質問の仕方も工夫する必要があるわけです。
繰り返しになりますが、ChatGPTは質問の内容を読んで、論理的に解答を組み立てているわけではありません。
このことは、ChatGPTに計算問題を尋ねるとわかります。
ChatGPTはこのように答えてくれますが、これは電卓とかExcelのように「計算」をして解答しているのではなく、大規模言語モデル(GPT-3.5や4)のデータセットを見ながら、”1+1=”の次は”2”という数字が来る確率が高いと判断しているのです。
要するに問題集の答えを見ながら丸写しで解答しているわけですね。
ChatGPT君は世界中の参考書や問題集を持っているので、簡単な問題なら正解を出しますが、あまり普段見ない、例えば大きな数の計算、複雑な計算だとしばしば間違えます。
課題解決の場においても、あなたの質問内容に対して、誰かが既に解答したことのある問題なら、ChatGPTは明確な解答を示してくれます。
しかし、まだ誰も解いたことのない質問だと、ChatGPTは途端に曖昧な解答を返すようになります。
これは「未知の問題」に対してというばかりでなく、あなた自身あるいはあなたの会社など個人的で一般化できない問題に対しても同じですね。
こういう問題に対しては、こちら側でその問題の範囲を絞ってあげたり、論理の道筋もやはりこちらで示して上げる必要があります。
要は人間側で、彼の(演繹や論理構築ができない)弱点をカバーしてやることができれば、ChatGPT君は私たち個人ではとても有し得ない世界中の知識を持っているわけですから、もの凄く有益な解答を得ることもできるのです。
これが「プロンプトエンジニアリング」の本当の意味です。
「ChatGPT活用法」みたいな本で「お詫びのメールの書き方のプロンプトエンジニアリング」みたいな感じで述べられていることより、もっと深い意味があることを知っていただければと思います。
「Chain of Thought(思考連鎖)プロンプト」と「Tree of Thoughts(思考の木)プロンプト」とは
ここでは代表的な2つのプロンプトエンジニアリングを紹介します。どちらも2023年に論文が出たばかりの最新の手法であると同時に、元となる考え方はとてもベーシックなものです。
Chain of Thought(COT)プロンプト
2023年1月にGoogle のAI研究所のチームが発表した論文によると、「Chain of Thought(COT)プロンプトとは、問題の回答をすぐに求めるのではなく、中間推論のステップを経て、段階的な推論(思考連鎖)を重ねて解答に導く手法」です。
計算問題で、普通のプロンプトと「Chain of Thought(COT)プロンプト」を比較してみます。
問題に対しすぐに答えを求めた例。ChatGPT君ってば見事に当てずっぽうの解答を示しましたね。
そこでChain of Thoght(思考の連鎖)のやり方を示し、ひとつひとつ現状を整理しながら問題解決を行います。
つまりある程度複雑な問題や課題に対しては、COTプロンプトで、きちんと論理の流れを示してあげるようにすることで、よい解答を導くことができるようになります。
例えば問題や課題に対して、どういう状況になることを目指しているのか、まずその目標やゴールを示す。さらにその条件を示したり、現状の制約を整理して列挙するといった手法が挙げられます。
Tree of Thoughts(TOT)プロンプト
このようにChain of Thoughtプロンプトは問題の解決を論理的、演繹的に行うよう思考の流れを示すのですが、これは一方通行のため、もっと難しい問題の場合、間違った答えに導いてしまうこともあります。
そこで、答えを複数提示して、その中から適切な回答を選ぶSelf-consistency with CoT(自己整合型COT)プロンプトが考えられました。
ただこの方法も複雑なプロセスを経るような問題では、全部の回答を片っ端から検証したり、評価したりするのは、リソースがいくらあっても足りなくなります。
GoogleのDeepMindチームとスタンフォード大学の共同研究で今年の5月に発表された「Tree of Thoughts(TOT)プロンプト」は、「ゴールへの道筋がいくつもあって正解に辿り着くのが難しい問題」で威力を発揮します。
この手法は、AIの囲碁や将棋、あるいは自動車の自動運転などで活用される「強化学習」を応用したものです。(DeepMindは、2015年に世界一の囲碁棋士を破ったAlphaGoを開発したチーム。)
論文では「Game of 24」という、任意の4つの数字を使い、答えが24になる四則計算(+,―,✕,÷)の方法を見つける計算ゲームが使われています。
例えば「2,2,5,7」という4つの数字が与えられた場合を考えると、
答えは「2×5+2×7=10+14=24」となりますね。
ChatGPTに「4,9,10,13」を解いてもらいましょう。
予想通り失敗。
「Chain of Thought(COT)」でやったように 演繹的にステップバイステップで考えたいですが、この場合どういう順番でやればよいのかわかりません。
現実の問題でも、どこから手を付ければよいのかわからない、というのは少なくないですよね?
こういうとき「選択木(Decision Tree)」の概念で考えます。
ゴールに向かうのに、場面場面でいくつのも選択肢がある。それをどのルートで行けばよいか考えていくやり方です。
下図のように木を逆さにしたような形になりますから、「選択木(Decision Tree)」といいますが、人工知能(特に強化学習)ではおなじみの概念でもあります。
これで「Game of 24」を解くには、4つの数字からまず2つの数字を選んで計算を行います。
次に、この3つの数字で24になるのがあるのかどうか。確実なもの、可能性があるもの、不可能なものをそれぞれ「評価」します。
可能性がある9つのデータを使って、実際に24になるか計算します。
ChatGPTは、1と4が「OK」と回答しました。
しかし1は「2」を2度使っているので、NGです。
4は24となって正しい計算であることがわかります。
結果 4,9,10,13で24にする方法は、「(10+9-13)×4=24」と導かれました。
(他の計算方法もありますが、是非ご自分でも確かめてみてください)
論文によるとこの「Game of 24」をChatGPTで解いた場合、単に解答を求めただけの正解率が7.3%、「Chain of Thoughtプロンプト」でも4%であったのに対し、「Tree of Thoughtsプロンプト」では74%であったとされています。
Tree of Thoughts(TOT)プロンプトを実際の課題解決に応用する
このTOTプロンプトは、複雑な課題の解決に応用することができます。
まずいくつかChatGPTで解答をだしてもらい、それを実現性、予算などの基準から評価を行います。(例えば(確実/可能性あり/不可能)とか「5段階評価で」といった感じで。)
そして、そのなかの上位のアイデアをさらに深掘りします。
「◯◯の観点で掘り下げてください」というような質問が良いですね。
そうした上で、アイデアをChatGPTにまとめてもらいます。
「これまでの分析をもとに順位の高い順に、アイデアをまとめてください」
このTree of Thoughts プロンプトは、人間の思考に近く、またDeepMindチームが提案したことからもわかるように、囲碁や将棋、自動運転などで使われるロジックです。
ぜひうまく活用して、問題や課題解決に活かして頂きたいと思います。
日本能率協会主催「DX時代に求められる「3つの思考法」入門セミナー」開催