本文へスキップ

ローカルLLMに中学数学30問を解かせた正答率|Ollama 4モデル実測(RTX 3090)

SHAYOUWORLD 公開 約9分

要点

  1. gemma4:31bとgpt-oss:20bは30問すべて正答した。 1問あたりの平均時間はgpt-oss:20bが1.8秒、gemma4:31bが11.2秒でした。
  2. 計算間違いによる誤答は、4モデル・延べ120問のうち完走した118問で0件だった。 失点はすべて、回答が届く前の時間切れか、答えの行に付いたLaTeX記号による書式不一致です。
  3. qwen3.6:35b-a3bは28/30(時間切れ2問)、qwen2.5:14bは厳密採点で28/30(数式としては30/30一致)。 qwen2.5:14bは文字式2問で答え: \(-2x\)のように\( ... \)を付けたため、正規化関数が弾きました。
  4. 答えが合っていても、途中式の出し方はモデルで大きく違う。 gpt-oss:20bは30問中25問で思考(thinking)にだけ計算を書き、本文(content)には答え: ...の1行だけを返しました。

家庭学習の検算や問題づくりの補助にAIを使う話題が増えていますが、手元のPCとOllamaで動くローカルLLMに中学数学の計算・方程式・文章題を解かせると、どの分野でどれだけ正答し、どんな失敗が起きるのかを実測しました。RTX 3090 24GBで4モデルに7分野30問を1回ずつ出し、出力を機械的に採点しています。

問題生成・採点を行うベンチマークスクリプトと、4モデル×30問の結果JSONをそのまま配布します。本文の数値はすべてこのJSONからの転記です。

7分野30問の内訳と測定条件

問題は、外部の問題集から転載したものではなく、乱数シード(20261026)を固定した決定的な乱数(mulberry32)で生成し、スクリプト側で計算した正解と一緒に保持しています。方程式や平方根は、解や簡約後の形から逆算して問題文を作るため、端数や平方根の中の平方数が残らない設計です。

分野ID分野名問数出題例(シード 20261026)正解の例求める出力形式
seifu正負の数の四則6(-6)² - 7 × (-8)92単位を書かず数だけ
mojishiki文字式の計算42(3x + 2) - 2(4x + 2)-2x最も簡単な形の文字式
ichiji一次方程式57x - 12 = 8x - 4-8x=... または数
renritsu連立方程式42x - 2y = 12, -3x + 5y = -28x=1, y=-5x=..., y=...
kansu一次関数の値3y = 3x + 4 で x が 4 から 8 まで増加するときの y の増加量12単位を書かず数だけ
bunshou割合・速さの文章題5定価 3000 円の商品を 15% 引きで買うと、代金は何円か2550単位を書かず数だけ
heihoukon平方根の計算3√63 + √74√7最も簡単な形で √ を使用

各問題のプロンプトは、最後の行に答え: に続けて答えだけを書くよう指示し、分野ごとの出力例を添えています。たとえばrenritsu-1に送ったプロンプトは次のとおりです。

次の中学数学の問題を解いてください。最後の行に「答え: 」に続けて答えだけを書いてください。答えは x と y の値を書く(例: 答え: x=3, y=-2)。
問題: 次の連立方程式を解きなさい。 2x - 2y = 12, -3x + 5y = -28

実行は2026年10月26日16:14〜16:40(日本時間、2026-10-26T07:14:19.303Z〜07:40:39.784Z)です。

  • 実行環境:NVIDIA GeForce RTX 3090(24,576 MiB、ドライバ617.42)、Windows(win32 10.0.26300)、Ollama 0.30.6、Node.js v24.22.1
  • 推論オプション:Ollamaの/api/chatへ、temperature 0、seed 20261026、num_ctx 4096、num_predict 3584でストリーム送信。1回答の上限は300秒(300,000 ms)
  • 実行順序:gemma4:31b → qwen3.6:35b-a3b → gpt-oss:20b → qwen2.5:14bの順に30問ずつ1回実行し、各モデルの終了後にollama stopでメモリを解放。思考(thinking)の有効・無効はモデル既定のまま
  • 採点基準:回答本文(content)の最後の答え:行を抽出し、全角半角・空白・単位(円、km、人、時間など)・$や\boxed{}・\sqrt{}などを正規化したうえで、数値・一次式の係数(p, q)・連立解(x, y)・平方根(a, b)が正解と一致するかを判定。未整理の式(例:5x - 2 - x - 1や√45)は不正解とする

