Rosarium

モデル・確率・振る舞い / AI理論 / principle

ハルシネーションの発生原理

もっともらしい出力が必要な根拠に支えられない状態を、ハルシネーションとして整理する。知識不足・検索失敗・根拠の誤読・未検証の採用など、発生要因を分けて考える。

最終更新:

更新履歴

  1. 公開

foundations

読む目的: AI理論・モデルの性質

目次
  1. ハルシネーションの発生原理
  2. まず、何をハルシネーションと呼ぶのか
  3. 生成AIは文章全体の真偽を選んでいない
  4. 原因1:必要な情報がコンテキストに存在しない
  5. 原因2:質問と指示が、誤った回答にも適合する
  6. 原因3:モデル内部の知識が、正確・最新とは限らない
  7. 原因4:RAGが正しい根拠を取得できない
  8. 原因5:コンテキストが多すぎる、古い、矛盾している
  9. 原因6:長い回答では、誤りが含まれる機会が増える
  10. Temperatureを下げても、誤答は消えない
  11. 「分からない」と答えさせれば解決するのか
  12. ハルシネーション候補を完全に消せるのか
  13. 発生原因と対策を対応させる
  14. まとめ
  15. 参考資料

ハルシネーションの発生原理

種別:一般理論 / 失敗分析 / 簡略モデル 適用対象:生成AI、RAG、QAチャット、コード生成 対象工程:入力 / 検索 / 生成 / 検証

生成AIは、流暢で一貫した文章を作れます。

しかし、文章が自然であることと、内容が事実であることは同じではありません。

本ページでは、ハルシネーションを単に「AIが嘘をついた」と捉えず、与えられた条件の下で生成された出力が、必要な根拠に支えられていない状態として整理します。

先に結論を書くと、次のようになります。

生成AIは、真偽を直接選択して文章を作るのではない。

コンテキストに対して確率の高いトークン列を生成するため、もっともらしさと事実性が一致しない場合にハルシネーションが起こり得る。

ただし、ハルシネーションには一つの原因しかないわけではありません。

  • モデルが持つ知識の問題
  • 質問や指示の曖昧さ
  • 必要な情報の不足
  • RAGの検索失敗
  • 取得した根拠の誤読
  • 複数の根拠の矛盾
  • 検証されないまま出力を採用する運用

これらを分けて考える必要があります。


まず、何をハルシネーションと呼ぶのか

ハルシネーションには、すべての用途に共通する一つの判定基準があるわけではありません。

例えば、創作支援では架空の内容を生成しても問題ありません。しかし、社内規程のQAで存在しない条項を答えれば問題になります。

そのため、このページでは対象業務について許可された根拠集合を EE、AIの出力を YY とし、次のいずれかに該当する出力をハルシネーションと呼びます。

  • 根拠 EE と矛盾する
  • 根拠 EE から支持できない事実を断定する
  • 実在しない名称、数値、出典などを生成する

ハルシネーション事象を HH とすると、概念的には次のように表せます。

P(H∣C)=∑y∈HP(y∣C)P(H \mid C) = \sum_{y \in H} P(y \mid C)

CC は、Instruction、Knowledge、Retrieved Evidence、会話履歴などを含む実行時コンテキストです。

ただし、実システムでこの確率をそのまま計算できるとは限りません。何が誤りかを判定するための正解や根拠が、先に必要だからです。

この式は、誤った出力にもゼロではない確率質量が割り当てられ得ることを示すための設計モデルです。


生成AIは文章全体の真偽を選んでいない

自己回帰型の言語モデルは、直前までのトークンとコンテキストを条件として、次のトークンの確率分布を計算します。

出力列を Y=(y1,y2,…,yT)Y=(y_1,y_2,\ldots,y_T) とすると、生成確率は次のように分解できます。

P(Y∣C)=∏t=1TP(yt∣y<t,C)P(Y \mid C) = \prod_{t=1}^{T} P(y_t \mid y_{<t}, C)

ここで最適化されているのは、コンテキストに続くトークン列としての尤もらしさです。

「この主張は現実世界で真か」という判定を、文章全体について毎回外部検証してから生成しているわけではありません。

また、AIが常に最大確率のトークンだけを選ぶとも限りません。デコーディング方法によっては、確率分布からサンプリングします。

したがって、次の二つは区別する必要があります。

文章として尤もらしい≠事実として正しい\text{文章として尤もらしい} \neq \text{事実として正しい}

もっともらしい誤情報が学習データに多く存在する場合や、質問が誤った前提を含む場合には、自然で誤った回答の確率が高くなることがあります。

TruthfulQAの研究でも、言語モデルが人間の一般的な誤解を模倣した回答を生成し得ることが示されています。


原因1:必要な情報がコンテキストに存在しない

質問へ正しく答えるために必要な情報が、モデルにもコンテキストにも存在しない場合があります。

