Preferred Networks

Vol.2 ハルシネーションの検出に関する研究

論文

AIが「もっともらしいウソ」を生成してしまう「ハルシネーション」と呼ばれる現象に対してどうやって対応するのかという研究です。

この研究はオックスフォード大学を中心にやっているもので、共著者のヤリン・ガルという先生が不確実性で有名な研究者なんですが、うちのテクニカルアドバイザーにもなっていて、ずっとこういう不確実性をやっている方です。

◆ハルシネーションの問題

どういう研究かというと、今LLMで使う際に一番問題になっているのはハルシネーションが起きてしまうことで、LLMが本当は知らないんだけれども、嘘をついて「これはこうだよ」と言ってしまうと。例えば、「PFNの本社は大阪(正解:東京・大手町)にあります」とか、「岡野原さんは今60歳(正解:42歳)です」とか。ちょっといいハルシネーションの例じゃないですけど、そういうことを本当に本物っぽく話します。

今言ったような例とかは調べればわかるし常識的にもわかるんですけど、実際に業務で使おうと思うとかなり本物に近くて、使っている人も本当かどうかはわからないくらい、もっともらしいことを言うっていうのがいっぱい起きてきます。これはすごく厄介で、例えばどこどことの取引は何月何日から始まりますっていうのが全く間違っていたり、この人とはこういう仕事をしてますとかも間違ってしまう。


これを防ぐことが実用的なアプリケーションとして使う際には不可欠だねということで、いろんな方がハルシネーションを抑える工夫をしていたんですけども、これは簡単じゃない

◆ハルシネーションの検出方法

もう一つ今すごく行われていることが、防ぐことは難しいけれども少なくともハルシネーションが起きているかどうかを検出できればいいんじゃないかっていうことが研究されていて、この研究はハルシネーションを検出するということを行った研究です。

ここではまず、セマンティックエントロピー(意味的な無秩序の度合い)と呼ばれる指標を使ってハルシネーションを検出する既存研究をまず紹介します。モデルが自分が何を知ってるか知らないかを調べるために、セマンティックエントロピーは最初に同じ問題に対してたくさんの回答を出します。

例えば、先ほどの「PFNの本社はどこですか?」っていうのに対して10回答えさせると、ランダムにそれぞれ違う答えが返ってくるはずです。もしLLM(モデル)が本当に知っていれば、答えた10回中10回が正しい正解の「大手町」と答えると思うんですけれど、知らなければランダムに、「大手町」って本当のことを答える場合もあれば、「大阪です」とか「長野です」とか答えてしまう。

なので、どれぐらい同じ答えがまとまっているかどうかを調べて、それをハルシネーションが起きているかどうかの指標にしようっていうのがこのセマンティックエントロピー。同じことを言っているかどうかをまとめ上げるのは今のLLMを使っています。

昔は単に文字が合っているかどうかを見る単純な方法を使っていたんですけど、それだと単に1文字違うだけとか、意味は同じなんだけど表現が違うっていうのが無数にあって、それが課題になってました。

これはセマンティッククラスタリングといって、同じことを言っているかどうかを調べるために、2つの答え”AとB”という答えを出した場合に、LLMを使って「AはBを含意していますか」というのと、逆に「BはAを含意してますか」というのをLLMに聞いて、両方そうだねって言った場合には”A=B”になるので、その場合は一致する、というやり方でまとめられます。

その方法で、同じ値を持っているもの同士をどんどんまとめていって、その情報を使ってどれくらい同じ答えを言っているのかでセマンティックエントロピーを測るというのが、完璧じゃないけどもかなりいい手法としてもともと使われていました。

◆セマンティッククラスタリングの問題点と改善

この方法の大きな問題点としては、たくさん答えを生成しなきゃいけないこと。ご存知の通り、LLM推論っていうのは遅いので、10回、しかも1トークンだけじゃなくてたくさんトークンを毎回生成するのは非常にコストがかかるのでやりにくい、というのがこのアプローチの問題です。

それを解決するために、彼らはこのセマンティックエントロピーを直接LLMの内部状態から線形回帰で推定するモデルを作るっていうのを提案しました。これをSEPs(Semantic entropy probes)と呼んでいて、SEPsはLLM内部のアクティベーションから、さっきのちゃんと真面目に計算したセマンティックエントロピーの値を推定できるように学習します。

セマンティックエントロピーって正解は必要なくて、この学習データはモデルさえあればいくらでも作ることができるので、こういう場合にはエントロピー高い、こういう場合にはエントロピー小さい、というような学習データをたくさん作って直接回帰をします。

◆セマンティックエントロピーの推定

実際には、このセマンティックエントロピーを推定する部分はロジスティック回帰になっていて、(適当に閾値書いた二値分類の問題になるので)二値分類としても使えるような形で学習をしています。

ただここはいろんな工夫でいかようにでもできるんですが、とにかく内部状態からセマンティックエントロピーを推定します。しかもこの推定を2箇所の違う位置で行っていて、一つ目は回答をする直前、質問を受け取ってその最後の瞬間の内部状態から推定するアプローチ。もう一つは全部回答までを言った後にその最後の状態からやる場合

この違いは、前者の場合は、回答する前にLLM自身が自分で知っているかどうかをその時点で知っている。後者の場合は、一応言ってみたけれども「あれ、なんか俺気持ち悪いな」っていうような。そういう場合にはきっとセマンティックエントロピーが推定できるような内部状態になっていると。理想は前者の方で、これから回答するかどうかの時点で推定できればいい。

◆研究の結果と応用

実際にやってみると、このセマンティックエントロピーを推定すること自体はかなりうまくできています

いろんなモデルでやっていて、且つさっき言った2箇所で評価するんですけれども、例えばこの図2にある例だと、Llama-2-7BからMistral、Phi、Llama-2-70Bで内部状態からセマンティックエントロピーを推定して、これは適当に閾値決めて、二値分類で考えたときのAUCが0.8から、うまくいく場合には0.95くらいまでは推定できます。

結論としては、内部状態のところで既にLLMは一応自分が知っているかどうかは知っている、ただそれを表現できない。線形回帰のモデルを使ったらそれが出せるということが分かりました。

さらに、今のSEPsを学習するのって、教師なしだけでも特定のデータセットでやって、実際にこれを使う場合っていうのは、全く知らない質問が飛んできた場合にもできるのかということで、この図6にあるように、SEPsを学習したときと違う状況で推定できるかに関して、完璧じゃないんだけれどもできているというのが分かりました。

ちょっと興味深いこととしては、今言ったセマンティックエントロピーを予測するモデルと、もう一つがそもそも正解が与えられていてそれをprobeできるのかっていうaccuracy probeというのもあるんですけれど、そっちの方は汎化しないというのが分かりました。

噛み砕いていうと、モデル自体が解けるかどうか答えは分からないけど、自信があるかないかは分かるという感じになります。つまり、分からないという状態はLLMにとっては分かっている。ただ何が分かるかは分からないという風になります。(自分で言っときながら哲学的になりましたw)

実用的には、例えばハルシネーションをちゃんと検出したいようなアプリケーションの場合には、こういうモデルを用意しておけば回答中に自信ないなというところは色付けたりもできるし、自信ないところでRAGを飛ばすとかそういう使い方もできたりすると思います。

PFNは新しい仲間を
募集しています

未掲載事例、プロダクト・ソリューション、研究開発についてお気軽にお問い合わせください