はじめに
9/5、OpenAIは
Why language models hallucinate(言語モデルが幻覚を引き起こす理由)
という論文を発表しました。
↓ PDF版
https://cdn.openai.com/pdf/d04913be-3f6f-4d2b-b283-ff432ef4aaa5/why-language-models-hallucinate.pdf
↓ Web版
https://openai.com/index/why-language-models-hallucinate/
ざっと目を通したので、内容の解説と、では我々はどうすればよいのか?をまとめてみました。
ハルシネーションの本当の理由
この論文での一番の主張は、
「言語モデルのハルシネーションは、その訓練と評価の方法が 『知らない』と認めることよりも『推測して答える』ことを報酬として与えているために発生する」
というものでした。
これは、難しい試験問題に直面した学生が、確信がなくても減点を恐れて空欄で出すより、もっともらしい答えを書いて点数を稼ごうとする心理を考えると納得がいくと思います。
ハルシネーションが発生するメカニズムは、論文内で主に2つの段階で説明されています。
1. 事前学習(Pre-training)段階
言語モデルの基礎が作られる事前学習の段階で、たとえ完全に正確なデータだけで学習させたとしても、統計的な要因によってエラー(ハルシネーション)は避けられないと指摘しています。
その主な原因は以下の通りです。
-
「正しさ」を判断する問題の難しさ
-
文章を生成することは「この文章は正しいか?」という二者択一の問題(Is-It-Valid classification)を解くことより本質的に難しい
-
そして、この「正しさ」を判断する分類問題でエラーが起きやすい状況では、必然的に生成される文章にもエラー(ハルシネーション)が含まれることになる
-
-
パターンがない事実(Arbitrary Facts)
-
例えば「アダム・カライ氏の誕生日はいつか?」という問いのように、データ内に明確なパターンや法則性がない「任意の事実」を学習するのは困難
-
特に、学習データに1回しか登場しないような希少な情報(論文では「シングルトン」と呼んでいる)については、モデルは正しく記憶できず、ハルシネーションを起こす確率が非常に高くなる
-
-
不適切なモデル構造(Poor Models)
-
モデルの構造自体が、特定のタスクを苦手としている場合がある
-
例えば、単語をトークン単位で処理する現在のモデルは、「DEEPSEEKという単語にDは何個あるか?」といった文字レベルの単純な計数を苦手とし、誤った答えを生成することがある。
(生成AIに任意の文字数nの制約で文章を生成してとお願いしたときに、その文字数制約を全く守らないという体験をみなさんもされたことがあるのではないでしょうか?)
-
2. ポストトレーニング(Post-training)と評価段階
事前学習で作られたベースモデルを、より対話的に、そして安全にするための追加学習(ポストトレーニング)が行われます。
しかし、この段階でもハルシネーションは根絶されず、むしろ特定の状況では助長されてしまうと論文は指摘します。
その最大の原因は、現在のAI評価ベンチマークのほとんどが「正解か不正解か」の二者択一で採点している点にあります。
-
「知らない」と答えると損をする評価制度
-
多くのベンチマークでは、正解すれば1点、不正解または「分かりません(IDK)」と答えれば0点という採点方式が採用されている。
-
このルールでは、AIにとって最も期待スコアが高くなる戦略は、確信がなくても最も可能性の高そうな答えを「推測して答える」ことになる。
-
正直に「分かりません」と答えるAIは、推測で答えて時々正解するAIよりも評価スコアが低くなってしまう。
-
-
AIは常に「テスト受験者モード」
-
人間は学校のテスト以外にも実社会での経験を通じて「知らないことを正直に認める価値」を学ぶが、言語モデルは主にこうしたテスト形式のベンチマークで評価されるため、常に「高得点を狙うテスト受験者」のように振る舞う。
-
その結果、自信過剰で、もっともらしい嘘をつく行動が強化されてしまう。
-
ハルシネーションをなくすための解決策(開発者側)
この論文が提案する根本的な解決策は、個々のユーザーがプロンプトを工夫すること以上に、AI開発のコミュニティ全体で評価の仕組みを変えるという社会技術的なアプローチでした。
具体的には以下のような解決策が提示されています。
-
明確な信頼度目標(Explicit Confidence Targets)を設定しよう
-
単なる正解・不正解ではなく、不正解に対してペナルティを課す採点方式を導入する。
-
例えば、質問に次のような指示を加える。
-
「正解には1点、不正解には-9点(t=0.9の場合)が与えられ、『分かりません』と答えた場合は0点です。
90%以上の確信がある場合にのみ回答してください。」
ハルシネーションをなくすための解決策(ユーザー側)
論文は開発者コミュニティに向けた提言が中心でしたが、私たちユーザーがハルシネーションを減らすために実践できる対策を導き出すことができるように思います。
例えば以下のような対策が考えられます。
(これは、私が以前作成したハルシネーション0のドキュメントRAGでも実践していることです。)
-
「知らない」と答える選択肢を明確に与える
-
論文の提案を参考に、プロンプトで「知らない場合は無理に答えないでください」「確信がない場合は『不明』と答えてください」といった指示を明確に与える。
-
ただし、論文中の例ではこの指示を与えても間違った誕生日を答えており、完全な対策ではないことにも注意が必要そう。
-
-
閉じた質問より開かれた質問をする
-
「〇〇はいつですか?」のような一点の事実を問う質問は、AIに推測のプレッシャーを与えがち。
-
代わりに、「〇〇について分かっていることを教えてください」のように、よりオープンな聞き方をすることで、AIが知っている範囲の情報を提供しやすくなる。
-
-
システムプロンプトで評価基準を明確にしておく
-
先ほど開発者側で使用したナレッジを流用できる。
-
例えば、「信頼度75%以上で答えよ。誤答は-3点、正答は+1点、『分からない』は0点」 などとシステムプロンプトで設定しておく。
-
これにより、不確実な場合の適切な棄権が評価されるようになる。
-
まとめ
AIのことを なんでも知ってる人としてではなく、「非常に博識だが、プレッシャーを感じるとつい知ったかぶりをしてしまうアシスタント」 として捉えることで、より賢く使いこなせそうですね。
これからもqiitaで発信していくので、気になったらぜひいいね・フォローお願いします!