こんにちは、フリーランスエンジニアの太田雅昭です。
LLMが間違える日本語解釈についてです。
発端
今朝Xでこのような投稿を見かけました
Aの体重は50kg
Bの体重は60kg
Cの体重は70kg
Dの体重は80kg
Eの体重は90kg
この5人の中で、Cの次に体重が重い人は誰でしょうか?
https://x.com/Sg3Lu/status/2089290875834921453
答えはBです。日本語ネイティブでも間違えると題したこの投稿ですが、「次」という言葉にはちゃんと定義されています。
2 あるものに続く地位。一段低い地位。また、一段劣ること。「主峰の次に位置する」 https://kotobank.jp/word/%E6%AC%A1-515288
これで解決と思いきや、LLMが間違えるんですね。
Fable5 vs Sol vs Luna
Fable5、GPT5.6 sol、GPT5.6 lunaそれぞれでテストした結果
- Fable5: 正解
- GPT5.6 sol: 正解
- GPT5.6 luna: 不正解
lunaは自信満々に不正解となりました。lunaは安価でサービスに組み込みやすく、今作っているアプリでも採用しています。これはまずい。さっそく実験することにしました。
検証条件
- モデル:
gpt-5.6-luna - API: OpenAI Chat Completions API
- 各問は別リクエストで送信
- アプリ固有のsystem promptは使用しない
- 最初の10問は回答形式だけを指定
- 後半8問は「曖昧な文を無理に一意に決めない」とだけ指定
問題同士を同じ会話に入れると、前の問題や回答から規則を推測できてしまいます。そのため、すべて独立したリクエストにしました。
ネイティブにはほぼ自明な10問
| 問題 | 期待する回答 | Luna | 判定 |
|---|---|---|---|
| A=50kg、B=60kg、C=70kg。Bの次に重いのは? | A | C | 不正解 |
| 東京は大阪ほど暑くない。より暑いのは? | 大阪 | 大阪 | 正解 |
| 食べられないことはない。食べられる? | 食べられる | 食べられる | 正解 |
| 赤以外は選ばない。選ぶ色は? | 赤 | 赤色 | 正解 |
| 18歳以上に18歳を含む? | はい | はい | 正解 |
| 18歳未満に18歳を含む? | いいえ | いいえ | 正解 |
| 少なくとも3個の最小個数は? | 3 | 3 | 正解 |
| 多くても3個の最大個数は? | 3 | 3 | 正解 |
| 5人必要で、すでに2人いる。あと何人? | 3 | 3 | 正解 |
| 1番の次から一人おきに座る。次は何番? | 3 | 3 | 正解 |
10問中9問正解でした。失敗したのは「Xの次に〜」だけです。
比較、二重否定、境界、数量計算が全体的にできないわけではありません。「次」と比較級が組み合わさったときだけ、順位ではなく数直線上の次の値として処理したように見えます。
ネイティブでも間違えたり、解釈が割れたりする8問
簡単な問題だけでは能力の輪郭が分からないので、今度は日本語ネイティブでも誤用しやすい語や、文の係り先によって解釈が割れる問題も試しました。
| 問題 | 見たい挙動 | Lunaの回答 | 判定 |
|---|---|---|---|
| 「参加者全員が来なかった」は誰も来なかったのか、一部だけ来たのか | 否定の範囲が曖昧だと指摘 | 複数解釈が可能 | 妥当 |
| 「10時10分前に集合」は何時か | 係り受けの曖昧さを指摘 | 9時50分が通常だが明確ではない | 妥当 |
| 100円より「2倍安い」はいくらか | 値が一意に決まらないと指摘 | 曖昧。半額の意味なら50円 | 妥当 |
| 「1万円弱」はいくらか | 1万円より少し少ない | 9,000〜9,999円くらい | 妥当 |
| 「この仕事は彼には役不足だ」は能力不足か | 本来は仕事が簡単すぎる | いいえ。仕事が簡単すぎる | 妥当 |
| 「議論が煮詰まった」の意味 | 本来と現代用法を区別 | 結論に近づいた/行き詰まったの両方 | 妥当 |
| 「姑息」の本来の意味 | 一時しのぎ | 一時しのぎ | 正解 |
| 10人の過半数は最少何人か | 6 | 6 | 正解 |
こちらは8問とも妥当でした。難しい慣用表現を知らないわけでも、曖昧さを認識できないわけでもありません。むしろ、ネイティブでも説明に迷う問題には丁寧に答えています。
その一方で、ネイティブには簡単な「Bの次に重い」で落ちました。LLMの難しさは、人間が難しいと思う問題とモデルが難しい問題が一致しない点にあります。
短いpromptで直す
このケースのために長い日本語文法集をsystem promptへ入れるのは避けました。追加したのは次の一文だけです。
「Xの次に〜」は、〜の順位でXの一つ下を指す。例: A=50kg、B=60kg、C=70kgなら「Bの次に重い」はA。
一般論だけでなく、実際に失敗した最小例も残しています。「順位を確認すること」のような抽象的な指示だけでは、モデルが同じ誤解をしたまま確認を終える可能性があるためです。このpromptを加えることで、正しく回答するようになりました。