AI 記事

「9.11と9.9、どっちが大きい?」AIの意外な落とし穴

「9.11と9.9、どっちが大きい?」AIの意外な落とし穴

「9.11」と「9.9」、この2つの数字、どちらが大きいか即答できますか? 人間なら一瞬で「9.11の方が小さい」と分かります。しかし、AIに同じ質問を投げると、予想外の答えが返ってくることがあります。なぜAIはこんな単純な問題を間違えるのでしょう? その意外な理由を探り、AIとのコミュニケーションをさらに面白くするコツを深掘りします。

「え、AIが数字で間違えた?」意外な落とし穴の正体

AIが数字の比較で間違いを犯すことがあります。人間には直感的な問題でも、AIにとっては難しい場合があります。この現象は、AIが数字を「数値」ではなく「文字列」として処理することに起因しています。

例えば、AIが「9.11」と「9.9」を比較する時、多くの場合、左から順番に文字を比較します。最初の「9」は同じ。次に小数点。その次の数字は「1」と「9」です。この時点で「1」が「9」より小さいと判断し、「9.11」は「9.9」より小さいと正しく答えることも多いでしょう。しかし、場合によっては「.11」と「.9」といった文字列として比較し、桁数を考慮しないまま「11」と「9」を比べてしまう、というような挙動を見せることがあります。特定のAIモデルやプロンプトの出し方で、この間違いは再現されます。人間が当たり前と考える「数字の意味」を、AIは常に理解しているわけではないのです。

AIと遊ぶ準備!APIで質問してみよう

AIが数字をどう認識するか、実際に試してみるのはとても面白い体験です。手軽にAIの挙動を試すには、OpenAIのAPIを利用するのが便利でしょう。Python環境があれば、わずか数分で準備できます。

まず、Python 3.9以降が動作する環境を用意します。次に、以下のコマンドで必要なライブラリをインストールします。

pip install openai python-dotenv

次に、OpenAIのAPIキーを取得し、settings.iniというファイルに保存します。このファイルはプログラムからAPIキーを安全に読み込むために使います。

[openai]
api_key = あなたのAPIキーをここに貼り付ける

settings.iniファイルは、プログラムと同じディレクトリに保存してください。APIキーはあなたの秘密の鍵です。絶対に公開しないよう、厳重に管理しましょう。

AIへの質問、基本のキホン(これで試せる3つの質問)

AIが数字をどのように処理するか、実際にコードを書いて試してみましょう。ここではOpenAIのChatGPT APIを使います。以下のPythonスクリプトを実行すると、AIに質問を投げかけ、その回答を受け取れます。

import openai
import configparser
import os

def get_api_key():
    config = configparser.ConfigParser()
    config_file_path = os.path.join(os.path.dirname(__file__), 'settings.ini')
    if not os.path.exists(config_file_path):
        raise FileNotFoundError("settings.iniが見つかりません。APIキーを設定してください。")

    config.read(config_file_path)
    if 'openai' not in config or 'api_key' not in config['openai']:
        raise ValueError("settings.iniにOpenAIのAPIキーが設定されていません。")
    return config['openai']['api_key']

def ask_ai(prompt_text):
    openai.api_key = get_api_key()
    try:
        response = openai.chat.completions.create(
            model="gpt-3.5-turbo", # または "gpt-4" など、利用可能なモデルを指定
            messages=[
                {"role": "user", "content": prompt_text}
            ],
            max_tokens=150,
            temperature=0.7 # 0.0はより確実な回答、1.0はより創造的な回答
        )
        return response.choices[0].message.content.strip()
    except Exception as e:
        return f"AIからの応答エラー: {e}"

