はじめに
この記事は人間が書いています。
正式版のChatGPT o1のリリースなどから再びLLM界隈が盛り上がってきました。
そこで今回は、私が過去にリリースした自作のシンプルなパズルを解かせることで、LLMの性能のある一側面を測っていくことにします。
(といってもあくまで趣味的な検証であるため、読み物としてお楽しみください)
今回用いるLLMは、ChatGPT o1、ChatGPT o1-mini、ChatGPT 4o、Gemini 2.0 Flash Experimental、Claude 3.5 sonnetの5つです。
ChatGPT o1-proは課金していないので使っていません。テストに用いたプロンプトはコピー可能な形で記事中および記事末尾に記載していますので、もしproを使える方がいればぜひ試してみてください。
パズルについて
このパズルは、高度な知識や発想の飛躍などは不要であり、唯一「試行錯誤」することが必要なパズルです。人間用の画面は以下のようになっています。
中央にある、「赤、黄、赤、黄」の列を、下にある4つの規則を使いながら変換していきます。
例えば前2つの「赤、黄」を選択して、最初の規則である「赤、黄 → 黄」を適用すると、「黄、赤、黄」になります。これを繰り返して、ゴールとして上に示されている「黄」にたどり着けばクリアです。
規則は基本的には何度も使えますが、使用回数に制限が設けられている場合もあります。また、ブロックの数が増えるような変換規則もありますし、ブロックの列全体を左右反転するなどさまざまな変換規則があります。
基本的には様々な方法を試しながら試行錯誤を繰り返していけばいつかは正解にたどり着くことができます。逆にそういった試行錯誤を行わず決め打ちで正解を導き出すのは非常に難しいルールとなっています。
実験
プロンプト
プロンプトのフォーマットはすべて共通で以下のようにしました。最後の「(問題)」以降の行は問題ごとに変えています。
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:ab→a、a→b
元文字列:ab
目的文字列:a
実験条件
また、コンテキストの影響を取り除くため、全ての問題ごとに新しいセッションを立ち上げ直して実行しました。
正誤判定は、「答え」またはそれに準ずる形で明確に答えの系列を示しているもののみを正解とし、方針のみを示して具体的な答えの記載逃げているものは不正解として扱いました。このようにすることで、文章の質のような価値判断に頼らず決定的な性能評価が可能になります。
なお、このパズルの正解は1つとは限りませんが、正解からゴールへとたどり着ける限りは最適でなくともすべて正解としています。
結果
問1~問5
ではまず、問1~問5までについて5つのLLMにそれぞれ与えた結果を見てみましょう。なお、問1~問5は、https://mirrormouse.github.io/BlockLL/ の001~005にあたります。
問1~問5の問題部分のプロンプトは以下のようになっています。
(問題)
変換規則:ab→a、a→b
元文字列:ab
目的文字列:a
(問題)
変換規則:ab→a、bc→b、ac→b
元文字列:abc
目的文字列:a
(問題)
変換規則:ab→b、aa→b、bb→aa、aaa→a
元文字列:abab
目的文字列:b
(問題)
変換規則:ab→b、aa→b、bb→aa、aaa→a
元文字列:abab
目的文字列:a
(問題)
変換規則:a→ac、cb→a、ab→c、ca→b、bb→a
元文字列:abacb
目的文字列:a
見ていただければわかるように、問1、問2は非常に単純で、これが解けなければ論外です。
問4からは少しずつ選択肢が増えてきて考える必要が出てきているかなと思います。
問5についてはパズルに慣れていない人であれば少し迷ってしまう人もいるでしょう。
この5問に対する各LLMの結果はこちらです。
問題 | ChatGPT o1 | ChatGPT o1-mini | ChatGPT 4o | Gemini 2.0 | Claude 3.5 |
---|---|---|---|---|---|
1 | o | o | o | o | o |
2 | o | o | o | o | o |
3 | o | o | o | × | o |
4 | o | o | x | × | x |
5 | o | o | x | × | x |
ということで、全問正解はChatGPT o1とChatGPT o1-miniのみとなりました。
4oとClaudeは問3まで、Geminiにいたっては問2までしか解けていません。
問3、問4についてはパズルがそこまで得意でない一般の方でも少し触ってみればすぐに答えにたどり着けるレベルでしょうから、やはり試行錯誤という意味ではo1以外のモデルはまだまだだといえます。
例えば、ClaudeとGeminiの問4に対する回答は以下のようになっていて、それっぽく間違ったことを言っています。
ちなみに、o1やo1-miniが問5の回答出力を始める前には、それぞれ約30秒の時間がかかっています。問1、問2などは一瞬で出力が返ってくるので、問題の難度上昇に従い試行錯誤の時間が長くなっていることが読み取れます。
問6~問10
では、ここから先の難易度では他の3モデルを試しても無駄だと思われるので、o1およびo1-miniのみを用いて検証を行っていきましょう。
隣には出力前の思考にかかった時間も示しています。
問題 | ChatGPT o1 | ChatGPT o1-mini |
---|---|---|
6 | o(120秒) | o(20秒) |
7 | o(52秒) | o(13秒) |
8 | o(94秒) | x(82秒) |
9 | o(84秒) | x(57秒) |
10 | o(248秒) | x(104秒) |
o1-miniの性能でも問7あたりでそろそろ限界なようです。一方でo1は思考にかかる時間こそ長いですが、全問正解できています。
o1-miniの問10に対する出力を見てみると、最後に行き詰って困ったのか、謎の削除規則を持ち出してきてしまっています。一方o1は4分以上考えつくして無事に模範的な回答を導き出しています。(長すぎるのでここには貼りません)
問11~問20
ではChatGPT o1を用いてさらに難易度の高い問題に進んでいきましょう。
問題 | ChatGPT o1 |
---|---|
11 | x(162秒) |
12 | o(84秒) |
13 | x(83秒) |
14 | o(156秒) |
15 | x(82秒) |
16 | o(53秒) |
17 | x(101秒) |
18 | x(116秒) |
19 | x(133秒) |
20 | x(149秒) |
ChatGPT o1の性能でも問16あたりが限界なようです。
問19と問20の出力の最後をそれぞれ見てみると、問19は単純にミスをしており、問20では長々と言い訳をしてすべては書ききれない、と言っています。
特別な外部知識や身体的知識などを要さない本当に単純なパズルであっても、ただひたすらの「試行錯誤」を要する課題においてはまだChatGPT o1であっても十分な性能とは言えない、ということが今回の結論になります。
このパズル(全50問)はhttps://mirrormouse.github.io/BlockLL/ でプレイできますので、興味があればo1越えに挑戦してみてください。
付録プロンプト
今回の検証では私が課金をしていない関係で、o1 proの性能を測ることはできませんでした。
o1には解けなかった問19、問20、またより難しいと思われる問題の中から問28、問45、問49をピックアップしてプロンプト全文を置いておきますので、o1 proが使用可能な方はぜひ試してみてください。
なお、ここに挙げたすべての問題は、どんなに多くても高々20手前後でできる解法が示されたものばかりですので、LLMが「この答えは長すぎてとても書ききれません」だったり「答えはありません」などと言ってくれば、それは単なる言い訳にすぎませんのでご注意ください。
問19 プロンプト
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:ab→db[3]、aba→ad[1]、ab→abb、abcd→f[2]、bc→db[4]、b→bab[3]、a→aab[3]、ad→da[3]、ba→d[3]、ddd→e、aab→e
元文字列:abcd
目的文字列:ef
問20 プロンプト
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:be→a、ea→e[2]、ad→bb[5]、cc→a[2]、b→ac[4]、ab→c[3]、cd→c[4]、dc→b[1]、ca→b[3]、cb→b[2]
元文字列:cdbabdeadb
目的文字列:ba
問28 プロンプト
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:cd→aa、ba→ac、dc→ca、a→ad、ca→db、bc→ab、cb→c、d→bd、a→bd、a⇔d[4]
元文字列:babcd
目的文字列:cbcad
問45 プロンプト
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:aaa→aab[4]、aa→bb[4]、ab→aaa[4]、a→bb[4]、ab→bb[4]、ab→baa[4]、b→aaa[4]、ba→bab[4]、aaba→bb[4]、bab→bbb[4]、bb→baa[4]、⇔
元文字列:abbbab
目的文字列:aaaaaa
問49 プロンプト
あなたの性能を測るため、テストを行います。
以下のように、文字列の変換規則と元文字列、目的文字列を与えられたとき、元文字列を目的文字列に変換するための過程を求めるパズルを考えます。
なお、使用できる回数に制限がある規則は規則の後に[n]という形で表記し、これは最大n回までその規則を使用できることを意味します。
制限が表記されていない場合、無制限にその規則を使用できることを意味します。使用しない変換規則があっても構いません。
(例1)
変換規則:ab→a、bc→b[2]、ac→b[2]
元文字列:abcab
目的文字列:aab
答え:abcab→abab→aab
解説:規則bc→bを使用した後、1つ目のabに対して規則ab→aを使用しています。
bc→bは1回しか使用していないので、使用回数の制約を満たしています。
また、規則を適用するときはその適用先を選択して1つの該当部分だけを変換します。複数の該当部分を1回の規則使用で同時に変換することはできません。
以下のような特殊な変換規則が登場する場合があります。
変換規則「⇔」は、文字列全体を左右反転させることを意味します。
(例2)
変換規則:ba→a[1]、⇔[2]
元文字列:abc
目的文字列:ca
答え:abc→cba→ca→ac
解説:⇔、ba→a、⇔の順に使用しています。
変換規則「a⇔b」は、文字列中の全ての「a」を「b」に、全ての「b」を「a」に変換することを意味します。
(例3)
変換規則:a⇔c、b⇔c
元文字列:aabbacc
目的文字列:ccaacbb
答え:aabbacc→aaccabb→ccaacbb
解説:b⇔c、a⇔cの順に使用しています。
ルール説明はここまでです。以下に問題を与えます。
なお、十分出力長の制限に収まる程度の答えが存在することが事前に証明されていますので、かならず上記の例の「答え」にあたるような文字列の変換過程を明示的に答えとして示すようにしてください。
十分な考察が記されていたとしても、明示的な答えの全体の記載のない回答は不正解として扱います。答えは一切省略してはいけません。
(問題)
変換規則:bc→da[4]、de→ee[3]、ba→ccc[2]、a→ece[2]、edec→be[2]、edeb→bb[3]、bd→ced[3]、cd→eb[2]、ba→dce[4]、be→c[2]、cd→b[2]、⇔[2]
元文字列:edcbcd
目的文字列:ebdaeeb