ChatGPT時代の入試は今後どのようになっていくのだろう。
先週末に行われた大学入試の試験監督をしながらそんなことを考えていました。
近頃はどんな問題が出ているのか、家に帰ってから英語の過去問をチェックしてみました。
たとえば、次のように文章を読んで内容を英語でまとめたり、自分の考えを英語で述べたりする問題です。
要約したり、文章を生成したりすることはChatGPTが得意とすることです。
たとえば、この文章を読んで「インターネット検閲(internet censorship)についてのあなた自身の考えを50字程度の英語で述べてみましょう」という問題をChatGPTに解かせてみましょう。
どのような観点から実際の試験が採点されるのかは分かりませんが、文法的にはオッケーですし、構成も悪くなさそうです。ただ、50字程度という指定があるところ33字の文章しか生成していません。
これはおそらく「50字程度」という指定の仕方が曖昧なせいかもしれません。
そこで、ChatGPTへの指示を次のようにより明確にしてみましょう。
すると、次のような52字の文章を作成してくれました。
このように、ChatGPTはどのように質問するかで答えがかなり変わってきます。
さて。
「優秀な」ChatGPTですが、これまでに多くの人が指摘している通り、いつも正しい答えを返すとは限りません。
たとえば、次の計算問題の答えを聞いてみましょう。
ChatGPTが返す答えは、「ジャンが50歳のときジムは76歳(Jim is 76 years old when Jan is 50.)」でした。正解は47歳なので、間違った答えをChatGPTは返してきました。
もちろんChatGPTの精度はまだまだ問題がありますが、正答率を挙げるための質問の仕方についていろいろな研究が行われています。人間同士のコミュニケーションにおいても「質問力」は重要ですが、AIに対しても質問力が問われる時代になってきているわけです。
それでは、精度を向上するためのAIへの質問方法をみていきましょう。
まずもっともシンプルな方法は、先程の世界史の試験問題や年齢を答える問題のように、質問のみを書いて、答えをAIに作成してもらう方法です。これを、zero-shot promptingと呼びます。
次の計算の問題を例にzero-shot promptingを改めて見てみましょう。
答えは、23-20+6 = 9個です。
最新のChatGPTにこの問題を投げると、次のようにその思考過程と共に正しい答えが返ってきます。
ですが、ChatGPTよりも小さい言語モデルを使うと間違った答えが返ってくることがあります。
たとえば、次は同じ問題に対してChatGPTの一世代前のモデル「text-davinci-003」というモデルを使ってみましょう。
すると、次のように「29個のリンゴ」と答えが返ってきます。正解は9個なので、間違いです。
そこで、zero-shot promptingを改良する方法として提案されているのが、one-shot promptingやfew shots promptingです。
名前の通り、問題と答えのサンプルをひとつ、あるいは複数個、提示してあげるという方法です。
たとえば、サンプルをひとつ提示してあげるone-shot promptingは次の通りになります。
問題と答えのサンプルを1セット提示したあとに、質問を投げかけています。
すると次の通り、「9個のリンゴ」と正しい答えが返ってきました。
このように質問と答えのセットをひとつ提示してあげるだけで、精度が向上します。
ですが、リンゴの数を23個から24個に変更したりすると答えを間違う場合があります。そこで、より安定した答えを返してもらうために、サンプルをもうひとつ追加してみましょう。バナナを使った例(太字)を追加します。
バナナに関するサンプルを追加したところ、リンゴの数を24個に変更したりしても、安定して正解するようになります。
では、最初の質問もfew-shots promptingによって解くことができるか試してみましょう。ジムの年齢について聞いている質問の前に、ふたつのサンプルデータを提示しています。
「ジムは25歳」。残念ながら、正しい答えは返ってきませんでした。でも、zero-shot learningのときよりもなぜ間違ったかを推測できそうです。おそらく、ジムはジャンの半分の年齢という部分を50歳に適用した結果、25歳という答えにたどり着いていそうです。
ということは、回答までの考え方を示してあげると、ひょっとすると正解に辿り着くことができます。その方法が、Chain-of-Thoughts promptingという方法です。答えまでの思考の道筋を提示してあげることで、論理的な思考順序を持つ文章を生成するようにモデルを誘導します。
人に教えるときもそうですよね。問題に対する答えだけでなく、どのようにして問題にたどり着いたかを伝えることがとても重要です。
例をみてみましょう。
このように正解のサンプルを提示するときに、答えだけではなくその道筋も提示してあげます。結果はどうなるでしょうか。
47歳ときちんと正解することができました!
このように答えまでに複数のステップが必要となる問題の場合、その道筋も示してあげると正解率を向上させることができます。
でも。
思考過程を例として示すのってけっこう大変ですよね。そこで、提案されたのがzero-shot-chain-of-thoughtsという方法です。
なんと、思考過程の例を示さずに、「Let's think step-by-step(ステップごとに考えよう)」という言葉をpromptに追加するだけで、Chain-of-thoughtsと同じ効果を得ることができるというわけです。
早速試してみましょう。
残念ながら、間違えてしまいました。ジムはジャンの半分の年齢という関係性を50歳にも適応してしまっています。
このように間違う場合もありますが、Let's think step by stepとpromptに加えることで、例示を示さなくても正解率が上がることは確かなようです。実際、食堂でのリンゴの数を数える問題に適応してみると、見事に正解します。
このように、zero-shot-chain-of-thoughtsを使うことで、問題と答えのサンプルを示さなくても思考のステップを自分で考え出して解こうと試みてくれます。
同じような考え方で提案されている方法に、self-ask promptingという方法もあります。モデル自身に自問自答を促すという方法です。
例をみてみましょう。
質問の太字の箇所が、モデル自身に自問自答してもらうように誘導する文章です。フォローアップの質問が必要かどうかをモデル自身に聞いています。そして、回答がYesだった場合には、自分自身でフォローアップの質問も考えてもらい、回答も作成してもらいます。
回答への道筋を与えるのではなく、自分自身に質問そのものも考えてもらうというわけです。結果はどうなるでしょうか。
残念ながら、ここでも回答を間違えてしまっています。ですが、このようにモデル自身に自問自答してもらうことで、精度が向上することが報告されています。まるで、誰か能力を引き出すようにAIの能力も引き出そうとしている感覚になります。
どのように質問をAIに投げかける、どのように答えを提示するかで、答えの精度が違ってきます。大規模なモデルであればあるほど、質問の仕方で答えの精度が変わる傾向があるようです。大規模なモデルほど、たくさんの知識を持っています。そこから欲しい答えを導きだすためには、質問の仕方や答えの導き方が重要になるようです。
そう考えると、未来の入試は答えそのものを問う問題ではなく、その思考過程を言語化する。つまり考え方そのものをフレームワーク化するよりメタな能力を問うものになっているのかもしれません。
ではまた!ciao :)