例えば、次の情報は一般的な学習データだけでは分かりません。

  • 社内だけで使われる用語
  • 公開されていない製品仕様
  • 昨日変更された運用ルール
  • 担当者間で口頭合意された例外
  • 文書化されていない過去の経緯

この状態で回答を要求すると、AIは利用可能な情報から出力を生成するしかありません。

現実世界の状態を WW、AIが観測できるコンテキストを CC とします。

同じ CC と両立する複数の状態 W1,W2,…W_1,W_2,\ldots が存在する場合、AIはコンテキストだけから実際の状態を一意に識別できません。

現実 W1 ─┐
現実 W2 ─┼─ 同じコンテキスト C ─ AIの推定
現実 W3 ─┘

これはモデル性能だけの問題ではなく、観測できる情報が不足した推定問題です。

高性能なモデルであっても、与えられていない社内事実を確定することはできません。


原因2:質問と指示が、誤った回答にも適合する

質問が曖昧な場合、複数の解釈が成立します。

例えば、次の質問を考えます。

この機能は使えますか。

この一文だけでは、製品、バージョン、利用権限、環境、契約、操作条件が分かりません。

不足した条件をAIが補完すると、その補完自体が誤りの入口になります。

入力を XX、不足条件を UU とすると、本来必要なのは次の推定です。

P(Y∣X,U,C)P(Y \mid X,U,C)

しかし UU が与えられなければ、モデルは暗黙に UU を推測した形で出力します。

そのため、AIへ「正しく答えさせる」だけでなく、必要条件が不足している場合に質問を返す、または回答を停止する設計が必要です。


原因3:モデル内部の知識が、正確・最新とは限らない

モデルのパラメータには、学習データから獲得したパターンや知識が反映されています。

しかし、その知識には次の限界があります。

  • 学習データ自体に誤りや俗説が含まれる
  • 更新後の情報を知らない
  • 似た名称や事例が混ざる
  • 頻出する説明が、正しい説明より強く表現される
  • 稀な事実を十分に保持していない

そのため、モデル内部の知識だけを使う閉じた質問応答では、回答の出典や鮮度を確認しにくくなります。

モデルを大きくすれば、すべての事実誤りが自動的に解消されるとは限りません。


原因4:RAGが正しい根拠を取得できない

RAGを導入しても、ハルシネーションは自動的には消えません。

検索対象から取得した文書を ZZ とすると、RAGによる生成は簡略化して次のように表せます。

P(Y∣X)=∑ZP(Z∣X)P(Y∣X,Z)P(Y \mid X) = \sum_Z P(Z \mid X) P(Y \mid X,Z)

この式には、大きく二つの失敗箇所があります。

  1. 検索段階:必要な根拠 ZZ を取得できない
  2. 生成段階:根拠 ZZ を取得しても、回答へ正しく反映できない

関連し、十分な根拠が取得できた事象を RR とすると、ハルシネーション確率は次のように分解できます。

P(H)=P(R)P(H∣R)+P(¬R)P(H∣¬R)P(H) = P(R)P(H \mid R) + P(\neg R)P(H \mid \neg R)

RAGの改善では、P(R)P(R) を高めるだけでは足りません。

正しい根拠が取得できた場合の P(H∣R)P(H \mid R)、つまり根拠を渡した後の誤読や無視も評価する必要があります。

RAG原論文でも、検索による非パラメトリックな記憶と生成モデルを組み合わせることで、知識集約型タスクの事実性や出典追跡を改善する方向が示されています。

ただし、完全な正しさを保証する仕組みではありません。


原因5:コンテキストが多すぎる、古い、矛盾している

情報不足は問題ですが、情報を増やせば必ず改善するわけでもありません。

例えば、次の文書を同時に渡す場合を考えます。

  • 現在有効な仕様
  • 廃止された旧仕様
  • 別製品の類似仕様
  • 背景説明だけの資料
  • 今回の質問とは関係のない議事録

このとき問題になるのは、「確率空間が広がる」というより、条件として与えたコンテキストが出力分布を誤った方向へ変えることです。

P(Y∣Crelevant)≠P(Y∣Crelevant,Cnoise)P(Y \mid C_{\text{relevant}}) \neq P(Y \mid C_{\text{relevant}} , C_{\text{noise}})

ノイズ CnoiseC_{\text{noise}} の追加によって、正解の確率が下がる場合も、誤答の確率が下がる場合もあります。結果はモデル、配置、質問、情報の内容に依存します。

長いコンテキストを扱えるモデルでも、関連情報の位置によって性能が変化することが実験的に示されています。

したがって、

情報量の増加⇏精度の向上\text{情報量の増加} \not\Rightarrow \text{精度の向上}

です。

重要なのは量ではなく、関連性、鮮度、優先順位、矛盾管理です。


