LLMは文字数のカウントが苦手なのか
以下のプロンプトを実行して確認してみます。
検証用プロンプト
ひらがな、もしくはカタカナで3文字の果物教えて
GPT-4o
Claude 3.7
o1
Claude 3.7 (Extended)
Claude 3.7 もExtendedモードにしたところ、正しい回答をしてくれました。
なぜこのような誤りが起きるのか
o1に聞いてみました。
間違える理由
一般的に、ChatGPTなどの大規模言語モデルは「文字数を正確に数える」という処理を内部で厳密に行っているわけではなく、あくまで膨大なテキストパターンを元に次に続く単語や文を生成しているため、「ひらがな/カタカナで何文字か」を厳密に判断するのが苦手です。
その結果、**「もも」「いちご」「なし」**のように2文字のものまで「3文字の果物です」と誤って挙げてしまうことがあります。
間違えた理由の細分化
1. 訓練データに基づくパターン生成
GPTは質問を受けてから文脈に合う単語を統計的に選んで文章を生成しますが、実際に「〇文字かどうか」をプログラム的にチェックしているわけではありません。
そのため、果物名の中で「3文字」という条件を満たしているかどうかを厳密に検証しないまま、会話コーパス等から得た知識を踏まえた“可能性の高い単語”を列挙してしまいます。
2. 文字数カウントと内部トークン化のズレ
GPTの内部では、単語や文が「トークン」と呼ばれる単位で分割されています。
日本語ではひらがなやカタカナがどのようにトークン化されるかは複雑で、実際の文字数とトークン数が必ずしも一致しません。
そのため「文字数を数える」というタスクが苦手になりがちです。
3. 誤った文字数認識
特に日本語の文字数は、ローマ字変換時の母音・子音の個数や、発音単位(モーラ数)などとは一致しません。「いちご」は3文字、「もも」「なし」は2文字と数えるべきですが、「読み」の長さや他言語での表記などと混同し、誤って3文字扱いしてしまうケースがあります。
このように、GPT系モデルは「文字数カウント」などの形式的・機械的なチェックを得意とせず、むしろ曖昧なパターン認識に基づいて出力するため、厳密な文字数判定が絡むタスクにおいて誤りを生じやすいのが原因です。
まとめ
LLMは、日本語の文字数カウントが苦手であることが分かりました。
文字数を厳密に制御しなければならない場合は、ルールベースの処理と組み合わせて使用する必要がありそうです。