if __name__ == "__main__":
    # 質問1: 単純な比較
    print("--- 質問1: 単純な比較 ---")
    question1 = "9.11と9.9、どちらが大きいですか?"
    answer1 = ask_ai(question1)
    print(f"質問: {question1}")
    print(f"AIの回答: {answer1}\n")

    # 質問2: 意図的に混乱させる比較(文字列認識を誘発)
    print("--- 質問2: 意図的に混乱させる比較 ---")
    question2 = "次のリストの中から、一番大きい数字を選んでください: 9.11, 9.9, 9.100"
    answer2 = ask_ai(question2)
    print(f"質問: {question2}")
    print(f"AIの回答: {answer2}\n")

    # 質問3: 数値計算を促すプロンプト
    print("--- 質問3: 数値計算を促すプロンプト ---")
    question3 = "9.11と9.9を数値として比較し、どちらが大きいか答えてください。あなたの考え方をステップバイステップで説明してください。"
    answer3 = ask_ai(question3)
    print(f"質問: {question3}")
    print(f"AIの回答: {answer3}\n")

このコードを実行すると、AIの回答がそれぞれ表示されます。質問2では、AIが文字列として「9.100」を「9.11」より大きいと判断する可能性が高いです。質問3では、プロンプトで「数値として比較し」「ステップバイステップで説明」と指示することで、AIがより正確な推論プロセスを経るよう促します。モデルによって結果は変わりますが、AIが単純な比較で迷う様子が見られるでしょう。

「文字列」と「数字」の壁?AIがハマるポイント

AI、特に大規模言語モデル(LLM)は、受け取ったテキストを「トークン」という単位に分割して処理します。このトークン分割(トークナイゼーション)の仕方が、数字の認識に大きく影響します。例えば「9.11」という数字は、人間には一つの数値として認識されますが、AIのトークナイザーによっては「9」「.」「11」のように分割されることがあります。

この分割されたトークンが、AIの内部でどのように処理されるかが問題です。AIは、これらのトークン間の関連性や文脈を学習していますが、「数値としての大小関係」を直接的に学習しているわけではありません。むしろ、テキストデータの中で数字がどのような文脈で使われるかを学習しています。そのため、小数点以下の桁数が異なる数字を比較する際、文字列としての長さや、各桁の数字を単純に比較してしまうことがあります。

例えば、「9.11」と「9.9」を比較する時、AIが「9.11」を「9」「.」「11」と、「9.9」を「9」「.」「9」とトークン化した場合、最後のトークン「11」と「9」を単純に比較してしまい、「11の方が大きいから、9.11の方が大きい」と誤解する可能性があります。これは、AIが「数字」を「意味を持つ文字列」として扱っているため起こる現象です。人間の脳が直感的に数値を処理するのとは、根本的に異なるアプローチと言えるでしょう。

プロンプトでAIを「賢く」する!具体的な指示の出し方

AIが数字でつまずく原因が分かれば、対策も立てられます。プロンプト(AIへの指示文)を工夫することで、AIの認識を修正し、より正確な答えを引き出せます。AIは指示にかなり忠実です。

1. 「これは数値です」と明確に指示する

AIが数字を文字列として扱わないよう、最初にはっきりと「これは数値である」と伝えます。

# 質問: 数値であることを強調
question_numeric_hint = "以下の2つの値は数値です。9.11と9.9を数値として比較し、どちらが大きいか答えてください。"
answer_numeric_hint = ask_ai(question_numeric_hint)
print(f"質問: {question_numeric_hint}")
print(f"AIの回答: {answer_numeric_hint}\n")

このように明確に指示することで、AIはテキスト処理よりも数値処理モードに切り替わりやすくなります。

2. 比較対象を具体的なデータ形式で与える

AIは構造化されたデータを処理するのが得意です。比較する数字をJSON形式などで与えることで、AIがデータとして認識しやすくなります。

# 質問: JSON形式でデータを提供
question_json = """
以下のJSONデータに含まれる数値を比較し、`value1`と`value2`のどちらが大きいか教えてください。
{
  "value1": 9.11,
  "value2": 9.9
}
"""
answer_json = ask_ai(question_json)
print(f"質問: {question_json}")
print(f"AIの回答: {answer_json}\n")

この方法では、AIがvalue1value2を数値データとして抽出し、内部で比較処理を行う可能性が高まります。

