0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AI探偵ERNIE、嘘つきは誰だ?―3人版&4人版パズルに挑戦!

Posted at

はじめに

Baidu が公開している ERNIE-4.5-21B-A3B-Thinkingは、長文読解や複雑な推論に強いとされる大規模言語モデルです。
今回はその性能を試すために、「嘘つきと真実を言う人」パズルを与えてみました。条件は「毎日ちょうど1人だけが真実を述べる」というものです。


実験

3人版パズルを実行

puzzle_3 = """三人 A/B/C がいて、毎日必ず一人だけが真実を述べ、残りは嘘をつく。
A:「Bは嘘をついた」
B:「Cは嘘をついた」
C:「AとBは両方嘘だ」
今日真実を述べたのは誰?"""

prompt = build_prompt(puzzle_3)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

_ = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.2,
    top_p=0.9,
    do_sample=True,
    streamer=streamer
)

出力結果

{
  "answer": "B",
  "steps_bulleted": [
    "Aが真だと矛盾",
    "Bが真だとAは嘘、Cは嘘で一貫",
    "Cが真だと矛盾"
  ],
  "self_check": "Only one truth-teller holds when B is true; other cases contradict."
}

4人版パズルを実行

puzzle_4 = """四人 A/B/C/D がいて、毎日必ず一人だけが真実を述べ、残りは嘘をつく。
A:「Bは嘘つき」
B:「Cは嘘つき」
C:「Dは嘘つき」
D:「Aは嘘つき」
今日真実を述べたのは誰?"""

prompt = build_prompt(puzzle_4)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

_ = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.2,
    top_p=0.9,
    do_sample=True,
    streamer=streamer
)

出力結果

{
  "answer": "C",
  "steps_bulleted": [
    "Aが真だとCも真になり矛盾",
    "Bが真だとDも真になり矛盾",
    "Cが真だとDは嘘になり一貫",
    "Dが真だと他と矛盾"
  ],
  "self_check": "Only case C yields exactly one truth-teller; consistent."
}

実験からわかったこと

ケースごとに仮定→検証→矛盾チェック→結論 という流れが自然に出る。

・出力をJSON形式に指定すると記事や教材にそのまま使いやすい。

・人数が増えても矛盾なく推論を進められ、スケールしても安定している。

ERNIE-4.5-21B のおすすめ用途

1. 教育・教材づくり
・数学パズルや論理パズルを ステップごとに解説付きで自動生成できる。
・授業や演習問題の「解答例」として活用可能。

2. 契約書・ルール文書の矛盾チェック
・「この条件とこの条件は矛盾していないか?」を自動で検証。
・長文コンテキスト(128Kトークン)対応なので、複数ページの規約や法律文書も一度に処理できる。

3. 読解・要約タスク
・論文や技術資料を 要点抽出して整理
・「この前提から論理的に導かれる結論は?」という問いに強い。

4. 推理・ゲーム系アプリ
謎解きゲームの解説AIとして組み込むと、プレイヤーに「ヒント」や「解答プロセス」を提示できる。
・ナイツ&ナヴズやゼブラパズルのような定番ロジックゲームを、AIが解説付きで進めてくれる。

5. 研究・分析サポート
・研究論文や調査レポートを読み込み、因果関係や論理展開の妥当性を検証する補助ツールに。
・「仮説→検証→反例確認」という形で思考を整理するのに便利。


手順

必要なライブラリをインストール

!pip install -U "transformers>=4.54.0" accelerate torch --index-url https://download.pytorch.org/whl/cu121
!pip install -U sentencepiece

モデルをロード

from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
import torch

model_id = "baidu/ERNIE-4.5-21B-A3B-Thinking"

tokenizer = AutoTokenizer.from_pretrained(model_id, use_fast=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,   # bfloat16推奨
    device_map="auto"             # GPU自動割り当て
)

streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)

プロンプト生成関数
論理パズルに使うテンプレート関数を定義します。
JSON形式で答えを返すように指定すると記事化・分析が楽になります。

def build_prompt(puzzle_text):
    system = (
        "You are an expert puzzle solver. Solve step-by-step, verify, "
        "then output a concise final answer as JSON with keys: "
        "answer, steps_bulleted, self_check."
    )
    user = f"""[TASK]
{puzzle_text}

[REQUIREMENTS]
1) Think step-by-step to deduce facts.
2) Do not skip steps. Keep track of constraints.
3) After solving, run a brief self-consistency check.
4) Finally, output:
{{"answer": "...", "steps_bulleted": ["...","..."], "self_check": "OK or issues"}}
"""
    return f"<|system|>\n{system}\n<|user|>\n{user}\n<|assistant|>\n"

3人版パズルを実行

puzzle_3 = """三人 A/B/C がいて、毎日必ず一人だけが真実を述べ、残りは嘘をつく。
A:「Bは嘘をついた」
B:「Cは嘘をついた」
C:「AとBは両方嘘だ」
今日真実を述べたのは誰?"""

prompt = build_prompt(puzzle_3)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

_ = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.2,
    top_p=0.9,
    do_sample=True,
    streamer=streamer
)

4人版パズルを実行

puzzle_4 = """四人 A/B/C/D がいて、毎日必ず一人だけが真実を述べ、残りは嘘をつく。
A:「Bは嘘つき」
B:「Cは嘘つき」
C:「Dは嘘つき」
D:「Aは嘘つき」
今日真実を述べたのは誰?"""

prompt = build_prompt(puzzle_4)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

_ = model.generate(
    **inputs,
    max_new_tokens=512,
    temperature=0.2,
    top_p=0.9,
    do_sample=True,
    streamer=streamer
)

まとめ

ERNIE-4.5-21B-A3B-Thinking に 3人版(答え:B) と 4人版(答え:C) の論理パズルを解かせたところ、どちらも矛盾なく推論して正しい答えにたどり着きました。Colabで簡単に再現でき、答えは JSON 形式で返ってくるので記事や教材にもそのまま使えます。

このモデルは、

・論理パズルや数学問題の練習
・規約や契約書の矛盾チェック
・長文の読解や要約
・推理ゲームや教育アプリへの応用

といった使い方に向いていると感じました。


フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium
GitHub

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?