【お試し投稿】推論モデルを比べてみました。@2025年2月

# はじめに
はじめまして。mokkoです。
2025年、アプリケーションエンジニアから生成AIエンジニアに転身しました。
業界に入って1か月ほどたち、生成AI周りの日々の進歩に感心しつつも、周りの同業者に負けているわけにもいかないので、追いつけ追い越せの精神で日々精進します。
ということで、Qiitaアカウント作ってみました。勉強したことを自分のペースで整理していければと思います。

# 本題
ここ１週間ほどで「DeepseekのR1リリース」「chatgpt-o3-miniの無料公開」など、さまざまな推論モデルが新たに登場し、話題となっています。
私が触れられる範囲にいる各社の推論モデルの性能を比較したいと思います。Qiitaのテスト投稿を兼ねて。

※そもそもマークダウンすらまともに書いたことないのでQiita公式のチートシートほんと助かる。。。
    https://qiita.com/Qiita/items/c686397e4a0f4f11683d

# 比較対象
- ChatGPT-o3-mini (OpenAI)
    →2025/1リリース。chatgpt公式サイトから利用。
- DeepSeek R1 (DeepSeek AI)
    →2025/1リリース。DeepSeek公式サイトから利用。
- Gemini 2.0 Flash Thinking (Google)
    →開発中。Google AI Studioからpreview版を利用（こちらも2025/1から無料公開）。

# 題材
題材は「チンチロ」です。ギャンブル要素が入ると問題がかなり複雑化するのといろいろと条件の追加が必要になるので、独自ルールを加えて比較的簡単な確率の問題にしています。
推論モデルは「数学やプログラミングに強い」ということなので、大学入試レベルの数学でお手並み拝見です。

実際に投下したプロンプトがこちら。

``` txt:実際に投下したプロンプト
サイコロを3つふって出た目で作った役で競う遊びがあります。
この遊びの得点の期待値を回答してください。

▼ルール
・サイコロの目は1～6です。
・サイコロは3回降って、1回でも役が出たら終了となり、その時出た役に対応した点数を獲得します。
・3回降って、1回も役が出なかった場合は0点となります。

▼役
・すべて1が出た場合：15点
・ゾロ目が出た場合：10点
・4、5、6が出た場合：8点
・2つのサイコロで同じ目が出て、1つのサイコロだけ違う目が出た場合：違う目が出た1つのサイコロの目
・1,2,3が出た場合：-4点
```

## 結果まとめ
各LLMに同じプロンプトを投下したときの回答を以下に記載していきますが、長いので先に結果をまとめます。
| model | 結果 | 回答時間 | 印象 |
|:-:|:-:|:-:|:-:|
|o3-mini|正解|約35秒|正確かつ早い。超優等生。|
|DeepSeek R1|正解|約5分|正確だけど遅い。間違えないようにじっくり考えるタイプ。|
|Gemini 2.0|不正解|約40秒|早いけど不正解。手が早いけどどこかで凡ミスするタイプ。|

## ChatGPT-o3-mini

<details open><summary>プロンプト投下</summary>

（💡理由）を押下することで、o3-miniに質問を投げることができる。

![スクリーンショット 2025-02-02 231351.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4000285/eebce603-dd34-dcd4-860e-bc35c709332e.png)

</details>

<details><summary>回答（長いので折り畳み）</summary>

以下のように計算できます。

### 【ルールの整理】
1回のサイコロ3個の投げで、各目は $1\sim6$ であり、全部で $6^3=216$ 通りの出方があります。各役は以下の条件となっています。

1. **「すべて1」**  
   - 条件：$ (1,1,1) $  
   - 出る通り数：$1$  
   - 得点：$15$点

2. **「ゾロ目」**（ただしすべて1は除く）  
   - 条件：$ (x,x,x) $ で $x=2,3,4,5,6$  
   - 出る通り数：$5$  
   - 得点：$10$点

3. **「4,5,6」**（順序は問わず）  
   - 条件：サイコロの出目が4,5,6の3種類すべて現れる  
   - 出る通り数：$3! = 6$  
   - 得点：$8$点

4. **「2つ同じで1つ違う」**  
   - 条件：$ (x,x,y) $ ただし $x\ne y$  
   - 出る通り数：  
     - まず$x$は$1\sim6$の任意の値（6通り）、  
     - $y$は$x$以外（5通り）、  
     - 配置の順序は3通り  
     - よって合計 $6\times5\times3=90$ 通り  
   - 得点：**「違う目」$y$ の数値**  
     - 例えば$ (4,4,2)$なら得点は2点  
     - この場合、どの$y$も均等になるので，条件付き平均得点は  
       $
       \frac{1+2+3+4+5+6}{6} = 3.5\text{点}
       $

