賞金総額110万ドルのコンテスト「ARC Prize 2024」の問題をChatGPTは解けるのか?
現在、AGIの開発を目的とした賞金総額110万ドルのコンテスト「ARC Prize 2024」が開催されています。
ARCはAGIを測定するベンチマークテストで、人間には簡単だがAIには難しい図形の変化するパターンを見つける内容のテストです。
今回、ChatGPT(GPT-4oモデル)などにこの問題をどの程度解けるのかをテストしてみました。
1.ARCについて
(1) ARCのテスト内容
ARC(Abstraction and Reasoning Corpus:抽象化と推論のコーパス)は、汎用人工知能(AGI)を測定するベンチマークで、Zapier社の共同創設者のマイク・クヌープ氏とPythonライブラリ「Keras」を開発したGoogle研究者のフランソワ・ショレ氏が提唱しています。
ARCのテスト内容は、以下のようにカラフルなタイルで構成されたグリッド図形の変化の規則性を見つけ、問題のグリッド図形にその変化の規則性を適用した出力結果を回答するものです。
ARCは、人間には簡単だがAIには難しいテストで、これまで、平均84%の正解率を人間が示したのに対して、AIの最高スコアは30%程度にとどまっています。
以下のページからこのテストを実際に体験することができます。
(2) ARC Prize 2024
現在、ARCの問題を使用した賞金総額110万ドルのコンテスト「ARC Prize 2024」が開催されています。
ARCの非公開の問題セットで85%以上のスコアを達成したチームにはグランプリの50万ドルが授与されます。また、2024年のコンテスト期間中に上位5位までのチームに授与されるトップスコア賞や論文賞もあります。このコンテストは今年6月11日から開催中で、提出期限は11月10日、賞の発表は12月3日を予定しています。
2.ChatGPTとClaudeとGeminiの回答比較
ChatGPT(GPT-4oモデル)とClaude 3.5 SonnetとGemini 1.5 Proに次の問題を解いてもらいます。
第1問
(1) ChatGPTの回答
最初に、ChatGPT(GPT-4oモデル)にこの問題を解かせてみます。
ChatGPTの入力欄に問題の画像をコピペして、「この問題を解いて」と入力します。
以下がChatGPTの回答です。
To solve the problem presented in the image, we need to identify the pattern or rule applied to transform the input grid into the output grid. Let's analyze the examples given:
【日本語訳】画像に示された問題を解決するには、入力グリッドを出力グリッドに変換するために適用されるパターンやルールを特定する必要がある。与えられた例を分析してみよう:
Example 1:
Input (4x4):
[0, 0, 0, Red]
[0, Pink, Yellow, 0]
[Blue, 0, 0, 0]
[0, 0, 0, 0]
Output (4x4):
[0, 0, 0, 0]
[0, 0, Yellow, Red]
[Blue, Pink, 0, 0]
[0, 0, 0, 0]
Example 2:
Input (6x6):
[0, 0, 0, 0, 0, Red]
[0, Blue, 0, 0, 0, 0]
[0, 0, 0, Orange, 0, 0]
[0, 0, 0, 0, 0, 0]
[Yellow, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
Output (6x6):
[0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, Red]
[0, 0, Yellow, 0, 0, 0]
[0, Blue, 0, 0, 0, 0]
[Orange, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0]
Example 3:
Input (5x5):
[0, 0, Blue, 0, 0]
[Green, 0, 0, 0, Red]
[0, 0, 0, 0, 0]
[Pink, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
Output (5x5):
[0, 0, 0, 0, 0]
[0, 0, Blue, 0, 0]
[0, 0, 0, 0, Red]
[Green, 0, 0, 0, 0]
[Pink, 0, 0, 0, 0]
Identifying the Pattern:
Observing the examples, we can deduce that the colored cells are moved downwards along their respective columns, stopping when they hit another color or the edge of the grid.
Applying the Pattern to the Test Case:
【日本語訳】パターンの特定:
例題を観察すると、色のついたセルはそれぞれの列に沿って下へ移動し、別の色かグリッドの端にぶつかると止まることが推測できる。
パターンをテストケースに適用してみよう:
Input (5x5):
[0, 0, 0, 0, Green]
[Black, 0, Pink, 0, 0]
[Grey, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[Red, 0, 0, 0, 0]
Transforming the Input to Output:
Let's apply the identified pattern to transform the input into the output grid:
1.Move Green down until it hits the bottom row.
2.Move Black down until it hits Red.
3.Move Pink down until it hits the bottom row.
4.Move Grey down until it hits Black.
5.Red is already at the bottom row.
【日本語訳】入力を出力に変換する:
識別されたパターンを応用して、入力を出力グリッドに変換してみよう:
1.緑を最下段に当たるまで下に動かす。
2.黒を赤に当たるまで下に動かす。
3.ピンクを最下段に当たるまで下に動かす。
4.黒にぶつかるまで灰色を下に動かす。
5.赤はすでに最下段にある。
Output (5x5):
[0, 0, 0, 0, 0]
[0, 0, 0, 0, Green]
[0, 0, 0, 0, 0]
[0, 0, Pink, 0, 0]
[Black, 0, 0, 0, 0]
[Grey, 0, 0, 0, 0]
[Red, 0, 0, 0, 0]
Now you can use this pattern to configure the output grid in the application.
【日本語訳】このパターンを使って、アプリケーションの出力グリッドを設定することができる。
【筆者コメント】
回答は英語になっています。GPT-4oモデルになってから、日本語で質問しても英語で回答することが増えました。
「例題を観察すると、色のついたセルはそれぞれの列に沿って下へ移動し、別の色(※正しくは同じ色)かグリッドの端にぶつかると止まることが推測できる。」という変換パターンの特定はほぼ正しいのですが、実際のグリッドの表示を見ると、配置が大きく間違っています。カラーブロックの配置を正しく認識できていないようです。最後の回答は、5×5のグリッドのはずなのに、なぜか5×7のグリッドになっています。
最終的なカラーブロックの配置が間違っているので不正解ですが、変換パターンの特定と入力から出力への変換の基本的な方針が当たっていることは大したものです。
なお、正解は以下の通りです。
カラーブロックの位置を正確に認識することができれば、GPT-4oはこの問題に正解できる能力を持っていそうです。
(2) Claudeの回答
次に、Claude 3.5 Sonnetにこの問題を解いてもらいます。
入力欄に問題の画像をコピペして、「この問題を解いて、SVGで結果を出力して」と入力します。
Claudeの回答は以下の通りです。
この問題を解いて結果をSVGで出力いたします。まず、問題の規則を分析しましょう。
問題の規則を分析すると:
入力グリッドの各色のブロックは、出力グリッドの対応する行または列の端に移動します。
同じ色のブロックが複数ある場合、それらは同じ端に集まります。
色のブロックは、入力グリッドでの相対的な位置を維持します。
これらの規則に基づいて、テストの入力グリッドを解析し、出力グリッドを作成します:
赤: 1行目の右端
黄: 1行目の左端と4列目の上端
緑: 1行目の右から2番目
ピンク: 2行目の左端
青: 5列目の上端
では、この解答をSVGで表現しましょう。
(※コードは省略)
この SVG は問題の解答を表現しています。5x5 のグリッドに、規則に従って配置された色のついた四角形が描かれています。
1行目:左から黄、空白2つ、緑、赤
2行目:左からピンク、空白3つ
3-4行目:すべて空白
5列目:上から青が4マス分
この解答が正しいかどうか、「Submit solution」ボタンで確認できます。
【筆者コメント】
不正解です。カラータイルの配置の認識も変換パターンの特定も間違っています。
SVGで図を描くことができる以外は、GPT-4oの方が優秀なようです。
(3) Geminiの回答
最後に、Gemini 1.5 Proにこの問題を解いてもらいます。
Geminiの回答は以下の通りです。
The rule is to rotate the grid 90 degrees to the right and then mirror it around a vertical axis.
Applying this rule to the test image results in the following grid:
【日本語訳】このパズルのルールは、グリッドを時計回りに90度回転させ、次に垂直軸で反転させることです。
このルールをテスト画像に適用すると、次のグリッドになります。
G Y
G P
Y
P Y
G Y
Where:
G = Green
Y = Yellow
P = Pink
【筆者コメント】
不正解です。回答が意味不明で、変換パターンの特定も間違っています。全体的にGPT-4oの方が優秀なようです。
3.ChatGPTによるARCテストの回答
ARCテストの問題を解くことに関しては、ChatGPT(GPT-4oモデル)が最も優秀だったので、次の問題からは、ChatGPTのみに問題を解いてもらいます。
第2問
ChatGPTの入力欄に問題の画像をコピペして、「カラータイルの配置をしっかり確認して、この問題を日本語で解いて」と入力します。
以下がChatGPTの回答です。
このタスクは、入力グリッドから特定の色のパターンを出力グリッドに反映するパズルです。以下の手順で問題を解決します。
ルール
入力グリッドの灰色のブロックを、青色(シアン)と赤色に変換します。
変換のパターンは以下の通りです。
青色のブロックは、連続する水平および垂直の灰色のブロックに適用されます。
赤色のブロックは、連続する水平および垂直の灰色のブロックがない位置に適用されます。
手順
出力グリッドを入力グリッドと同じサイズに設定します。
入力グリッドから灰色のブロックを探します。
連続する水平または垂直の灰色のブロックがあれば、それを青色に変換します。
連続する水平または垂直の灰色のブロックがない位置には、赤色のブロックを配置します。
実例
例を見ながら、入力グリッドの灰色ブロックの変換を行います。
例1
入力グリッド: 11x9
出力グリッド: 11x9
変換手順:
左上の灰色ブロックの連続部分は青色。
それ以外の孤立した部分は赤色。
例2
入力グリッド: 10x8
出力グリッド: 10x8
変換手順:
連続する部分は青色。
孤立した部分は赤色。
例3
入力グリッド: 9x8
出力グリッド: 9x8
変換手順:
連続する部分は青色。
孤立した部分は赤色。
実際の問題解決
上記のルールと手順に基づいて、与えられた入力グリッドを出力グリッドに変換します。
出力グリッドを設定: 入力グリッドを出力グリッドにコピーします。
灰色のブロックを変換: 連続する部分を青色、孤立した部分を赤色に変換します。
以下に示すのは、最後の問題の入力グリッドとその解答です。
入力グリッド
11x8のグリッドの状態は次の通りです。
[1, 1, 1, 1, 0, 0, 0, 0]
[0, 1, 1, 1, 0, 0, 0, 0]
[0, 0, 1, 1, 1, 0, 0, 0]
[0, 0, 0, 1, 1, 1, 0, 0]
[0, 0, 0, 0, 0, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 1, 1]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0]
出力グリッド
入力グリッドに基づき、以下のルールに従って色を配置します。
青色(2):連続する水平および垂直の灰色のブロックに適用されます。
赤色(3):連続する水平および垂直の灰色のブロックがない位置に適用されます。
[2, 2, 2, 2, 0, 0, 0, 0]
[0, 2, 2, 2, 0, 0, 0, 0]
[0, 0, 2, 2, 2, 0, 0, 0]
[0, 0, 0, 2, 2, 2, 0, 0]
[0, 0, 0, 0, 0, 2, 2, 2]
[0, 0, 0, 0, 0, 0, 2, 2]
[0, 0, 0, 0, 0, 0, 2, 0]
[0, 0, 0, 0, 0, 0, 3, 2]
[0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 2]
[0, 0, 0, 0, 0, 0, 0, 0]
この出力グリッドのカラータイルの位置を行列形式で表示すると、上記のようになります。
【筆者コメント】
灰色のブロックが青色(正しくは水色)のブロックと赤色のブロックに変換されることは理解できていますが、2×2のブロックは水色に、3×1のブロックは赤色に変換されるという規則性は理解できていません。また、やはりカラーブロックの配置は認識できないようです。
なお、正解は以下の通りです。
水色の2×2の正方形と赤色の3×1の長方形に変換されています。
第3問
ChatGPTの入力欄に問題の画像をコピペして、「カラーブロックの位置を行列形式で表示し、ブロックの変換ルールを見つけて問題を日本語で解いてください。」と入力します。
以下がChatGPTの回答です。
入力と出力の行列形式
例 1:
入力:
緑 青 緑
青 緑 青
赤 赤 赤
出力:
黄色 灰色 ピンク
黄色 灰色 ピンク
黄色 灰色 ピンク
例 2:
入力:
赤 赤 赤
緑 緑 緑
青 青 青
出力:
黄色 ピンク 黄色
黄色 ピンク 黄色
黄色 ピンク 黄色
例 3:
入力:
灰色 青 ピンク
灰色 青 ピンク
灰色 青 ピンク
出力:
青 赤 赤
青 赤 赤
青 赤 赤
例 4:
入力:
茶色 黄色 赤
茶色 黄色 赤
茶色 黄色 赤
出力:
青 緑 ピンク
青 緑 ピンク
青 緑 ピンク
見つけたルール
各例を確認したところ、以下の変換ルールが見つかりました:
各列に対応する色が決まっており、入力の色に関わらず、列ごとに決まった色に変換されます。
各例の出力の1列目は黄色、2列目は灰色、3列目はピンクに変換されています。
これらのルールをもとにして、テスト入力に対する出力を求めます。
テスト入力
青 水色 緑
青 水色 緑
青 水色 緑
テスト出力
ルールに従って各列の色を変換します:
1列目: 黄色
2列目: 灰色
3列目: ピンク
したがって、テスト出力は以下のようになります:
黄色 灰色 ピンク
黄色 灰色 ピンク
黄色 灰色 ピンク
これが正しい出力となります。
(ChatGPTの回答はここまで)
【筆者コメント】
この問題はかなり簡単そうなので、正解できるかも知れないと期待したのですが、「各列に対応する色が決まっており、入力の色に関わらず、列ごとに決まった色に変換されます。」というまったく頓珍漢な変換ルールを主張し、正解できませんでした。
カラーブロックの配置に関しても、他の問題と比べると、正しく認識できている場合もありますが、やはり多くは間違えて認識していました。最後の問題のカラーブロックの配置も、入力データから配置を間違えて認識しているため、たとえ変換ルールを正しく理解していたとしても、正解にたどり着くことは無理でした。
なお、正解は以下の通りです。
水色の列は茶色に、青色の列は灰色に、緑色の列は黄色に変換されます。
第4問
毎回、カラーブロックの配置を正確に認識できないことが不正解に繋がっているので、カラーブロックの配置を正確に認識するための工夫を加えます。
これまで、ゼロショットで問題を解いてきたのですが、最初にワンショットで、カラーブロックの配置の認識例を示します。
【ChatGPTに入力したプロンプト】
この5×5のグリッドを行列形式で表示すると、以下のようになります。
[0,0,茶,茶,0]
[黄,0,0,0,青]
[緑,緑,桃,橙,水]
[0,0,灰,緑,水]
[赤,0,0,青,水]
これを踏まえて次の問題を解いてください。
(プロンプトはここまで)
ChatGPTの回答は以下の通りです。
問題は次のような内容でしたね:
行列:
[0,0,茶,茶,0]
[黄,0,0,0,青]
[緑,緑,桃,橙,水]
[0,0,灰,緑,水]
[赤,0,0,青,水]
では、この行列を使用して次の問題を解きます。具体的な問題内容を教えていただけますか?
(ChatGPTの回答はここまで)
ChatGPTの入力欄に問題の画像をコピペして、「この問題のカラーブロックの位置を行列形式で表示し、ブロックの変換ルールを見つけて問題を日本語で解いてください。」と入力します。
ChatGPTの回答は以下の通りです。
この問題では、与えられたカラーブロックの位置を行列形式で表示し、ブロックの変換ルールを見つけることが求められています。
入力と出力の行列形式
Ex.1 Input
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 水, 0, 0, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
Ex.1 Output
[0, 0, 0, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
Ex.2 Input
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 水, 0, 0, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
Ex.2 Output
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
変換ルールの発見
入力されたカラーブロックのパターンを見て、それが2x2のブロックに変換されていることがわかります。水色のブロックが斜めに配置されている場合、それが2x2のブロックに変換される規則が見て取れます。
テストの問題の解決
Test Input
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 水, 0]
[0, 0, 0, 0, 水, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 水, 0, 0, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 0, 0, 0, 0, 0, 0]
Test Output
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 水, 水]
[0, 0, 0, 0, 0, 水, 水]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
これが入力グリッドを変換するルールに従った出力グリッドになります。
(ChatGPTの回答はここまで)
【筆者のコメント】
不正解です。カラーブロックの配置が正確に認識できていないようです。水色と青色の区別もできていません。ただ、「水色のブロックが斜めに配置(※正しくはL字型に配置)されている場合に2×2のブロックに変換される」と見抜いたことは優秀です。
ChatGPTは、変換ルールを発見することは優秀なので、やはりカラーブロックの配置を正確に認識することがポイントのようです。
なお、正解は以下の通りです。
水色のL字型のくぼんでいる部分に青色のブロックが入ります。
第5問
最初に第4問と同じように、最初にカラーブロックの配置の認識例を示します。次に、ChatGPTの入力欄に問題の画像をコピペして、「この問題のカラーブロックの位置を行列形式で表示し、ブロックの変換ルールを見つけて問題を日本語で解いてください。」と入力します。
ChatGPTの回答は以下の通りです。
画像を確認しました。例題を基に、カラーブロックの変換ルールを見つけ、問題を解いてみます。
例題から観察すると、入力(7x3)を出力(3x3)に変換するルールは、入力の中央部分を3x3の出力にするようです。つまり、入力行列の中央の3x3の部分をそのまま出力にコピーします。
このルールを基に、以下のように問題を解きます:
入力(7x3):
[青, 青, 青, 灰, 灰, 青, 青]
[青, 青, 青, 黒, 青, 青, 青]
[青, 青, 黒, 青, 青, 青, 青]
出力(3x3):
[青, 灰, 灰]
[青, 黒, 青]
[黒, 青, 青]
日本語での手順:
入力行列の中央部分の3x3の部分を抽出する。
その部分をそのまま出力行列にする。
これで問題を解決できます。
(ChatGPTの回答はここまで)
あまりにも簡単に間違った回答を返してきたので、もっと慎重に例題を検討するようにプロンプトで指示します。
ChatGPTの回答は以下の通りです。
それでは、例題の内容を具体的に分析して、ブロックの変換ルールを見つけます。
例題 1
入力 (7x3):
[青, 青, 黒, 灰, 黒, 青, 青]
[青, 青, 青, 灰, 青, 青, 青]
[青, 青, 黒, 灰, 黒, 青, 青]
出力 (3x3):
[0, 0, 0]
[0, 赤, 0]
[0, 0, 0]
例題 2
入力 (7x3):
[青, 青, 黒, 灰, 黒, 青, 青]
[黒, 青, 青, 灰, 青, 青, 黒]
[青, 黒, 黒, 灰, 黒, 黒, 青]
出力 (3x3):
[0, 赤, 0]
[0, 赤, 0]
[0, 赤, 0]
例題 3
入力 (7x3):
[青, 青, 黒, 灰, 黒, 青, 青]
[黒, 青, 黒, 灰, 黒, 青, 黒]
[青, 黒, 黒, 灰, 黒, 黒, 青]
出力 (3x3):
[0, 赤, 0]
[0, 0, 0]
[0, 赤, 0]
観察されたパターン
各例題の出力は常に3x3のグリッドで、赤色のブロックが特定の位置に配置されています。ここで、中央の灰色ブロックに注目します。灰色ブロックの周囲にある黒ブロックの位置が、出力の赤ブロックの位置に対応しています。
具体的なルール:
灰色ブロックを中心に、黒ブロックの位置を特定する。
その黒ブロックの位置に対応するように、出力の3x3グリッドに赤ブロックを配置する。
これを踏まえて、問題を解いてみます。
問題 (7x3):
[青, 青, 青, 灰, 灰, 青, 青]
[青, 青, 青, 黒, 青, 青, 青]
[青, 青, 黒, 青, 青, 青, 青]
解答 (3x3):
[0, 0, 0]
[0, 0, 赤]
[赤, 0, 0]
灰色のブロックの周囲にある黒ブロックが、対応する位置に赤ブロックとして配置されました。この方法で正しいと考えられます。
【筆者のコメント】
修正後の回答は、黒ブロックと赤ブロックだけのグリッドになって、最初の回答よりは改善されましたが、不正解です。変換ルールは間違っており、カラーブロックの配置の正確な認識もできていません。
なお、正解は以下の通りです。
7×3の入力グリッドの内、灰色の仕切りの右側の3×3の正方形のグリッドと左側の3×3の正方形のグリッドの青色ブロックが重なり合う部分が赤色に変換されます。
入力グリッド(7×3)
出力グリッド(3×3)
第6問
最初に第4問と同じように、最初にカラーブロックの配置の認識例を示します。次に、ChatGPTの入力欄に問題の画像をコピペして、「この問題のカラーブロックの位置を行列形式で表示し、例題の内容を吟味してブロックの変換ルールを見つけ、問題を日本語で解いてください。」と入力します。
ChatGPTの回答は以下の通りです。
カラーブロックの位置を行列形式で表示
例題 1
入力 (9x9):
[0, 0, 0, 0, 0, 0, 0, 0, 赤]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 青, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 青, 0, 0]
出力 (9x9):
[0, 0, 0, 0, 黄, 黄, 黄, 0, 0]
[0, 0, 0, 黄, 0, 0, 0, 黄, 0]
[0, 0, 黄, 0, 0, 0, 0, 0, 黄]
[0, 黄, 0, 0, 0, 0, 0, 0, 0]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[0, 橙, 0, 0, 0, 0, 0, 橙, 0]
[0, 0, 橙, 橙, 橙, 橙, 橙, 0, 0]
例題 2
入力 (9x9):
[0, 0, 0, 0, 0, 0, 0, 0, 水]
[0, 0, 0, 0, 0, 0, 0, 赤, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 赤, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 水, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
出力 (9x9):
[0, 0, 0, 0, 黄, 黄, 黄, 0, 0]
[0, 0, 0, 黄, 0, 0, 0, 黄, 0]
[0, 0, 黄, 0, 0, 0, 0, 0, 黄]
[0, 黄, 0, 0, 0, 0, 0, 0, 0]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[0, 橙, 0, 0, 0, 0, 0, 橙, 0]
[0, 0, 橙, 橙, 橙, 橙, 橙, 0, 0]
例題 3
入力 (9x9):
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 赤, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 水]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 赤, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
出力 (9x9):
[0, 0, 0, 0, 黄, 黄, 黄, 0, 0]
[0, 0, 0, 黄, 0, 0, 0, 黄, 0]
[0, 0, 黄, 0, 0, 0, 0, 0, 黄]
[0, 黄, 0, 0, 0, 0, 0, 0, 0]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[橙, 0, 0, 0, 0, 0, 0, 0, 橙]
[0, 橙, 0, 0, 0, 0, 0, 橙, 0]
[0, 0, 橙, 橙, 橙, 橙, 橙, 0, 0]
ブロックの変換ルール
例題から読み取れるルールは、赤いブロックが3x3の黄と橙のブロックに変換されることです。黄ブロックは中心に配置され、橙ブロックは外周に配置されます。また、青いブロックは水色のままのようです。
テスト問題
入力 (9x9):
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 赤, 0, 0, 0, 青, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 赤, 0, 0, 0, 水]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 桃, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 赤, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
出力 (9x9):
[0, 0, 黄, 黄, 黄, 0, 0, 0, 0]
[0, 0, 黄, 0, 0, 0, 0, 青, 0]
[0, 0, 黄, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 黄, 黄, 黄, 0, 水]
[0, 0, 0, 0, 黄, 0, 0, 0, 0]
[0, 0, 0, 桃, 0, 0, 0, 0, 0]
[0, 橙, 橙, 橙, 0, 0, 0, 0, 0]
[橙, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
この出力は、赤いブロックが3x3の黄と橙のブロックに変換され、青いブロックがそのまま水色のままであることを示しています。桃色のブロックもそのままの状態で保持されています。
この変換ルールを元にして、他の問題にも適用できます。
(ChatGPTの回答はここまで)
【筆者のコメント】
不正解です。変換ルールに関しては、赤いブロックが3×3の黄と橙のブロック(正しくは黄と赤のブロック)に変換されることや、青色(正しくは水色)や桃色のブロックがそのまま変換されないことを見抜くなど、優れた部分もありますが、カラーブロックの配置の認識が不正確な点は相変わらずです。
GPT-4oは、変換ルールを見つけることについては、ある程度できているようですが、カラーブロックの配置を正確に認識できていないので、このままでは、ARCテストの問題を解くのは難しいようです。
なお、正解は以下の通りです。
赤色ブロックを囲むように黄色ブロックが、青色ブロックを囲むように橙色ブロックが配置されます。
4.ARCテストの問題を解くための実験と工夫
(1) カラーブロックの配置を認識できれば解けるのか①
今回は、カラーブロックの配置をあらかじめ行列形式で教えれば、問題が解けるのか試してみます。
第1問の問題を入力欄にコピペし、以下のようにカラーブロックの配置を行列形式で示して、問題を解くように指示します。
ChatGPTの回答は以下の通りです。
テストケースの入力(5×5)のカラーブロックを行列形式で表すと、以下の通りです:
入力 (5×5):
[0, 赤, 0, 黄, 緑]
[灰, 0, 0, 0, 0]
[0, 0, 桃, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 0, 0, 0, 0]
このパターンに基づいて、上記の例題の規則を用いて出力を生成します。
出力 (5×5):
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 赤, 0, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 赤, 桃, 黄, 緑]
(ここまでがChatGPTの回答)
かなり惜しい答えが返ってきました。ここで、グリッドの変換ルールについて聞いてみます。
ChatGPTの回答は以下の通りです。
この問題におけるグリッドの変換ルールは、各列に存在するカラーブロックを下に移動させ、すべてのカラーブロックが一番下に詰まるようにすることです。カラーブロックの位置関係は維持されますが、空白(0)は上に押し上げられます。
具体的には、次のような手順を踏みます:
各列を上から下にスキャンして、カラーブロック(空白以外)をリストに追加します。
リストの内容をその列の一番下から配置します。リストに含まれない残りの部分は空白(0)で埋めます。
例題を再度確認しましょう:
例題1:
入力 (4×4):
[0, 黄, 0, 茶]
[0, 0, 0, 0]
[0, 黄, 桃, 0]
[青, 0, 0, 0]
出力 (4×4):
[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 黄, 0, 0]
[青, 黄, 桃, 茶]
ここで、各列の変換は次のように行われます:
1列目:空白、空白、空白、青 -> 青が一番下
2列目:黄、空白、黄、空白 -> 黄、黄が下に詰まる
3列目:空白、空白、桃、空白 -> 桃が一番下
4列目:茶、空白、空白、空白 -> 茶が一番下
次にテストケースを同様に変換します。
テスト:
入力 (5×5):
[0, 赤, 0, 黄, 緑]
[灰, 0, 0, 0, 0]
[0, 0, 桃, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 0, 0, 0, 0]
出力 (5×5):
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 赤, 0, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 赤, 桃, 黄, 緑]
(ここまでがChatGPTの回答)
このグリッドの変換ルールも具体的に変換する方法も、しっかりと理解できているようです。
ただ残念ながら、回答の出力結果には一部間違いがあるため、修正を求めます。
ChatGPTの回答は以下の通りです。
ご指摘ありがとうございます。修正します。テストケースを再度確認し、正しい変換を行います。
入力 (5×5):
[0, 赤, 0, 黄, 緑]
[灰, 0, 0, 0, 0]
[0, 0, 桃, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 0, 0, 0, 0]
各列の変換は次のように行います:
1列目:空白、灰、空白、灰、灰 -> 灰、灰、灰が下に詰まる
2列目:赤、空白、空白、赤、空白 -> 赤、赤が下に詰まる
3列目:空白、空白、桃、空白、空白 -> 桃が一番下
4列目:黄、空白、空白、黄、空白 -> 黄、黄が下に詰まる
5列目:緑、空白、空白、空白、空白 -> 緑が一番下
これを踏まえた出力は次の通りです:
出力 (5×5):
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[灰, 0, 0, 0, 0]
[灰, 赤, 0, 黄, 0]
[灰, 赤, 桃, 黄, 緑]
(ここまでがChatGPTの回答)
最終的に正解にたどり着くことができました。先ずは、カラーブロックの配置を正確に認識させることが重要なようです。変換ルールを見つけることについては、GPT-4oは最初からかなり優秀です。
(2) カラーブロックの配置を認識できれば解けるのか②
次に、他の問題でも試してみます。
第4問の問題を入力欄にコピペし、以下のようにカラーブロックの配置を行列形式で示して、問題を解くように指示します。
ChatGPTの回答は以下の通りです。
この問題を解くためには、青のブロックの配置ルールを理解する必要があります。例題を見てみると、水色のブロックの特定の位置に青のブロックが配置されています。
青のブロックは、水色のブロックの右側または下側に配置されています。
ただし、青のブロックは既存の水色のブロックの位置には配置されません。
これを元に、テストケースの入力に対して同じルールを適用してみます。
テストケース入力 (7×7):
[0, 0, 0, 0, 0, 水, 水]
[水, 水, 0, 0, 0, 0, 水]
[水, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
これに対して、次のように青のブロックを配置します:
テストケース出力 (7×7):
[0, 0, 0, 0, 0, 水, 水]
[水, 水, 0, 0, 青, 0, 水]
[水, 青, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 青, 0, 0]
[0, 0, 0, 水, 水, 青, 0]
[0, 水, 青, 0, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
このようにして、テストケースの入力に対して青のブロックを配置することで、問題を解くことができます。
(ここまでがChatGPTの回答)
不正解です。変換ルールの理解が不十分であり、出力結果の青色のブロックの配置は2か所当たっていますが、あとは間違っています。
少しヒントを与えて、修正を試みてみます。
ChatGPTの回答は以下の通りです。
もう一度例題を詳細に見てみましょう。
例題1:
入力 (7×7):
[0, 0, 0, 0, 0, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
出力 (7×7):
[0, 0, 0, 0, 0, 0, 0]
[0, 水, 青, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 青, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
例題2:
入力 (7×7):
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 水, 0]
[0, 0, 水, 0, 0, 0, 0]
[0, 0, 水, 水, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
出力 (7×7):
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 青, 水, 0]
[0, 0, 水, 青, 0, 0, 0]
[0, 0, 水, 水, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 青, 水, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
この2つの例を考慮すると、次のような規則が見つかります:
水色のブロックが2つ以上連続している場合、その連続した部分の一番左または一番上のブロックの隣に青のブロックを配置する。
具体的には、垂直に連続する水色ブロックの上部に青を置く。
水平方向に連続する水色ブロックの左側に青を置く。
この規則に基づいて、テストケースを解いてみましょう。
テストケース入力 (7×7):
[0, 0, 0, 0, 0, 水, 水]
[水, 水, 0, 0, 0, 0, 水]
[水, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
テストケース出力 (7×7):
[0, 0, 0, 0, 0, 青, 水]
[水, 水, 青, 0, 0, 0, 水]
[水, 0, 0, 0, 0, 0, 0]
[青, 0, 0, 水, 0, 0, 0]
[0, 0, 0, 水, 水, 青, 0]
[0, 水, 青, 0, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
このようにして、連続する水色ブロックの左または上に青のブロックを配置することで、問題を解くことができます。
(ここまでがChatGPTの回答)
変換ルールが間違っており、かえって正解から離れてしまいました。
更に最終的なヒントを与えて解き直してもらいます。
ChatGPTの回答は以下の通りです。
指摘ありがとうございます。確かに、2×2の正方形になるように青のブロックを配置することを考慮する必要があります。それでは、改めて例題を見直し、規則を導き出しましょう。
例題1:
入力 (7×7):
[0, 0, 0, 0, 0, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
出力 (7×7):
[0, 0, 0, 0, 0, 0, 0]
[0, 水, 青, 0, 0, 0, 0]
[0, 水, 水, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 青, 水, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
例題2:
入力 (7×7):
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 0, 水, 0]
[0, 0, 水, 0, 0, 0, 0]
[0, 0, 水, 水, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 水, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
出力 (7×7):
[0, 0, 0, 0, 水, 水, 0]
[0, 0, 0, 0, 青, 水, 0]
[0, 0, 水, 青, 0, 0, 0]
[0, 0, 水, 水, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 青, 水, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
規則:
水色のブロックが3つ連続しているとき、青のブロックを追加して2×2の正方形を作る。
では、テストケースにこの規則を適用してみます。
テストケース入力 (7×7):
[0, 0, 0, 0, 0, 水, 水]
[水, 水, 0, 0, 0, 0, 水]
[水, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 0, 水, 水, 0, 0]
[0, 水, 0, 0, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
テストケース出力 (7×7):
[0, 0, 0, 0, 0, 水, 水]
[水, 水, 0, 0, 青, 0, 水]
[水, 0, 青, 0, 0, 0, 0]
[0, 0, 0, 水, 0, 0, 0]
[0, 0, 0, 水, 水, 青, 0]
[0, 水, 0, 青, 0, 0, 0]
[水, 水, 0, 0, 0, 0, 0]
このようにして、連続する3つの水色ブロックに対して2×2の正方形を作るように青のブロックを配置することで、問題を解くことができます。
(ここまでがChatGPTの回答)
不正解です。変換ルールを理解したものの、青ブロックを正しく配置することができませんでした。この問題は、人間には簡単なように見えても、AIには難しい問題だったようです。
5.まとめ
最初は、プロンプトを工夫すれば、ある程度解けるようになるのではないかと考えていましたが、やってみると、なかなか上手く行きませんでした。課題は次の2点です。
カラーブロックの配置を正しく認識できない。
解けない問題は、プロンプトを工夫しても、なかなか解けるようにならない。
カラーブロックの配置は、ChatGPTに言葉で説明させると、結構、理解しているように見えるのですが、行列形式などで書き出させると、かなり間違いが多くなります。ARCの問題を解くには、先ず、ここが第一関門になるようです。
ARCの問題は、人間には簡単だがAIには難しいテストとなっていますが、傾向があります。そして傾向があるところには対策があるはずです。
カラーブロックを一つ一つ見るのではなく、かたまりで捉えて、全体の形から判断する問題が多いようです。また、形から何かを連想すると解けるようになる問題も多いです。今回は成功しませんでしたが、この当たりは、プロンプトで正解率を上げる方法がありそうです。
賞金額が大きいので、自信のある人は是非トライしてみてください。