ChatGPTをはじめとする大規模言語モデル(LLM)は本当にすごい.教科書が豊富に揃っているような大学~大学院レベルのトピックであれば,かなり専門的な内容でも的確に解説してくれる(ように見える).また,言語モデルの名に恥じず,英訳・和訳はお手の物である.おおよそ,言語で処理できる対象に関しては,LLMの能力が(私を含め大多数の)人間を超えているように思える.
そこで,言語で扱いが難しい課題はどれくらいできるのかと考えた.具体的には以下のような問題だ.
- 定式化のための良いnotationや記号がない問題(例えば,微積分・線形代数のように,扱いやすい記号がある分野は言語処理でかなり解けてしまう)
- 言語で正確に表現するのが難しい(が,答えは正確に定まる)問題
私が思いついたのは確率パズルである.当然,モンティーホール問題や三囚人問題のような有名問題をそのまま出したのでは,すでに答えを丸暗記されている可能性が高い.そこで,『確率パズルの迷宮』に載っている「目隠し抽選会問題」を出題することにした.この問題の出典は『確率の理解を探る―3囚人問題とその周辺』らしいが,どちらも和書でネットにも情報がほとんどないため,LLMのデータセットに入っている可能性は低いであろう.
問題文
以下の確率パズルを解いてください.
下記のような抽選会が行われた。その中の(1)から(7)の各時点において、あなた(中村さん)のクジが「あたり」である確率を、それまでの司会者の発言(もちろん、100パーセント信じるものとする)をもとに計算すると、それぞれいくらとなるか。
部屋の中には、司会者を除き100人の人がいて、あなた(中村さん)もその 1人である。クジは101本あって、その中の1本だけがあたりである。また、あなただけは目隠しをさせられる。
司会者「今日は渡辺さんだけが2本、ほかの人は1本ずつ引いてもらいます」(1)
司会者「みんながクジを引きましたが、まだだれも中を見ていません」(2)
司会者「さて、みんなで自分のクジを開いて見ましょう。中村さんだけは 目隠しをしているので見えませんね」(3)
司会者「さて、はずれた人は1人ずつ部屋から出てもらいます。中村さんは このままお待ちください」
98人出て行ったところで、
司会者「ここでストップします。いま、まったくランダムな順番で98人が 出たところです」(4)
司会者「ところで、ここに残った人は、クジを2本引いた渡辺さんと目隠し をした中村さんだけでした」(5)
司会者「渡辺さんのもっている2本のクジのうち、はずれのクジを私がいた だきましょう」(6)
司会者「では、中村さん、目隠しをとってください。ご覧のとおり、結局、 中村さんははずれで、渡辺さんがあたりでした」(7)
結果
これをCopilot, ChatGPT, Geminiの3人(?)に出してみたところ,以下の通りとなった.*1
| 問題 |
Copilot |
ChatGPT |
Gemini |
正解 |
| (1) |
1/101 |
1/101 |
1/101 |
1/101 |
| (2) |
1/101 |
1/101 |
1/101 |
1/101 |
| (3) |
1/101 |
1/101 |
1/101 |
1/101 |
| (4) |
1/101 |
99/199⚠️ |
1/3❌️ |
1/101 |
| (5) |
1/199 |
1/3❌️ |
1/3❌️ |
1/199 |
| (6) |
1/199 |
1/3❌️ |
1/3❌️ |
1/199 |
| (7) |
0 |
0 |
0 |
0 |
Copilotの全問正解には驚いたが,ChatGPTやGeminiは半分近く不正解となった.どうして,(5), (6)で確率1/3と答えたのかというと,「残りクジは渡辺さんが2本,私が1本なので,当たりは確率1/3」だからだそうだ.なんとこれは,完全にモンティーホール問題でよくある間違いそのものではないか!
また,ChatGPTとGeminiが(4)で確率の更新を誤って行った点も面白い.どうやら,ハズレの人が退出する前の,司会者の「中村さんはこのままお待ちください」に,何らかの情報があると解釈したらしい.
確かにここは,問題文が表している確率モデルが微妙な箇所だ.実験してみるまで気づかなかったが,「司会者は『退出してもらいます』と言った瞬間にハズレ99人の退出順をランダムに決定して,中村さんはその先頭98人に入らなかったので『このままお待ち下さい』と言った」という解釈も(かなり不自然だが)有りうると思う.この場合,Geminiの99/199は正解になる!だが,その解釈を取ったとしても,(5)(6)で1/3と答えるのはおかしい.
私と研究とLLM
確率パズルでは,背後に仮定されている確率モデルを正確に把握することが肝心だが,これを言語で簡潔かつ正確に表すのは至難の業である.また,数式や図を駆使しても,かえって煩雑になり本質が見えなくなることが多い.こういう,(広義の)言語化が難しい領域は,LLMにも難しいようである.まぁ,人間にも難しいのだが.
普段,私もよく論文で分からないところをLLMに質問するのだが,(私が知らない)分野の標準的な内容はズバッと答えてくれる一方,notationが微妙だったり,論文によって定義が違う(標準的な定義が定まっていない)ような比較的未発達な分野だと,ハルシネーションだらけで,自己矛盾した答えを出してくる印象がある.こうなると,チェックの手間ばかりかかって,結局時間を無駄にすることも多い.
数学もソフトウェアでもそうだが,調べ物やちょっとしたスクリプトには大いに役立つが,高度に整合的なものを作るのはまだ苦手なようである.むしろ,LLMでも自然に整合的になるような言語を我々がデザインすべきなのかもしれない.