5. **「1,2,3」**（順序は問わず）  
   - 条件：出目が $ \{1,2,3\} $  
   - 出る通り数：$3! = 6$  
   - 得点：$-4$点

これらの役に該当する出方の総数は
$
1 + 5 + 6 + 90 + 6 = 108\quad\text{通り}
$
なので，1回の投げで役が出る確率は
$
p = \frac{108}{216} = 0.5
$
であり，役が出ない確率は同じく0.5です。

### 【1回の投げにおける条件付き期待得点】
1回の投げで役が出たとき，その役ごとの確率は各役の通り数を108で割ったものとなります。

| 役の種類          | 通り数 | 条件付き確率        | 得点      |
|-------------------|--------|----------------------|-----------|
| すべて1           | 1      | $ \frac{1}{108} $  | 15点      |
| ゾロ目（すべて1除く） | 5      | $ \frac{5}{108} $  | 10点      |
| 4,5,6             | 6      | $ \frac{6}{108}=\frac{1}{18} $  | 8点       |
| 2つ同じで1つ違う   | 90     | $ \frac{90}{108}=\frac{5}{6} $ | 条件付き平均 3.5点  |
| 1,2,3             | 6      | $ \frac{6}{108}=\frac{1}{18} $  | $-4$点 |

したがって，役が出たときの条件付き期待得点 $E_{\text{役}}$ は
$
E_{\text{役}} = 15\cdot\frac{1}{108} + 10\cdot\frac{5}{108} + 8\cdot\frac{6}{108} + 3.5\cdot\frac{90}{108} + (-4)\cdot\frac{6}{108}.
$
各項を計算すると：
- $15\cdot\frac{1}{108} = \frac{15}{108}$
- $10\cdot\frac{5}{108} = \frac{50}{108}$
- $8\cdot\frac{6}{108} = \frac{48}{108}$
- $3.5\cdot\frac{90}{108} = \frac{315}{108}$  （※ $3.5\times90=315$）
- $(-4)\cdot\frac{6}{108} = \frac{-24}{108}$

和は
$
\frac{15+50+48+315-24}{108}=\frac{404}{108}=\frac{101}{27}\approx 3.74074\text{点}.
$

### 【3回の試行における全体の期待得点】
ゲームではサイコロ3個の投げを最大3回行い，**1回でも役が出ればその時の得点で終了**します。  
各回の投げで独立に役が出る確率は $0.5$ なので，
- 1回目で役が出る確率：$0.5$
- 1回目で外れて，2回目で出る確率：$0.5\times0.5=0.25$
- 1,2回目とも外れて，3回目で出る確率：$0.5^2\times0.5=0.125$
- 3回とも外れる確率：$0.5^3=0.125$

どの回で役が出ても，その時の得点の期待値は $E_{\text{役}}=\frac{101}{27}$ です。  
したがって，全体の期待得点 $E$ は
$
E = E_{\text{役}}\times (0.5+0.25+0.125) + 0\times0.125 
= \frac{101}{27} \times 0.875.
$
計算すると
$
E = \frac{101}{27} \times \frac{7}{8} = \frac{101\times7}{27\times8} = \frac{707}{216}\approx 3.273\text{点}.
$

### 【結論】
このゲームの得点の期待値は
$
\boxed{\frac{707}{216}\approx 3.27\text{点}}
$
となります。
</details>

<details open><summary>結果</summary>

- 正解！
- 回答時間は**35秒**ほど。早い！
- 質問投下後、英語でのThinkingTimeが始まり、一定時間後に日本語で回答を出力する。
- 思考の過程を【ルールの整理】から出力してくれるため非常に丁寧な印象を受けた。

</details>

## DeepSeek R1の答え
<details><summary>回答（長いので折り畳み）</summary>

サイコロを3つ振って役を競うゲームの得点の期待値は、以下の手順で計算されます。

### 各役の確率と得点
1. **すべて1（15点）**: 確率 $ \frac{1}{216} $
2. **ゾロ目（1以外、10点）**: 確率 $ \frac{5}{216} $
3. **4,5,6（8点）**: 確率 $ \frac{6}{216} $
4. **2つ同じで1つ異なる（異なる目の値）**:  
   - 発生確率 $ \frac{90}{216} $、期待値 $ 3.5 $ 点
5. **1,2,3（-4点）**: 確率 $ \frac{6}{216} $

### 1回の試行での期待値
- 役が出る確率 $ p = \frac{108}{216} = \frac{1}{2} $
- 役が出た場合の期待値 $ E = \frac{101}{27} $ 点

### 全体の期待値
試行は最大3回行われ、各試行の成功確率を考慮して計算します：
$
E_{\text{total}} = \left( \frac{1}{2} + \frac{1}{4} + \frac{1}{8} \right) \cdot \frac{101}{27} = \frac{7}{8} \cdot \frac{101}{27} = \frac{707}{216}
$

