見出し画像

LLMのハルシネーションを検知する方法

LLMのハルシネーション検知手法に関するこちらの記事を読み、興味を持ったので調べてみました。

記事のベースとなっているのは以下の論文のようです。

上記を参考に、ハルシネーション検知に対する考え方や、各検知手法について簡単にまとめました。


前提

テストは以下の前提とします。これを「ブラックボックステスト」と呼んでいます。

  • 外部知識は利用しない

  • LLMの内部挙動を見ない

  • 生成された回答のみを使ってテストする

ハルシネーションを検知するには?

同じ質問に対して複数の回答を生成させて、出力間の一貫性を見ます。
回答に一貫性があるほどハルシネーションが少ないと言えます。

テキスト同士の一貫性の算出方法

以下のような手法があります。

  • Cosine similarity

  • N-gram language model

  • BERTScore

  • Question-Answering

  • Natural Language Inference (NLI)

  • LLM prompting

論文作者チームによる算出用コードもSelfCheckGPTという名前で公開されているので、簡単に試してみることもできそうです。

各手法の概要

Cosine similarity

  • SentenceTransformerなど任意の方法でテキストをエンベディングし、ベクトル同士のコサイン類似度を算出する。

N-gram language model

  • N-gram単位でのテキストの一致度を見る。

BERTScore

  • Cosine similarityとN-gramを組み合わせたような手法。

  • N-gram単位での一致を見る代わりに、BERTでエンベディングされたトークン同士の類似度を見る。テキスト間で最もコサイン類似度の高いトークン同士を紐付けてスコア化する。

BERTScore: Evaluating Text Generation with BERT より引用

Question-Answering

  • 比較元テキストから選択式の質問を生成する。

  • 別途用意したQAモデルで、各テキストを参照して質問に回答させ、どれだけ回答が一致しているかを見る。

ML Collective Talk - SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models より引用

なお、Question-Answeringモデル自体についてはこちらの論文で書かれています。

Natural Language Inference (NLI)

  • 自然言語処理タスクの一つであるNLI用のモデルを用いる。

  • 「前提(premise)=比較元テキスト」と「仮説(hypothesis)=比較先テキスト」がどれだけ矛盾しているかを予測する。

ML Collective Talk - SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models より引用

LLM prompting

  • LLMに評価してもらう。

SelfCheckGPTではyes/noで回答させていますが、スコアを回答させることも可能です。

yes or no

# 参考 https://github.com/potsawee/selfcheckgpt/blob/f30483d97b5f0f887d44c1a507c02d72526b15a5/demo/experiments/selfcheck_prompt/openai_gpt3_prompt.py#L16

Context: {}
Sentence: {}
Is the sentence supported by the context above?
Answer Yes or No:

scoring

# 参考 https://learn.deeplearning.ai/quality-safety-llm-applications/lesson/3/hallucinations

prompt = f"""You will be provided with a text passage \
            and your task is to rate the consistency of that text to \
            that of the provided context. Your answer must be only \
            a number between 0.0 and 1.0 rounded to the nearest two \
            decimal places where 0.0 represents no consistency and \
            1.0 represents perfect consistency and similarity. \n\n \
            Text passage: {dataset['response'][index]}. \n\n \
            Context: {dataset['response2'][index]} \n\n \
            {dataset['response3'][index]}."""

精度比較

論文内ではLLM promptingが最も精度が高いという結果が出ています。

SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models より引用

まとめ

  • ハルシネーションの検知方法:同じ質問に対して複数の回答を生成させて、出力間の一貫性を見る。

  • 出力間の一貫性もLLMに評価してもらうことが可能。

参考文献


Header Photo by Unsplash Micah Boswell

この記事が気に入ったらサポートをしてみませんか?