sue@blog ~ /posts/llm-output-verification-overview
$ cd ../
$ cat post.metadata

LLM出力の検証 ①全体像 — 「もっともらしい嘘」をどう捕まえるか

date: 2026-06-26 LLM ハルシネーション 考察
LLMの出力が「おかしなことを言っていないか」を検証したい。だが「おかしさ」を一枚岩で捉えると手法選びを誤る。第1回は全体像として、検証すべき失敗を5種類に分解し、手法を4系統の地図に落とす。そして「銀の弾丸は無い/多段防御で組む」という実装の勘所まで。
「LLM出力の検証」連載(全3回)
① 全体像(この記事)② 手法カタログ③ 実装編
①で地図を描き、②で各手法を棚卸しし、③で多段防御パイプラインを実際に組む、という流れ。

1. 「流暢さ」は「正しさ」ではない

LLMは、もっともらしい文章を淀みなく生成する。だがその流暢さは正しさを一切保証しない。一番厄介なのは、モデルが自信たっぷりに、しかし事実無根の内容を断定するケースだ。文体が完璧なぶん、人間のレビュアーほど騙されやすい。

遊びで使うぶんには笑い話で済む。しかし医療・金融・法務・カスタマーサポートのように誤情報のコストが高い領域では、放置すれば実害になる。だから「出力を生成して終わり」ではなく、「出力がまともかを検証する層」をプロダクトに組み込む必要がある。この連載は、その検証層をどう設計するかの地図帳だ。

この連載で「検証」と呼ぶもの
生成された出力に対して、正しいか/根拠があるか/安全かを別の仕組みで判定し、怪しいものにフラグを立てる・ブロックする・作り直す・人に回すこと。学習段階での幻覚低減(より良いモデルを作る話)ではなく、すでに動いているモデルの出力をどう守るかに絞る。

2. まず「おかしさ」を5つに分解する

検証設計の出発点は、「おかしさ」を種類ごとに割ることだ。ここを混ぜると「ハルシネーション検知ツールを入れたのに事故が止まらない」になる。検知すべき失敗は、ざっくり5種類に分けられる。

「おかしさ」の型中身典型例主に効く系統
事実誤認
Factuality
世界知識に照らして客観的に誤り実在しない論文を引用、人物の経歴を捏造検索照合・ファクトチェック
文脈不忠実
Faithfulness
与えた文脈・出典に支持されない主張(RAGで最重要)検索結果に無い数値を要約に混入NLI含意照合・RAG忠実性評価
自己矛盾
Confabulation
同じ問いでも生成のたびに答えが発散・矛盾同一質問に毎回違う固有名詞を返す自己一貫性・意味エントロピー
指示逸脱
Instruction
フォーマット・スコープ・ルールから外れるJSONが壊れる、禁止トピックに踏み込む構造化出力検証・ガードレール
不適切
Unsafe
有害・PII漏洩・規範逸脱・攻撃トキシック発言、機密漏洩、プロンプトインジェクションモデレーション・ガードモデル

重要なのは、これらが直交するということ。たとえば「事実は正しいが文脈には不忠実」(合っているけど与えた資料には書いていない)と、「文脈には忠実だが文脈自体が誤り」(資料どおりだが資料が間違っている)は別物だ。RAGの忠実性チェックは前者を捕まえるが、後者は素通しする。だから単一指標では足りない——これが連載全体を貫く前提になる。

3. 検証手法の全体地図 — 4つの系統

世の中の検証手法は数十あって最初は途方に暮れる。だが「何を根拠に正しさを測るか」で見ると、大きく4系統に整理できる。

LLM出力検証 ― 4つの系統 リファレンス不要 外部の根拠と照合 → A リファレンス不要(zero-resource) 外部の根拠も正解ラベルも使わず、出力そのものの内部整合性・確信度を測る 例: SelfCheckGPT ・ 意味的エントロピー ・ logprob/perplexity ・ SAPLMA B リファレンス有り(grounding / fact-check) 外部の根拠(検索・知識ベース・与えた文脈)と突き合わせて事実性・忠実性を検証 例: FActScore ・ SAFE ・ RAGAS ・ MiniCheck ・ Vectara HHEM ・ NLI照合 C ジャッジ系(LLM-as-judge / 自己検証) 別の(または同一の)LLMに、出力を採点・批判・修正させる 例: LLM-as-a-Judge ・ G-Eval ・ Prometheus ・ Chain-of-Verification ・ Self-Refine D 実行時ガードレール(runtime guardrails) 本番でリクエスト/レスポンスを実行時に検証し、ブロック・再生成・修正する 例: Guardrails AI ・ NeMo Guardrails ・ Llama Guard ・ 構造化出力(JSON Schema)
図1: 検証手法の4系統。A→Bは「根拠を外部に持つか」の軸。CとDは別軸(誰が判定するか/いつ働くか)で、A・Bと組み合わせて使う。

