RAG の評価
検索拡張生成(retrieval-augmented generation)を人手アノテーションで評価する方法。検索の関連性、回答の faithfulness、引用スパンを Potato で扱います。
検索拡張生成(retrieval-augmented generation、RAG)は、まず文書を検索し、それをもとに回答を生成して質問に答えます。RAG の評価とは、2 つのことを別々に判断することです。すなわち、正しい文書を検索できたか、そして回答が実際にそれらの文書で裏づけられているかです。 両者を混同すると、システムのどこで失敗しているかが見えなくなります。
背景については検索拡張生成を参照してください。
アノテーションすべき 3 つのこと
- 検索の関連性:検索された各文書について、それはクエリに関連しているか。
- 回答の faithfulness:生成された回答は検索された文書に根ざしており、裏づけのない主張がないか。
- 引用の正確さ:回答の主張は、引用された情報源に実際に遡れるか。
Potato での設定方法
3 つのスキームを 1 画面にまとめます。各文書を評価し、faithfulness を評価し、回答内の問題のあるスパンを強調します。
yaml
annotation_schemes:
- annotation_type: multirate
name: retrieval_relevance
description: "Rate the relevance of each retrieved document to the query."
labels: ["Irrelevant", "Somewhat", "Relevant", "Highly relevant"]
- annotation_type: likert
name: faithfulness
description: "Is the answer faithful to the retrieved documents?"
size: 5
min_label: "Many unsupported claims"
max_label: "Fully grounded"
- annotation_type: span
name: problems
description: "Highlight any unsupported or incorrect claim in the answer."
labels: [unsupported_claim, contradicted, hallucination]multirate は多数の文書を同じ尺度で一度に評価します。span スキームは、回答が情報源からどこで逸脱したかを正確に示します。幻覚の検出を参照してください。
検索と生成を分ける理由
RAG システムは 2 通りの失敗をします。悪い文脈を検索した(検索の問題)か、良い文脈を無視した(生成の問題)かです。両者を別々に採点すれば、どちらを直すべきかがわかります。faithfulness のスコアだけではそれはわかりません。
品質上の留意点
- クエリ、文書、回答をまとめてアノテーターに見せてください。情報源がなければ faithfulness は判断できません。
- 「関連」には定義が必要です。クエリに関連しているのか、それとも実際に回答で使われたのか。あらかじめ決めておきます。
- faithfulness の一致度を追跡してください。3 つのうち最も主観的な項目です。