### 最終回答
得点の期待値は **$ \frac{707}{216} $** 点（約3.273点）です。

$\boxed{\dfrac{707}{216}}$
</details>

<details open><summary>結果</summary>

- 正解！
- 回答時間は**5分**ほど。とにかく長い！
- 質問投下後、日本語で長考する。その長考の過程もすべて出力される。思ったこと全部口にする子どもみたいでかわいい。
（「707/216を約分できるかどうか再確認します。707を素因数分解すると、707÷7=101で、7×101=707。216=2^3×3^3。共通の素因数はないので、707/216は既約分数です。」とかまで言わなくていいのに...笑）
- 長考の過程で3回も違うアプローチから解きなおしをしていた。すべてのアプローチで同じ答えにたどり着いてから答えを出力しているようなので、回答は信頼できる。

</details>

## Gemini 2.0 Flash Thinkingの答え
<details><summary>回答（長いので折り畳み）</summary>

期待値の計算手順は以下の通りです。

1. 各役の確率と得点を計算します。
   - すべて1 (役1): 確率 1/216, 得点 15点
   - ゾロ目(1以外) (役2): 確率 5/216, 得点 10点
   - 4,5,6のみ (ゾロ目を除く) (役3): 確率 24/216, 得点 8点
   - 2つ同じ目、1つ違う目 (役4): 確率 90/216, 期待値 3.5点
   - 1,2,3 (役5): 確率 6/216, 得点 -4点
   - 役なし: 確率 90/216, 得点 0点

2. 1回のサイコロで役が出る確率 $P_{役}$ と役が出ない確率 $P_{役なし}$ を計算します。
   - $P_{役} = (1+5+24+90+6)/216 = 126/216 = 7/12$
   - $P_{役なし} = 1 - P_{役} = 5/12$

3. 役が出た場合の得点の期待値 $E_{役}$ を計算します。
   - $E_{役} = \frac{15 \times P(\text{役1}) + 10 \times P(\text{役2}) + 8 \times P(\text{役3}) + 3.5 \times P(\text{役4}) + (-4) \times P(\text{役5})}{P_{役}}$
   - $E_{役} = \frac{15 \times (1/216) + 10 \times (5/216) + 8 \times (24/216) + 3.5 \times (90/216) + (-4) \times (6/216)}{126/216} = \frac{15 + 50 + 192 + 315 - 24}{126} = \frac{548}{126} = \frac{274}{63}$

4. ゲーム全体の期待値 $E$ を計算します。
   - 1回目で役が出る場合：確率 $P_{役}$、期待値 $E_{役}$
   - 1回目で役が出ず、2回目で役が出る場合：確率 $P_{役なし} \times P_{役}$、期待値 $E_{役}$
   - 1, 2回目で役が出ず、3回目で役が出る場合：確率 $P_{役なし}^2 \times P_{役}$、期待値 $E_{役}$
   - 3回とも役が出ない場合：確率 $P_{役なし}^3$、得点 0点
   - $E = E_{役} \times P_{役} + E_{役} \times P_{役なし} \times P_{役} + E_{役} \times P_{役なし}^2 \times P_{役} + 0 \times P_{役なし}^3$
   - $E = E_{役} \times P_{役} \times (1 + P_{役なし} + P_{役なし}^2)$
   - $E = \frac{274}{63} \times \frac{7}{12} \times (1 + \frac{5}{12} + (\frac{5}{12})^2) = \frac{274}{63} \times \frac{7}{12} \times (\frac{144+60+25}{144}) = \frac{274}{63} \times \frac{7}{12} \times \frac{229}{144} = \frac{274 \times 7 \times 229}{63 \times 12 \times 144} = \frac{31373}{7776}$

期待値は $\frac{31373}{7776}$ です。

最終回答：$\boxed{\frac{31373}{7776}}$
</details>

<details open><summary>結果</summary>

- 不正解！
- 回答時間は40秒ほど。
- シゴロ（4,5,6）が出たときの確率を間違ったせいで最後の答え間違ったみたい。ヒフミ（1,2,3）の確率あっているので、人間では発生しなさそうなミスしてる。
- 早くても間違ってたらいまいちかー。
</details>

# 終わりに
超簡単な１事例の比較だけでしたが、それぞれのモデルの色が出る検証結果になったので、誰かの何かのお役に立てば幸いです。
時間があればほかにもいろんなお題で遊んでみようと思います。

# 余談
各生成AIが出力した内容をmarkdownで転記するだけでも苦戦した、、、
ほぼコピペの記事なのに結構時間かかった。みんなどうやって記事書いてるの...？