いくつかの例を与えることで適切な回答を導く”Few-shot Prompting *”を改良させた一つの手法に
思考の過程をステップに分けて考える “Chain of Thought(CoT)”という方法があります。
*参考 例を与えて適切な回答を導く “Few-shot Prompting”
この方法は、特に推論を必要とするような回答をChatGPTに求めるときに有効で、
few-shot promptingと組み合わせるとさらに良い結果が期待できます。
例を見てみましょう。
具体例:
まずはCoTを使わずに通常のプロンプトを投げてみます。
ここにコードを記述お土産に、24枚入りのクッキーを6箱買いました。うち5箱は友達にあげたのですが、1箱余ってしまい、
家族で食べています。今家族で12枚食べたのですが、残りのクッキーは何枚ですか?
回答:
24枚入りのクッキーを6箱買った場合、合計で24 x 6 = 144枚のクッキーがあります。
5箱を友達にあげたので、残りのクッキーは6箱 – 5箱 = 1箱です。
また、家族で12枚食べたということなので、残りのクッキーは144枚 – 12枚 = 132枚です。
したがって、残りのクッキーは132枚です。
うん。見事間違っていますね。
では次に、CoTのプロンプトを投げてみます。
ここにコードを記述お土産に、24枚入りのクッキーを6箱買いました。うち5箱は友達にあげたのですが、
1箱余ってしまい、家族で食べています。今家族で12枚食べたのですが、残りのクッキーは何枚ですか?
ステップバイステップで考えてください。
先ほどのプロンプトの末尾に「ステップバイステップで考えてください」と記載しました。
するとどうでしょう。
回答:
まず、24枚入りのクッキーを6箱買いました。これは以下のように計算できます。
6箱 × 24枚/箱 = 144枚のクッキー
次に、5箱を友達にあげたということです。したがって、残りのクッキーは1箱分です。
1箱 × 24枚/箱 = 24枚のクッキー
最後に、家族で12枚のクッキーを食べたということです。これを計算に加えます。
残りのクッキー = 24枚 – 12枚 = 12枚
したがって、残りのクッキーは12枚です。
間違わずに答えられました。
ちなみにこのように、例を与えず「ステップバイステップで」などと言ったように
回答する際に段階を踏んで考えることを条件とする場合は、zero-shot promptingとCoTのかけ合わせと言えます。
※ zero-shot prompting…例を与えないプロンプトのこと。
では次に、few-shot promptingとCoTをかけ合わせてみましょう。
即ち、段階を踏んで考える思考の例をいくつか挙げた上でタスクを与えます。
※ few-shot prompting…いくつかの例を与えるプロンプトのこと。
Q:5つ入りのマカロンを3箱買いました。うち2箱は友達にプレゼントしました。
残りの1箱は自分用で、今2つ食べました。残りのマカロンは何個ですか?
A:まず、最初に買ったマカロンの数は、5つ×3箱=15個です。
うち2箱は友達にプレゼントしたので5つ×2箱=10個手元からなくなったので、このとき、手元のマカロンは、15個-10個=5個です。
さらに、残りの一箱のうち、2つ食べたので、残りのマカロンは5個-2個=3個。
答えは3個です。
Q:12本入りのワインを2箱買いました。うち1箱は両親にプレゼントしました。残りの1箱は自分用で、今3本飲みました。
残りのワインは何本ですか?
A:まず最初に買ったワインの本数は、12本×2箱=24本です。 うち1箱は両親にプレゼントしたので、12本×1箱=12本無くなりました。
この時、手元のワインは24本-12本=12本です。 さらに自分で3本飲みました。今残りのワインは12本-3本=9本。
答えは9本です。
Q:お土産に、24枚入りのクッキーを6箱買いました。うち5箱は友達にあげたのですが、1箱余ってしまい、家族で食べています。
今家族で12枚食べたのですが、残りのクッキーは何枚ですか?
A:
回答:
最初に買ったクッキーの枚数は、24枚×6箱=144枚です。
5箱は友達にあげたので、24枚×5箱=120枚がなくなりました。
したがって、手元に残っていたのは144枚-120枚=24枚です。
家族で12枚食べたので、残りのクッキーは24枚-12枚=12枚です。
こちらも間違わずに答えられました。
今回はzero-shot promptingでもfew-shot promptingでも、CoTを使うことで適切な回答を導けました。
より複雑なタスクになるほど、few-shot promptingとCoTを組み合わせることが必要になってくると思います。
しっかり思考する必要があるタスクを与える時はぜひ使ってみてください!