AIが計算を間違える意外な理由と対策
画像出典: 写真: Gwessels24(CC BY-SA 4.0 / Wikimedia Commons)
言語モデルは数式を計算しているのではなく、次に来る単語の確率を予測して「それらしい続き」を出しています。数字もテキストの一部として細切れの単位に分割されるため、桁の位取りがずれて簡単な計算でも間違えます。計算過程を順に書かせる、電卓や表計算機能に回す、数え上げは一覧を出させて自分で数える、の3つで実害はほぼ避けられます。
難しい仕事はこなすのに、小学生でも解ける計算でつまずく。この落差が不気味に感じられるのは、AIが「頭のいい電卓」だと思われているからです。
正直なところ、その前提が実態とずれています。言語モデルは計算機ではありません。数式を渡されたときも、やっていることは文章を書くときとまったく同じ処理です。ここを理解すると、どこまで任せてよくて、どこから自分で確かめるべきかの線がはっきり引けます。
AIは計算しているのではなく、続きを予測している
まず前提を合わせます。大規模言語モデル(LLM。大量の文章を学習して次の単語を予測するAI)がやっているのは、次に来る単語(トークン)の確率分布を予測し、そこから1つを選ぶという作業の繰り返しです。決定論的に「正解」を計算しているのではありません。
「17 + 25 =」という文字列を渡されたとき、モデルの内部では電卓のような加算回路が動いているわけではないのです。学習したテキストの中で、この並びの後にどんな文字が来ることが多かったか——その確率が高い続きを出しています。正しく見える答えは、計算した結果ではなく「もっともらしかった結果」です。
それでも簡単な計算がだいたい合うのは、そういう式と答えの組み合わせが学習データに大量に含まれていたからです。逆に言えば、めったに出てこない数字の組み合わせになるほど、頼れるパターンがなくなって精度が落ちます。研究でも、モデルは体系立った計算アルゴリズムではなく表面的なパターンマッチングに頼っており、特に桁数が多い数の「途中の桁」で精度が落ちることが示されています。
なぜ数字だと特に間違えるのか?──トークン化という根本原因
ここが一番の核心です。LLMは文章をそのまま読んでいるのではなく、トークンという単位に切り分けてから処理します。トークンは「よく一緒に出てくる文字のかたまり」で、言語の頻度に合わせて効率よく切れるように設計されています。
問題は、この切り方が数字の「位取り」をまったく考慮していないことです。ChatGPTで使われるBPE(Byte Pair Encoding。頻出する文字の並びをひとかたまりにまとめる方式)では、たとえば「380」は1つのトークンとして扱われる一方、「381」は「38」と「1」のように2つに分割されることがあります。見た目が1しか違わない数字でも、モデルの内部での扱われ方は別物になるわけです。
人間が筆算をするとき、私たちは「一の位」「十の位」という桁の構造を絶対に崩しません。ところがモデル側は、数字を「38」「1」というかたまりで受け取っています。桁という足場がない状態で、それらしい続きを出しているのです。
- 桁数が多い(4桁以上の掛け算など)
- 小数を含む
- 式が長く、演算の順序が複雑
- 学習データに出てきにくい、半端な数字の組み合わせ
これらの条件が重なるほど、数値の順序の取り違えや演算順序のミスが起きやすくなる、と実務解説でも指摘されています。学術的な検証でも、数値の符号化方式(数を1トークンとして扱うかどうかなど)によって計算精度が変わることが報告されており、モデルごとに算術の得手不得手が出る一因とされています。
個数を数えるのが苦手なのも同じ理由?
「この文章に『の』はいくつある?」「箇条書きは何項目?」——こうした数え上げも、AIがよく外すところです。
これも計算と地続きの話です。数え上げは本来、1つずつ照合してカウンタを1ずつ増やす手続きですが、モデルにはそのカウンタがありません。「数えた結果」ではなく「その質問への答えとしてありそうな数」を出しているので、7個のものを「5個です」と自信たっぷりに答えることが起こります。
しかも厄介なのは、答えに迷いが出ないことです。人間なら数え間違えそうなときは「たぶん」と付けますが、モデルは確率的に一番ありそうな続きを出しているだけなので、確信度と正しさが連動しません。ここが鵜呑みが危険な理由です。
推論を長く行うモデルは、内部で計算過程を展開する分だけ算術の精度が上がりやすい傾向があります。ただし、根っこの仕組み——確率的に続きを生成している——は変わりません。桁数が大きい計算や、金額・数量のように間違いが実害になる場面では、モデルの種類にかかわらず検算の手順を挟んでください。
精度を上げる聞き方は?
仕組みがわかると、対策は3つに整理できます。どれも今日から試せます。
- 計算過程を書かせてから答えを出させる「途中式を一行ずつ書いてから、最後に答えを出してください」と指示します。小学校レベルの文章題を集めたベンチマーク「GSM8K」(8,500問)を使った報告では、思考の連鎖(chain-of-thought。答えの前に推論の手順を書かせる方法)を併用したときに正答率が大きく伸びたとされています。ただしモデルや聞き方によって差が大きく、これは「精度が上がりやすい」であって保証ではありません。
- 電卓機能・コード実行に回す「Pythonで計算して」「表計算の式で出して」と指示すると、モデルは自分で暗算せず実際の計算エンジンを呼びます。ここで初めて、本物の計算が行われます。桁数が大きい計算や金額の集計は、迷わずこちらへ。
- 数え上げは「一覧を出させて自分で数える」合計をいきなり聞かず、「該当する箇所をすべて番号付きで書き出して」と頼みます。列挙はモデルが得意な作業で、数えるのは人間や表計算が得意な作業。得意なところで分担を切るのが一番確実です。
どこまで任せて、どこから自分で確かめる?
線引きの基準はシンプルで、間違えたときに誰かが損をするかどうかです。
| 任せてよい | おおよその規模感を掴む概算、比率のイメージ、計算の考え方や手順の説明、数式の立て方の相談 |
|---|---|
| 必ず検算する | 請求額・見積・給与・税額、在庫や人数のカウント、資料に載せる統計値、期日の日数計算 |
| そもそも渡さない | 手元の電卓や表計算で30秒で終わる計算(AIに回すほうが遠回りで、しかも不確か) |
3つ目は見落とされがちです。AIに何でも聞く癖がつくと、確実な道具を使わずに不確かな道具を選んでしまいます。表計算のSUM関数は絶対に数え間違えません。
AIが計算を間違えるのは欠陥というより、そもそもそういう道具ではないというだけの話です。文章の構造を掴んで書き換えることには圧倒的に強く、桁を正確に扱うことには弱い。包丁で釘は打てませんが、それは包丁が悪いわけではありません。
この「確率的に続きを出している」という一点は、計算ミス以外の挙動も説明します。同じ質問なのに答えが毎回違うのも、それらしい数字や固有名詞が混ざるのも、根っこは同じ仕組みです。仕組みを1つ掴んでおくと、初めて見る失敗にも「ああ、あれか」と見当がつくようになります。
よくある質問
ChatGPTはなぜ簡単な足し算を間違えるのですか?
言語モデルは計算をしているのではなく、次に来る単語の確率を予測して「それらしい続き」を出しているためです。さらに数字はトークンという単位に分割されて処理され、その分割は桁の位取りを考慮していないため、桁の取り違えが起こります。簡単な式でも学習データに出てきにくい数字の組み合わせだと精度が落ちます。
計算を正しく答えさせるにはどう指示すればいいですか?
「途中式を一行ずつ書いてから答えを出してください」と計算過程を明示させると精度が上がりやすいことが、算数ベンチマークを使った報告で示されています。より確実なのは「Pythonで計算して」のようにコード実行や電卓機能を使わせる指示で、この場合はモデルの暗算ではなく実際の計算エンジンが動きます。
文字数や項目数を数えさせても合わないのはなぜですか?
モデルには1つずつ数えるカウンタが存在せず、数え上げの結果ではなく「その質問への答えとしてありそうな数」を生成しているためです。対策として、合計をいきなり聞かず「該当箇所を番号付きですべて書き出して」と列挙させ、集計は自分か表計算ツールで行うと確実になります。
思考モードや高性能なモデルを使えば計算ミスはなくなりますか?
なくなりません。推論を長く行うモデルは内部で計算過程を展開する分だけ精度が上がりやすい傾向はありますが、確率的に続きを生成するという根本の仕組みは変わりません。金額や数量など間違いが実害になる場面では、モデルの種類にかかわらず電卓や表計算での検算を挟んでください。
※記事で使用した内容・数値は変更される場合があります。最新情報は公式サイトをご確認ください。