zero-shot-CoTプロンプトは「Large Language Models are Zero-Shot Reasoners」という論文で提案されたもので、簡単にいってしまえば以前にも紹介した「ステップバイステップで考えてみましょう」(Let's think step by step)という文言を言語モデルからの出力の前に置くというものです。
以下に例を示します。
few-shot-CoTプロンプトとは異なり、プロンプトには入力と出力の例がありません。そのため、これは「zero-shot」というわけですね。その代わりにモデルからの出力の前に「ステップバイステップで考えてみましょう」を置いています。こうすることで、言語モデルからの出力に問題を解くためのCoTが含まれるようになり、正しい結果が得られています。
自分で試してみると分かりますが、これでも間違った推測を行うことは(それなりに)あります。数回同じことを尋ねれば正解が出てくることもあります。
ではなぜ「ステップバイステップで考えてみましょう」が有効なのでしょうか。論文によれば、zero-shot-CoTプロンプトは概念的には解法を抽出するのと、答えを求めるのに2回のプロンプトを使っていると考えられるとのこと。
1つ目のプロンプト(解法の抽出)では以下のように計算のステップを言語モデルが問題文から取り出します。
次のプロンプト(答えを求める)では上で得られた解法をプロンプトに含めて言語モデルに入力します(上の画像ではCoT部分がモデルからの出力で背景色が薄い緑色となっていますが、下の画像ではこれを例として入力しているので、背景色が白になっている点に注目してください)。
このプロンプトを見ると、few-shot-CoTプロンプトと同様に見えます(ただし、入力と出力の例があるわけではなく、解きたい問題とその解法がプロンプトに含まれるだけです)。
概念的にはこのような2つのプロンプトをモデルに入力するのですが、実際には「ステップバイステップで考えてみましょう」と書くだけで、これらをまとめて行ってくれるというわけです。
手を煩わせる必要がないという点では、zero-shot-CoTプロンプトはかなり優秀ですが、言語モデルが正しく推測してくれないこともあります。そうしたときにはfew-shot-CoTで言語モデルの振る舞いを細かく制御するというのがよいでしょう(これについては次節で見てみます)。
本稿の冒頭でも見たように、ChatGPTは少し複雑な(ステップが複数ある)計算問題についてはうまい具合に答えてくれます。
今度は、コインの表向き/裏向きをモデルに推測させてみます。
初期条件はコインが表向きに置いてあるものとして、以下のようにコインをひっくり返すとしましょう。かっこ内はコインの向きがどう変化するのかをメモしたものです。
というわけで、最終的にコインが表向きとなっているかどうかをChatGPTが推測できるかを試してみます(正しい答えが得られることもあるでしょう)。
この結果を見ると、B氏がコインを2回ひっくり返すと、コインは裏向きから表向き、そしてまた裏向きになるはずですが、そこを理解できませんでした。そこを間違えたばかりにコインは最終的に裏向きだと言語モデルは推測をしました。
こんなときにはzero-shot-CoTプロンプトの出番です。といっても、InstructGPTとはUIが異なっているので、ここでは入力プロンプトの最後に「ステップバイステップで考えてみましょう」と付加することにします。
その結果が以下です。
ここでは先ほどと同じポイント(B氏が2回ひっくり返した)で先ほどと同じ間違いをしたので、結果も間違ったものになってしまいました。
こうなったらfew-shot-CoTプロンプトを試してみることにしましょう。ただし、ここでは現在の問題を解く手順をそのまま入力プロンプトに組み込むだけとします(他の入力と出力の組はここでは省略します)。
自分でほぼ解答を入力しているので、ここでは正しい答えが出力されました。
言語モデルに推測させるというよりも、言語モデルと一緒に答えを考えている感が非常に強くなります(笑)。
このようにChatGPTはInstructGPTよりも正しい答えを出してくれることが多いのですが、うまくいかないときにはzero-shot-CoTプロンプトを使って「ステップバイステップで考えてみましょう」としてみて、それでもダメならfew-shot-CoTプロンプトを試してみるというのは確かによいアプローチのようです。
「一緒に答えを考えている感」はなるほど。思考の連鎖によるプロンプトは、どうしても人間が子供に勉強というか質問への答え方を教えているのに似ているという感じがありますね。そういう意味ではChatGPTは、何でも答えてくれる大先生というよりも、すごく物知りでクリエイティブな発想ができる子供だと思って接するのがよいのかなと思いました。
あと、前回も同じ感想だったのですが、ますます人間が考え込むような論理的思考が必要となる質問への回答は、現状のChatGPTにはあまり向いていないなと思いました。答えが間違っている可能性を考慮する必要があるため、結局は答え合わせを質問者がしなければならなくなるので。
というわけで、ChatGPTのプロンプトについてはこのくらいにして、次回はChatGPT APIを使って何かをしてみようと思います。
Copyright© Digital Advantage Corp. All Rights Reserved.