結果:gemma4とgpt-ossが30/30、残り2モデルが28/30

30/30
gemma4:31b(100%)
平均11.2秒(合計337.1秒)・全問に途中式あり
30/30
gpt-oss:20b(100%)
平均1.8秒(合計53.4秒)・本文は答え中心
28/30
qwen3.6:35b-a3b(93.3%)
平均37.5秒・300秒の時間切れが2問
28/30
qwen2.5:14b(93.3%)
平均2.1秒・LaTeX記号で2問不一致(数式は30/30)
7分野30問の厳密採点による正答数。平均秒数はモデル読み込みや時間切れの300秒を含む1問あたりの壁時計時間

分野ごとの正答数と、モデル別の所要時間・出力文字数の集計です。

分野(問数)gemma4:31bgpt-oss:20bqwen3.6:35b-a3bqwen2.5:14b
正負の数の四則(6)6/66/66/66/6
文字式の計算(4)4/44/44/42/4(書式不一致2)
一次方程式(5)5/55/55/55/5
連立方程式(4)4/44/43/4(時間切れ1)4/4
一次関数の値(3)3/33/32/3(時間切れ1)3/3
割合・速さの文章題(5)5/55/55/55/5
平方根の計算(3)3/33/33/33/3
合計(30)30/30(100%)30/30(100%)28/30(93.3%)28/30(93.3%)
30問の合計時間337.1秒53.4秒1,125.2秒61.9秒
1問あたりの平均時間11.2秒1.8秒37.5秒2.1秒
thinking合計文字数17,783文字6,984文字63,388文字0文字
回答本文(content)合計文字数2,717文字592文字3,893文字4,458文字

1問あたりの平均時間を並べると、gpt-oss:20b(1.8秒)とqwen2.5:14b(2.1秒)が2秒前後、gemma4:31bが11.2秒、qwen3.6:35b-a3bが時間切れ2問を含めて37.5秒でした。各モデルとも1問目(seifu-1)にモデルの読み込み時間(12.2〜36.5秒)が含まれます。

1問あたりの平均所要時間(30問平均)
gpt-oss:20b(30/30) 1.8秒
qwen2.5:14b(28/30・数式30/30) 2.1秒
gemma4:31b(30/30) 11.2秒
qwen3.6:35b-a3b(28/30) 37.5秒
時間切れ2問(各300秒)を含む
壁時計時間の30問平均。1問目のモデル読み込み時間と、時間切れの300秒を含む / local-llm-math-bench-20261026.json の summary.meanSeconds

失敗の型:計算ミスではなく、書式ズレと時間切れ

今回の30問では、最後まで回答が出た118問(4モデル×30問のうち時間切れ2問を除く)すべてで、導かれた数や式が正解と一致していました。不正解になった4件は、次の2種類に分かれます。

1. 答えの行に \( ... \) を付けた書式不一致(qwen2.5:14b の2問)

qwen2.5:14bは、文字式のmojishiki-1(正解 -2x)とmojishiki-3(正解 6x - 24)の2問で不正解と判定されました。実際の出力は次のとおりです。

# mojishiki-1(問題: 2(3x + 2) - 2(4x + 2) / 正解: -2x)
与えられた式は \(2(3x + 2) - 2(4x + 2)\) です。
まず、分配法則を使って括弧を展開します:
\[= 6x + 4 - (8x + 4)\]
次に、マイナスの符号を通じて二番目の括弧内の各項に負号を適用します:
\[= 6x + 4 - 8x - 4\]
最後に似た項をまとめます:
\[= (6x - 8x) + (4 - 4)\]
\[= -2x + 0\]
\[= -2x\]
答え: \(-2x\)
# mojishiki-3(問題: 3(x - 6) + 3(x - 2) / 正解: 6x - 24)
(中略)
\[ 3x + 3x - 18 - 6 = 6x - 24 \]
答え: \(6x-24\)

計算自体はどちらも合っています。ただ、採点スクリプトのnormalizeMathTextは$...$や\boxed{...}は取り除く一方、LaTeXのインライン数式記号である\(と\)を取り除いていませんでした。そのため抽出された\(-2x\)と\(6x-24\)にバックスラッシュと括弧が残り、一次式のパーサー(parseLinearExpression)がnullを返して不一致になりました。

