一度出したLLMの判定を「叩き台」として同じLLMに再監査させると、名寄せの精度は上がるのでしょうか。日本人サッカー選手160件の同一人物判定を、正解ラベルつきで測ろうとしました。結論を先に書きます。この題材は、今回の軽量モデルには簡単すぎました。 初回判定が全160件で159/160、確認セットでは120/120。直せる誤りが1件しかなく、自己修正の「修正能力」を正面から測れませんでした。 事前登録した主要比較(確認120件)では再監査Cが118・独立再実行Bが117の1件差(食い違い1件で識別不能)、記述的に全160件を数えると 156対156の同点。派手な結論は出ていません。この記事は「自己修正の結論」ではなく、難易度校正の結果です。この結果を受けて、条件を変えて比較するシリーズの基準点として公開することにしました。
なぜ測ったか
LLMに自分の答えを見直させる「自己修正(self-correction)」は、うまくいくという報告と、うまくいかないという報告が併存します。肯定側は Self-Refine(Madaan et al. 2023、対話生成から数学まで7タスクで平均約20ポイント改善)。否定側は Huang et al. 2024("LLMs Cannot Self-Correct Reasoning Yet"・直接実験は主に推論タスク)や Kamoi et al. 2024(タスク横断の批判的サーベイ・自己修正が成功する条件は限定的)です。
実務でも同じ問いが出ます。AIが出した「これは同一人物です/別人です」を、もう一度AIに確認させれば安全になるのでしょうか。名寄せのうち、候補として与えられた2レコードが同一人物かを判定するエンティティマッチングは、正解ラベルを作りやすいので、この問いを主観評価なしで測れます(候補生成まで含む全体の精度とは分けます)。題材は、日本人サッカー選手の日本語名(漢字・カナ)とローマ字名の同一人物判定です(久保建英 と Takefusa Kubo は同じ人か)。
何を測ったか
3条件
- A(初回判定): 2つのレコードを見て「同一人物か」を判定します。
- B(独立再実行): A とまったく同じプロンプトを、A の出力を見せない別コンテキストでもう一度実行します(本記事の「独立」は統計的独立性ではなく、A非提示の別実行という意味です)。
- C(二段階レビュー): 元データに加えて A の出力を「叩き台」として提示し、「KEEP か CHANGE を選べ」と指示します。
事前登録した主役の比較は、確認セット120件での C 対 B です。ただしCがBと違うのは「叩き台」だけではありません。A の完全な出力・再監査の指示・KEEP/CHANGE の選択・増えた入力長が、まとめて足されています。ですからC対Bが測るのはワークフロー全体の差で、「叩き台を渡したこと」だけを切り出したものではありません。なおCに見せた叩き台は A の構造化出力({final_decision, action, confidence, evidence_codes})で、モデル内部の推論列は含みません。
- 被験モデルは
gpt-5.4-mini-2026-03-17、reasoning_effort=low。 - 表層形は別ソース(日本語=Wikidata、ローマ字=Transfermarkt由来)。クラブ表記や網羅範囲は完全一致しません。対象は公開DBに載る実在選手で、著名な選手も露出の低い選手も混じります。
- モデルには生年月日・各種ID・URLを一切渡していません。渡すのは氏名とクラブ在籍歴だけです。
- 正解はリンク用IDと別の独立属性(生年月日)で検証。機械照合157/160、残り3件は個別確認、ラベル矛盾0件(外部DB自体の誤りまで排除した証明ではありません)。生の判定と正解は
run_results.jsonにあり、誰でも精度を再計算できます。 - 主要評価項目・信頼区間の出し方・予測は走行前に公開リポジトリへコミット(事前登録)。
ベンチマークの構成と、初回の解けかた
この記事の主役は結果より、この構成表です。160件を型で分け、初回Aがどれだけ解けたかを併記します。
| ペア型 | 件数 | 例 | 氏名+クラブ歴で解けたか(初回A) |
|---|---|---|---|
| 真マッチ(同一人物・異表記) | 80 |
南野拓実 / Takumi Minamino
|
80 / 80 |
| 非マッチ(同姓・読みが違う別人) | 79 |
鈴木彩艶 / Kaito Suzuki(彩艶=Zion≠Kaito) |
79 / 79 |
| 非マッチ(同名異人・ローマ字が一致) | 1 |
荒井悠汰 / Yuta Arai
|
0 / 1 |
初回Aは160件中159件を正解しました。唯一の誤りは、非マッチ80件のうちただ1件だけ混じっていた「同名異人」でした。ここが後半の鍵になります。
結果
初回がほぼ天井だった(これがすべてを決める)
正解数をスコープごとに(率でなく生件数の記述統計。母集団へは外挿しません)。
| 対象 | A 初回 | B 独立再実行 | C 二段階レビュー |
|---|---|---|---|
| 確認120 | 120 | 117 | 118 |
| 難例40 | 39 | 39 | 38 |
| 全160 | 159 | 156 | 156 |
初回Aが天井なので、再監査に「直すべき誤り」がほぼありませんでした。 測れたのは「天井近くの正しい判定を維持できるか」であって、「誤りを直せるか」ではありません。(感度・特異度は確認120件の値です。Aの唯一の誤りは難例側にあり、下表には入りません。)
| 条件 | sensitivity(確認120) | specificity(確認120) | balanced accuracy |
|---|---|---|---|
| A 初回判定 | 1.000 | 1.000 | 1.000 |
| B 独立再実行 | 0.967 | 0.983 | 0.975 |
| C 二段階レビュー | 0.983 | 0.983 | 0.983 |
主要比較:C 対 B
事前登録した主要比較は確認120件です。対応表は次のとおり。
| C 正解 | C 誤り | |
|---|---|---|
| B 正解 | 117 | 0 |
| B 誤り | 1 | 2 |
観測値では C が B を1件上回りました(118 対 117)。でも B と C で正誤が食い違ったのはこの1件だけ(川辺駿)で、しかもサブセット依存です。難例40では逆に B が C を1件上回り、記述的に全160件を数えると 156対156の同点(食い違いは1対1で対称・McNemar p=1.0)になります。
- 主結果は上の件数です。補助的に balanced accuracy 差 Δ = +0.8 pt(確認120)。
- 事前登録した信頼区間(対応ブートストラップ)は [+0.0, +2.5] pt ですが、食い違い1ペアで下限が0に張り付いて退化するため、寄りかかりません。
- McNemar 正確検定 p = 1.0 は「同等の強い証拠」ではなく、discordant が1件(全160でも2件)しかなく差を論じる検出力が実質ないという意味です。だから等価性(TOST)も主張しません。
全160件でも、二段階レビューが独立再実行を上回る観測上の差はありませんでした。ただし食い違いが2件しかないため、両者の等価性まで示したわけではありません。
正解破壊は起きたが、C 固有でも、C が多いわけでもない
初回 A からの反転(正解→誤り)です。
| A→B | A→C | |
|---|---|---|
| 確認120 | 3 | 2 |
| 難例40 | 0 | 1 |
| 全160 | 3 | 3 |
破壊は実在します。全160でAが正解だった159件が分母で、A→B・A→C とも 3/159 = 1.9%(Wilson 95% CI 0.64〜5.4%)。全体では同数です。確認120だけ見ると B が多い(3対2)ですが、難例で逆転(C1・B0)するサブセット依存で、「B の方が多く壊す」とは言えません。言えるのは、反転は B と C の両方で起き、C 固有ではないこと。B(同一プロンプトの再実行)での反転は、そのまま走行ごとの揺れです。ただし単発・順序固定なので、「追加のパスそのものが原因」と因果的には断定できません。
C は、ほぼ初回 A のまま動かなかった
C の最終判定は160件中157件で初回Aと同一(確認118/120)。A から動かした3件はいずれも正解→誤りでした。
ただしこれを「C は改悪ばかり選ぶ」とは読めません。A が159/160に正解している状態では、変更対象を無作為に3件選んでも、3件すべてが初回正解から選ばれる確率は98.1%(確認セットは満点なので、動かせば必ず改悪)です。「変更した3件がすべて改悪だった」という事実だけでは、モデルが正解を選択的に壊した証拠にはなりません。 守れる言い方は「C はほぼ A を据え置き、動かしたわずかな数はこの精度域では改悪になった」まで。
C が実際に判定を覆したのは確認120で2件(酒井宏樹 を SAME→DIFFERENT、前貴之 を確信度99で別人から「同一人物」へ併合)。残る CHANGE 2件は、action=CHANGE と出力したのに最終判定は A と同じでした。これは出力内の不整合です。ただし初回用と再監査用で同じ出力スキーマ(action は初回にも入っている)を流用した曖昧さもあり、原因は判別できません。
落とし穴:非マッチが簡単すぎた、そして唯一の誤りが「本当に難しい型」だった(誤→正)
最初、非マッチを「同姓の別人」で作ったら、日本語側が一貫して年上(平均3.5歳差)で、モデルは年代だけで切り分けられました。非マッチを人工的に易しくし、specificity を過大評価します。そこで生年差が最小のペアに選び直しました(平均1.8歳差)。
次にこう書こうとしました——「これでクラブを照合しないと切り分けられない」。これも言い過ぎでした。 作り直した非マッチ80件のうち79件は「同姓・異なる読みの given name」で、彩艶 が Zion と読めれば Zion ≠ Kaito、クラブを見なくても別人と分かります(Aは79件を全問正解)。主に試しているのは「読み」です。
ただし1件だけ、本当に読みでは切れない型が紛れていました。荒井悠汰 / Yuta Arai です。荒井悠汰 のローマ字はまさに "Yuta Arai" で、生年月日の違う別人の "Yuta Arai" とローマ字が完全一致します(同名異人)。読みでは分けられず、氏名の読みだけでは判定できないので、クラブ在籍歴のような補助属性を正しく照合する必要があります。そしてこれが A の唯一の誤りでした(C もそのまま維持し、直せませんでした)。n=1 の探索的観察ですが、「読みだけで解けるペア」と「補助属性の照合が要るペア」で難しさが分かれる可能性を示唆します。
留保も残ります。対象は著名選手を含むので、彩艶→Zion が解けたのは読みの推論ではなく、その選手を学習データで覚えているからかもしれません。教訓は変わりません。ベンチマークは、作った本人が「簡単すぎないか」「本当に狙った難しさか」を二度疑うところまでが設計です。
今回の「測れなかった」から得た、評価セットの設計則
派手な結果は出ませんでした。でも「なぜ測れなかったか」から、次に効く実務ルールが出ます。ここが本記事の実用的な持ち帰りです。
- 本走行の前に、開発セットで初回誤り数を確認する。 天井(初回95%超)だと修正能力は測れません。狙うのは初回精度75〜90%。
- 難例は人間の直感でなく、失敗機構別に構成する。 「難しそう」ではなく、読み・情報欠損・同名異人・表記崩しといった機構ごとに。
- 難易度調整は開発セットだけで行い、評価セットはモデル出力を見る前に凍結する。 「初回で間違えたペアだけ」を後から選ぶと、回帰効果と過適合が入ります。
- 同名異人・情報欠損・表記揺れを、それぞれ十分な件数の別層として入れる。 今回は同名異人が1件しかなく、唯一の誤りがそこに集中しました。1件では層になりません。
コスト
480呼び出し(160件 × A/B/C)で総額は約 $0.45(各行は丸め、合計は未丸め値から算出)。
| 条件 | 入力token | 出力token(推論含む) | コスト |
|---|---|---|---|
| A | 46,612 | 23,844 | $0.142 |
| B | 46,612 | 23,614 | $0.141 |
| C | 61,148 | 25,884 | $0.162 |
| 計 | 154,372 | 73,342 | $0.446 |
C は叩き台を入力に足すので B より約 $0.021(約15%)高く、それで得られた差は観測上ありませんでした。
限界
- 天井効果(中心的): 初回159/160のため「自己修正が誤りを直すか」は試せていません。試す機会は1件で、C は直しませんでした。
- 記憶汚染は本実験では未対処: 読みの推論と学習済み知識の想起は分離できません。これを切り分ける知名度層別の破壊分析を事前登録していましたが、クリーンな知名度の代理指標を用意できず実行できませんでした(原理的に不可能なのではなく、今回やれなかった)。だから汚染は残ったままです。
- 測ったのは同一モデルの自己系だけ: 別モデル・人間・ルール・正解参照といった外部検証は、本実験のデータの外です。Self-Refine の再現でもありません(独立フィードバック段階がなく1回だけ)。
- ベンチマークの代表性: 確認セットは真マッチ60・非マッチ60に固定した診断用で、実運用のマッチ率や候補分布を代表しません。
-
単発・小標本・固定順: B・C は各1回。被験は単一モデル・単一プロンプト・
reasoning_effort=low(天井も null もこの設定に固有の可能性)。
事前登録から変えた点(正直な逸脱)
守った点(誤読防止のため明示。これらは逸脱ではありません): 主結果は p値でなく件数・効果量で述べた(事前登録どおり)。信頼区間は事前登録の2択のうち「対応ブートストラップ(層化・ペア単位)」を実装=選択肢内。全160件の選手・エンティティID(Wikidata QID / Transfermarkt ID)はすべて一意で、同一選手が複数ペアへ登場する反復測定クラスタはありません(姓や表記パターンによる残余の類似性まで不存在とは仮定しませんが、エンティティ単位のクラスタ化はペア単位の再標本化と一致します)。
実際に変えた/やれなかった点:
- 退化した(食い違い1ペアで下限が0に固定)ブートストラップCIを主推論に使わず、McNemar(事前登録に無い補助検定)を後から足して「検出力が無い」ことの表示に使いました。
- Wilson 区間は副次に事前登録済みでしたが、初版コードで欠落→後から実装しました。
- 知名度層別の破壊併記は未実施(クリーンな代理指標が無く実行できず)。
- 探索的「独立3回目の反復」は未実行。不一致ルーティングは事前登録時点でルール未実装として保留・未実施。
- 探索的観察(KEEP/CHANGE 内訳・出力内の不整合・
川辺駿の逸話・コスト)は事前登録外です。確認的主張は「確認120の C 対 B」だけです。
再現と、次にやること
- 公開可能なペア情報・モデル判定・分析コード・事前登録を公開しています(生年月日を含む照合属性と、再配布条件に問題がある原データは非公開)。
- リポジトリ: https://github.com/axiom-pro/llm-nayose-matching
-
PREREGISTRATION.md(走行前コミットd7a3328)→src/run_experiment.py→src/analyze.py(run_results.jsonから本結果を再計算)→ 結果コミットfd42585(C対B対応表・Wilson区間・KEEP/CHANGE内訳など分析の追補は74a00b5)。git の日時だけを強い第三者タイムスタンプとして過信はしません。 - 次は同じ名寄せを本当に難しくします。 初回精度を開発セット上で75〜90%まで落とし——「直す誤り」を十分に作ってから測ります。難易度の調整は開発用セットで行い、最終評価セットはモデル出力を見る前に凍結し、「初回で間違えたペアだけを選び直す」ことはしません。知名度の統制(露出の低い実在選手・統制した表記変換)も入れます。その後、失敗機構の異なる題材(根拠文が入力内にある事実検証など)へ広げます。
まとめ
- 今回のモデルと固定ベンチマークでは、初回Aが159/160に正解し、自己修正を試せる誤りは1件だけでした。C はその1件(同名異人)を直せませんでした。
- 全160件では B と C はいずれも156件正解、初回正解からの破壊も両者3件、食い違いは1対1で対称。独立再実行を超える明確な追加価値は確認できませんでした(等価性まで示したわけではありません)。
- C は160件中157件で初回Aと同じ判定。動かした3件はいずれも誤り方向でしたが、A がほぼ満点のため、これは「C が選択的に正解を壊した」証拠にはなりません。
これは「何も分からなかった」ではなく、難易度校正の結果です。人間が難しいと思った題材が、軽量モデルには天井でした。これを基準点に、初回精度・入力内で検証できるか・外部フィードバックの有無を変えながら、「再監査はいつ効くのか」を同一プロトコルで測っていきます。今回はその天井側の観測例です。(外部検証が同一モデル再監査より優れるかは、条件を測っていないので本実験からは言えません。)
筆者について
AIが出した成果物(コード・データ・判定)を、一次情報と正解ラベルで検証する仕事をしています。本記事はその検証規律——事前登録、gold の独立検証、null の正直な報告、限界と逸脱の開示、そして自分の当初の派手な物語を自分のデータで繰り返し正すこと——を名寄せで実演したものです。「AIの出力が正しいか不安」「自社のAI判定を第三者に検証してほしい」といった相談はプロフィールから受けています。
(利益相反の開示: 筆者は上記の検証サービスを提供しています。本記事の結果〈天井のこの設定では、同一モデル再監査に独立再実行を超える明確な追加価値を確認できなかった〉は、筆者の事業上の関心と方向が一致します。だからこそ、データ・コード・事前登録をすべて公開し、あなた自身が再確認できるようにしました。)