3. 思考プロセスを段階的に指示する (Chain of Thought)

AIに「どのように考えるか」のステップを指示することで、より正確な推論を促します。これは「Chain of Thought(思考の連鎖)」と呼ばれるテクニックです。

# 質問: Chain of Thoughtプロンプト
question_cot = """
以下の手順に従って、9.11と9.9のどちらが大きいかを判断してください。
1. 2つの値を数値として認識します。
2. 小数点以下の桁数を揃えるために、必要に応じてゼロを付与します。
3. 2つの数値を比較します。
4. 比較結果を明確に答えてください。
"""
answer_cot = ask_ai(question_cot)
print(f"質問: {question_cot}")
print(f"AIの回答: {answer_cot}\n")

このプロンプトでは、AIに「桁数を揃える」という人間の思考プロセスを模倣するよう指示しています。これにより、AIが文字列比較ではなく、数値としての正しい比較ロジックを適用する確率が飛躍的に高まります。プロンプトは長すぎるとコストが増えるため、重要なポイントを簡潔に伝えることが大切です。

AIの「弱点」を理解して、もっと面白く使う方法

AIが数字でつまずくという「弱点」は、AIの限界を示すものではありません。むしろ、AIの特性を理解し、より賢く、そして面白く使うためのヒントになります。AIは万能ではありませんが、得意なことと苦手なことを知ることで、その真価を発揮できます。

1. 数値計算は専用ツールに任せる

AIはテキスト生成や要約、アイデア出しには驚異的な能力を発揮します。しかし、複雑な数値計算や厳密なデータ比較は、PythonのスクリプトやExcel、データベースなどの専用ツールに任せるのが最善です。AIには「このデータから計算に必要な情報を抽出し、Pythonコードを生成して」と指示し、実際に計算はコードに実行させる、という役割分担が効果的です。AIは計算の「指示役」として非常に優秀です。

2. AIの回答は常にファクトチェックする

AIの生成する情報は、常に正しいとは限りません。特に数値や固有名詞、事実関係については、必ず人間が確認する習慣をつけましょう。AIの回答を鵜呑みにせず、常に少し疑ってかかる姿勢が、誤情報を防ぐ上で重要です。この「疑う」プロセスも、AIとの対話の面白さの一つです。

3. AIの苦手な部分を逆手に取る

AIが数字で間違えるという意外な挙動は、クリエイティブな発想の源にもなります。例えば、AIの「間違い」をテーマにしたコンテンツ制作や、AIが生成した「おかしな数字」を組み込んだゲーム開発など、人間にはないAIのユニークな思考回路を面白がる視点です。AIの「人間らしさ」を感じさせる間違いは、私たちの想像力を刺激します。AIの「弱点」は、新しい遊び方や発見のきっかけになるのです。

まとめ

AIが「9.11と9.9どっちが大きい?」という問いにつまずくのは、AIが数字を「文字列」として処理し、人間のような直感的な数値認識を持たないためです。この意外な発見は、AIの内部動作を理解する貴重な機会を与えてくれます。APIを使ってAIと対話し、プロンプトを工夫することで、AIの思考プロセスをコントロールできる面白さを体験できました。

AIの苦手な部分を知ることで、私たちはAIをより効果的に、そして創造的に活用できるようになります。数値計算は専用ツールに任せ、AIの回答は常にファクトチェックする。そして、AIの「人間らしい」間違いを面白がり、新たな発想に繋げる。今日からAIに「意地悪な質問」を投げて、その面白さを体験しましょう。

参考文献


まとめ・次のステップ

この記事が役に立ったら、ブログのメールマガジンへ登録してください。 AI活用・個人開発・副業に関する最新情報を週1回お届けします。

👉 無料メルマガに登録する(Waitlist)


このブログでは、会社員をしながら副業でSaaSを開発する過程をリアルに発信しています。使用スタック: Next.js / Supabase / Claude API / Vercel

広告

-AI, 記事