同じqwen2.5:14bでも、本文中で\[ ... \]や\( ... \)を使いながら、最後の行だけは答え: x=-8や答え: 10x-14とプレーンテキストで書いた他の28問は正答になっています。プログラムでLLMの出力を受け取って自動判定する場合、数式の中身だけでなくLaTeXデリミタの揺れ($...$、\( ... \)、\[ ... \])を正規化側で吸収する必要があることが分かります。

2. 思考の途中で300秒に達した時間切れ(qwen3.6:35b-a3b の2問)

qwen3.6:35b-a3bは、連立方程式のrenritsu-4(4x - 2y = -14, 3x - y = -8)と一次関数のkansu-1(y = 6x + 9 で x = -6 のときの y)の2問で、上限の300秒に達して打ち切られました。

  • renritsu-4:300.0秒で171チャンク、思考(thinking)が614文字出たところで停止。本文は0文字
  • kansu-1:続く問題でも300.0秒で21チャンク、思考が92文字出たところで停止。本文は0文字
  • その次のkansu-2は168.5秒(527トークン)で完走して正答し、以降のkansu-3からheihoukon-3までの9問は5.2〜18.3秒で完走してすべて正答

ほかの完走した28問では5.0〜36.5秒(kansu-2のみ168.5秒)で1,036〜4,232文字の思考を出力しているのに対し、時間切れの2問は300秒間で21〜171チャンクしか進んでいません。問題の難しさで考え込んだというより、この2問の途中で生成速度自体が極端に落ちています。RTX 3090(24GB)で23GB級のモデルを動かす際にVRAMの空きやオフロードがどう影響したかは今回記録していませんが、WindowsとOllamaで急に遅くなるときの確認手順はOllamaがWindowsでGPUを使わない・遅いときの確認手順にまとめています。

同じ満点でも、途中式の出し方が違う

30問すべて正答したgemma4:31bとgpt-oss:20b、および完走した問題すべてで計算過程を書いたqwen2.5:14bとqwen3.6:35b-a3bでは、回答本文(content)と内部思考(thinking)の使い分けがはっきり分かれました。

gemma4:31b / qwen2.5:14b(本文に途中式を書く)
gpt-oss:20b(思考で解き、本文は答えだけが多い)
回答本文(content)の合計
gemma4は2,717文字、qwen2.5は4,458文字。全30問で式変形や立式を出力
30問合計で592文字。30問中25問は「答え: ...」の5〜13文字だけ
思考(thinking)の合計
gemma4は17,783文字(1問255〜1,343文字)。qwen2.5は0文字
6,984文字(1問125〜579文字)。立式と計算はthinking側に入っている
向いている用途
人間が途中式を読んで検算する、どこで符号や移項を間違えたか見比べる
答えの値だけを高速(平均1.8秒)に取り出して機械処理する
プロンプトで「最後の行に『答え: 』に続けて答えだけを書いてください」と指定したときの、既定設定での挙動の差

今回のプロンプトは「最後の行に『答え: 』に続けて答えだけを書いてください」とだけ指定し、途中の行に計算過程を書くかどうかは指示していません。その結果、gpt-oss:20bは一次方程式の4問と平方根の1問を除く25問で、計算をすべてthinkingフィールド内で済ませ、contentには答え: 3や答え: x=1, y=-5の1行だけを返しました。

家庭学習の検算で「自分の途中式のどこが違うか」を確かめたい場合は、答えの数字だけでは役に立ちません。gpt-oss:20bのように思考と本文を分けるモデルを使うなら、プロンプトで「途中の計算式も本文に書くこと」と明示するか、APIのthinkingフィールドもあわせて表示する必要があります。

手元で再現する

local-llm-math-bench.mjsとlocal-llm-math-bench-20261026.jsonを同じフォルダに保存します。Node.js 22以降の標準機能だけで動き、追加パッケージやAPIキーは不要です。

Terminal window
# 生成される7分野30問の問題文と正解を表示する(Ollamaには接続しない)
node .\local-llm-math-bench.mjs --print-problems
# 1モデルだけ実行し、結果JSONと各問の生ログ(thinking・content全文)を保存する
node .\local-llm-math-bench.mjs --models gpt-oss:20b --out results.json --raw-dir raw

