CoT(Chain-of-Thought)プロンプティングとは?ChatGPTに推論させる?
ChatGPTをはじめとするLLM(大規模言語モデル)は、実は推論が得意ではありません。
論理的な考え方をして欲しければ、そのような聞き方をしなければなりません。
それがCoT(Chain-of-Thought)プロンプティングです。
今回はCoTプロンプティングについて解説しますので、ぜひ最後まで読んでご参考になさってください。

INDEX
CoT(Chain-of-Thought)プロンプティングで逆さ読み
ChatGPTは、文脈判断は得意ですが、実は順序立てて考えるのは深刻な苦手分野です。
GPT-3.5-Turboともなるとかなり改善はされているものの、やはり苦手なものは苦手なようです。
代表的な例として逆さ読みが挙げられます。
プロンプト
#命令
以下の文章を#例 に従って逆から書いてください。
#例
こんにちは:はちにんこ
#文章
ぱいなっぷる:
ChatGPTの答え
ぶっぷないぱ
何回みても「ぶっぷないぱ」です。
もちろん間違っています。
なぜなら、「ぶっぷないぱ」を逆から読むと「ぱいなぷっぶ」だからです。
しかも例を挙げるという優しさがあってもなお、このような凡ミスをしています。
なぜなら推論が苦手だからです。
パイナップルを逆から読もうとすると最後の文字「ル」が最初に来て、次が「イ」で…と順序立てて考えないといけませんが、推論が苦手なのでこうなります。
CoTプロンプトで同じことをしてみましょう。
プロンプト
#命令
以下の文章を#例 に従って#考え方 を元に逆から書いてください。
#例
こんにちは:はちにんこ
#考え方
こんにちはの最後の文字は「は」
次の文字は最後から2番目の「ち」
次の文字は最後から3番目の「に」
次の文字は最後から4番目の「ん」
次の文字は最後から5番目の「こ」
上から読み返すと「はちにんこ」が正解となります。
なお「っ」や「ん」も一文字と考えます。
#文章
ぱいなっぷる:
ChatGPTの答え
#考え方
引用元:ChatGPT
ぱいなっぷるの最後の文字は「る」
次の文字は最後から2番目の「ぷ」
次の文字は最後から3番目の「っ」
次の文字は最後から4番目の「な」
次の文字は最後から5番目の「い」
上から読み返すと「るぷっないぱ」が正解となります。
正解を出すプロセスを明確にすることで正確な答えを出すことができます。
CoT(Chain-of-Thought)プロンプティングで算数
プロンプト
最初にバスに5人いて2人乗ってきて3人降りてまた1人乗ってきたらバスの中には何人いますか?
5人ですね
では最初にバスに7人いて2人降りて5人乗って6人降りたらバスの中には何人いますか?
ChatGPTの回答
最初にバスに7人いて2人降りて5人乗って6人降りた場合、バスの中には1人だけ残ります。
引用元:ChatGPT
この場合は、7-2+5-6で4人が正解ですが3人消えました。
CoTプロンプティングで丁寧に考えさせないといけません。
プロンプト
最初にバスに5人いて2人乗ってきて3人降りてまた1人乗ってきたらバスの中には何人いますか?
5+2=7
7-3=4
4+1=5
となるので「5人」が正解です
では最初にバスに7人いて2人降りて5人乗って6人降りたらバスの中には何人いますか?
途中の計算式も書いて正解を教えてください。
ChatGPTの答え
最初にバスに7人いて2人降りて5人乗って6人降りた場合、途中の計算式は以下のようになります:
7 – 2 = 5 (2人降りた後)
5 + 5 = 10 (5人乗った後)
10 – 6 = 4 (6人降りた後)したがって、バスの中には最終的に4人います。
引用元;ChatGPT
このように小学生でも解けるような計算も途中式を書かなければ間違うこともあります。
子どもの頃「途中式も書け」と言われていた意味がやっとわかった気がします。
基本はFew-Shot(フューショット)プロンプティング
Few-Shot(フューショット)プロンプティングとは、少しだけ例を出してあげて回答を生成させる手法です。
例を挙げることで考え方のレールをひいて、ChatGPTに考えてもらうイメージです。
Zero-Shot プロンプティングでは厳しいようなものに使いますが、例をいくつか挙げるという意味では、今回のCoTプロンプティングも似通ったところがあります。
逆さ読みも計算も途中式がひとつの例のような役割をしています。
関連記事:ChatGPTのZero-Shot(ゼロ・ショット)プロンプティングを例文付きで解説
有名なものは間違いにくい
推論が苦手と聞いてやってみたくなるのが、論理式が解けるのかどうかです。
ということで、ド・モルガンの定理について聞いてみました。
プロンプト
「AであればBである」が真ならば「BでないならばAではない」は真か偽か。
ChatGPTの回答
論理的な推論において、条件文「AであればBである」が真である場合、「BでないならばAではない」も真であると言えます。これは、論理的な同値性の一例です。具体的に説明します:
1. 条件文「AであればBである」が真である場合、Aが成り立つとBも成り立つことを意味します。
2. したがって、「BでないならばAではない」は、Bが成り立たない場合にAも成り立たないことを意味します。
3. このような状況では、「BでないならばAではない」も真となります。言い換えれば、もし「AであればBである」が真である場合、Bが成り立たない場合はAも成り立たないということです。従って、「BでないならばAではない」は真です。
引用元:ChatGPT
証明は怪しいですが、一応正解です。
有名すぎるのでしょう。
LLMは推論ではなく確率論でテキストを生成しているので、有名なものは無難に正答してきます。
プロンプト
自然数の集合をZ、有理数の集合をQと置くと、ZとQはどちらが多いですか?
ChatGPTの回答
自然数の集合(Z)と有理数の集合(Q)を比較すると、有理数の集合(Q)の方が自然数の集合(Z)よりも多いです。
自然数の集合(Z)には、0を含む正の整数(1、2、3、4、…)が含まれます。自然数は無限に続く数の集合ですが、整数のみです。
一方、有理数の集合(Q)には、全ての整数を含むだけでなく、それらの整数の比(分数)も含まれます。有理数には無限に多くの数が含まれており、整数だけでなく、分数(例:1/2、3/4、5/7、など)も含まれます。したがって、有理数の集合は自然数の集合よりも多くの要素を持っています。
簡潔に言えば、自然数の集合(Z)は有理数の集合(Q)の部分集合です。
ChatGPT
意地の悪い聞き方をしていますが、間違っています。
自然数の集合は有理数の部分集合ではありますが、自然数1、2、3、4、…に対し、有理数1/1、1/2、-1/2、1/3…と全単射が存在し、濃度が等しいため「有理数の集合は自然数の集合よりも多い」は間違いです。
このようにLLMの苦手分野、得意分野を把握して、AI時代にうまく適応しましょう。
関連記事:プロンプト文例集「プロンプトパーク」の使い方・おすすめの人を紹介!