原因6:長い回答では、誤りが含まれる機会が増える

一つの回答に多数の事実主張を含めるほど、どこか一つが誤る可能性は高くなります。

各主張が正しい確率を pp、主張数を nn とします。

すべての主張が独立で、正答確率も同じという単純化を置くと、全主張が正しい確率は次のようになります。

P(全主張が正しい)=pnP(\text{全主張が正しい})=p^n

例えば、各主張が95%の確率で正しいと仮定しても、10個すべてが正しい確率は次の通りです。

0.9510≈0.600.95^{10}\approx0.60

実際の主張は独立ではなく、正答確率も一定ではありません。したがって、この数値を実測値として使うことはできません。

それでも、回答範囲を無制限に広げるほど、検証対象と失敗機会が増えるという直観を示せます。


Temperatureを下げても、誤答は消えない

Temperatureを下げると、一般に高確率のトークンへ選択が集中し、出力のばらつきが小さくなります。

元のロジットを ziz_i、Temperatureを TT とすると、トークン ii の確率は次のように表されます。

P(yi)=exp⁡(zi/T)∑jexp⁡(zj/T)P(y_i)= \frac{\exp(z_i/T)} {\sum_j \exp(z_j/T)}

しかし、最も確率の高い回答自体が誤っていれば、Temperatureを下げても誤答を安定して繰り返すだけです。

出力の安定≠事実性の保証\text{出力の安定} \neq \text{事実性の保証}

Temperatureは生成の多様性を調整するパラメータであり、真偽判定器ではありません。


「分からない」と答えさせれば解決するのか

回答拒否や追加質問は、重要な制御です。

しかし、「不明なら不明と答える」とプロンプトへ書くだけで、AIが常に自分の誤りを認識できるわけではありません。

AIが高い確信を示しても誤っている場合があり、逆に正しい回答へ低い確信を示す場合もあります。

必要なのは、自己申告だけに依存しない設計です。

  • 必須情報が揃っているかをプログラムで検査する
  • 回答で使用した根拠を明示させる
  • 根拠にない固有名詞や数値を検出する
  • 文書の版と有効期間を確認する
  • 高リスクな回答を人間へ移管する
  • 正解データを使って継続的に評価する

「分からない」という出力は選択肢の一つであり、正しい拒否を実現するには別途評価が必要です。


ハルシネーション候補を完全に消せるのか

自然言語の指示やRAGによって、誤答確率を下げることはできます。

しかし、プロンプトへ「推測禁止」と書いても、意味的に誤った文章の確率を厳密にゼロにはできません。

構造上の制約であれば、制約付きデコーディングやスキーマ検証によって排除できる場合があります。

JSONとして不正な出力
許可されていない列挙値
桁数の違うID

一方、次のような意味上の誤りは、外部の正解や検証処理なしに完全排除することが困難です。

実在しない障害原因
古い規程に基づく回答
根拠にない設計判断
もっともらしいが誤った数値

したがって、現実的な目標は「ハルシネーションをゼロにする」ではありません。

発生確率を下げ、発生を検知し、影響を限定し、必要な場合は人間へ戻す。

これが実務上の制御になります。


発生原因と対策を対応させる

発生箇所主な問題対策例
入力条件不足、曖昧な質問必須項目検査、追加質問
Knowledge古い、誤っている、未整備責任者、版管理、更新期限
Retrieval検索漏れ、誤検索Recall評価、検索条件改善、再ランキング
Contextノイズ、矛盾、過剰な情報選別、優先順位、矛盾検出
Generation根拠の誤読、根拠外の補完引用要求、回答形式制約、生成評価
Validation誤りを検知できないルール検査、別系統の検証、人間確認
Operation誤答をそのまま実行する承認、権限制御、停止条件、監査ログ

ハルシネーションをモデルだけの問題として扱うと、検索や運用の失敗を見落とします。

反対に、すべてをRAGの問題として扱うと、正しい根拠を渡した後の生成失敗を見落とします。

発生箇所を分解し、それぞれを測定する必要があります。


まとめ

ハルシネーションは、AIが意図的に嘘をついた結果ではありません。

ただし、「広すぎる確率空間から間違いを選んだ」とだけ説明するのも不十分です。

生成AIは、与えられたコンテキストの下で尤もらしいトークン列を生成します。その過程では、もっともらしさと事実性が一致しないことがあります。

さらに実際のAIシステムでは、入力、Knowledge、検索、コンテキスト構成、生成、検証、運用の各段階で誤りが入り得ます。

ハルシネーションは、モデル単体の異常ではない。

不完全な情報と確率的生成を含むシステム全体で発生する、設計上のリスクである。

そのため、対策も一つではありません。

誤答確率を下げるだけでなく、根拠を追跡し、検出し、停止し、人間へ移管できる仕組みまで設計する必要があります。


参考資料