4系統を一言ずつで言うと——

4. 手法選びを左右する2つの軸

地図の上でどの手法に手が届くかは、次の2軸でほぼ決まる。

軸1: ブラックボックス vs ホワイトボックス

モデルの内部が見えるかどうか。GPT・Claudeのような外部APIは、隠れ状態もattentionも取れない(せいぜいlogprob)。この場合、出力テキストだけで動く手法——SelfCheckGPT、verbalized confidence(モデルに確信度を言わせる)、LLM-as-judge——に限られる。一方、自社ホストのオープンウェイトモデルなら、隠れ状態やattentionを使う高精度かつ低コストな手法(後述のSEPやLookback Lens)が解禁される。「どのモデルを使うか」が「どう検証できるか」を縛る、というのは見落としやすい。

軸2: 検知 vs 予防

検証というと「出てきた出力を後から採点する(検知)」を思い浮かべるが、そもそも問題が出る量を減らす(予防)も設計に含めるべきだ。代表例がRAGのグラウンディング——回答を検証済みドキュメントに根拠づけ、言える主張を取得文脈に縛る。本番ではグラウンディング単体で幻覚を大きく減らせるという報告もあり、検知の前段で発生量そのものを削るのが定石になる。検知器をどれだけ磨いても、入口を絞るほうが安いことは多い。

5. 実装の勘所 — 銀の弾丸は無い、だから多段で組む

ここまでで察しがつくと思うが、「これ1つ入れれば安心」という手法は存在しない。高精度な手法はたいてい高価(出力1件に対してLLMを何度も叩く)で、安価な手法はすり抜けが多い。だから実務の答えは「1つを選ぶ」ではなく「安価なチェックから高価なチェックへ、段階的に絞り込む」——多段防御(cascade)になる。

多段防御 ― 安価な段で大半を捌き、怪しいものだけ上へ 1件あたりのコスト・精度 ↑ 上へ行くほど対象は減る ↓ ① 決定論ルール ― regex ・ JSON Schema ・ モデレーションAPI <1ms / 全件を通す(明らかな形式崩れ・有害をここで落とす) ② 軽量シグナル ― logprob ・ 意味的エントロピー ・ NLI忠実性 低コスト / 全件をスコアリング(MiniCheck・HHEM など小型判定器) ③ LLM-as-judge / 強モデルで再検証 中コスト / しきい値超え(低信頼)のみ ④ 人手レビュー(HITL) 高コスト / 確証が持てないものだけ
図2: 多段防御の基本形。安価な段(①②)で全件を捌き、怪しいものだけを高価な段(③④)へエスカレーションする。研究例ではカスケード化で品質を保ちつつ大幅なコスト削減が報告されている。

この形にしておくと、大半のリクエストは安い段で片付き、高価なLLMジャッジや人手は本当に怪しいものにだけ使われる。コストとレイテンシを抑えながら品質を担保する、という相反する要求を両立させる唯一の現実解だ。第3回でこのパイプラインを具体的なコードに落とす。

第1回のまとめ
① 流暢さは正しさではない。検証層をプロダクトに組み込む。
② 「おかしさ」は事実誤認/文脈不忠実/自己矛盾/指示逸脱/不適切の5種類。混ぜない。
③ 手法はA 不要・B 有り・C ジャッジ・D ガードレールの4系統に整理できる。
④ 銀の弾丸は無い。安価→高価の多段防御で組む。

次回

地図が描けたので、次は中身の棚卸し。第2回「手法カタログ」では、4系統それぞれの代表手法を——SelfCheckGPTから意味的エントロピー、RAGAS、MiniCheck、LLM-as-judge、Chain-of-Verification、Llama Guardまで——分類ツリーと比較表で整理し、「どれをいつ使うか」を判断できるところまで持っていく。

連載
① 全体像(この記事)② 手法カタログ③ 実装編
sue@blog ~ $ _