--modelsを省略すると今回の4モデルを順番に実行します。Ollamaを使わずに、公開している結果JSONの120件を採点関数で再検証するだけなら、同じフォルダで次のワンライナーを実行できます。

Terminal window
node -e "import('./local-llm-math-bench.mjs').then(({generateProblems,isCorrect})=>{const fs=require('node:fs');const d=JSON.parse(fs.readFileSync('./local-llm-math-bench-20261026.json','utf8'));const p=new Map(generateProblems().map(x=>[x.id,x]));const diff=d.results.filter(r=>(!r.error&&isCorrect(p.get(r.id),r.extracted??''))!==r.correct);console.log(d.results.length+' results, '+diff.length+' mismatches');})"
120 results, 0 mismatches

測定の限界と、検算に使うときの注意点

よくある質問

ローカルLLMは中学数学の計算や方程式をどのくらい解けますか?

今回の7分野30問(正負の数、文字式、一次方程式、連立方程式、一次関数、割合・速さの文章題、平方根)では、gemma4:31bとgpt-oss:20bが30問すべて正答しました。qwen3.6:35b-a3bは300秒の時間切れ2問を除く28問すべてで正答し、qwen2.5:14bは文字式2問でLaTeX記号付きの出力により自動採点で不一致になりましたが、導出した数式自体は30問すべて正解と一致していました。各問1回の結果です。

qwen2.5:14bが28/30になった原因は何ですか?

計算ミスではなく、答えの行の書式です。mojishiki-1で「答え: (-2x)」、mojishiki-3で「答え: (6x-24)」とLaTeXのインライン数式記号を付けて出力したため、$や\boxedだけを除去していた採点関数で不一致となりました。本文の計算過程とカッコ内の式は正解と一致しています。

同じ30問のベンチマークを自分のPCで再現できますか?

同梱のlocal-llm-math-bench.mjsはNode.jsの標準機能だけで動き、乱数シード20261026から同じ30問と正解を生成します。—print-problemsで問題一覧を確認でき、手元のOllamaへ送信して採点できます。結果JSONも同梱しているため、Ollamaを動かさずに採点関数の再計算だけを確かめることもできます。

次に読む

日本語の実務課題でローカルLLMがどう失敗するかはJ-WorkBenchの失敗例7ケース、クラウドモデルとの相対得点と測定の限界はローカルLLMとクラウドの比較にまとめています。手元のGPUメモリにどのモデルとnum_ctxが載るかを見積もるには、VRAM別モデルサイズ早見を参照してください。

この記事の情報・検証メモ
Tags
公開日
情報確認
更新性
定期更新
更新管理

仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。

検証メモ
NVIDIA GeForce RTX 3090 24GB(ドライバ 617.42)/ Windows / Ollama 0.30.6 / Node.js 24.22.1 temperature 0・seed 20261026・num_ctx 4096・num_predict 3584。各問1回、1回答の上限300秒 乱数シード 20261026 で7分野30問を決定的に生成し、正規化後の完全一致で自動採点
図解を保存・共有

記事の要点を1枚にまとめました。画像は新しいタブで開いて保存できます。

ローカルLLMの中学数学30問を実測 gemma4とgpt-ossが30/30、残り2モデルは28/30 モデル別の正答数:gemma4:31bとgpt-oss:20bが30/30。qwen3.6:35b-a3bとqwen2.5:14bは厳密採点で28/30。 失点の理由は計算ミス以外:qwen3.6の2問は300秒の時間切れ、qwen2.5の2問は答えの行に\(...\)を付けた書式不一致で、数式自体は30問とも合っていた。 条件と限界:RTX 3090・Ollama 0.30.6・温度0で各1回。シード固定で機械生成した計算・文章題30問で、図形や証明は含まない。 CodeAgentのローカル実測 / 2026-10-26
ローカルLLMに中学数学30問を解かせた正答率|Ollama 4モデル実測(RTX 3090) 記事の要約 2026.10.26 比較・選定
About the author
SHAYOUWORLD

日本の公共データAPIを使うMCPサーバーを作って公開し、ローカルLLMを自分のGPUで測った記録を、一次情報・検証ログ・失敗例とあわせて整理します。