Skip to content

RAG の評価

検索拡張生成(retrieval-augmented generation)を人手アノテーションで評価する方法。検索の関連性、回答の faithfulness、引用スパンを Potato で扱います。

検索拡張生成(retrieval-augmented generation、RAG)は、まず文書を検索し、それをもとに回答を生成して質問に答えます。RAG の評価とは、2 つのことを別々に判断することです。すなわち、正しい文書を検索できたか、そして回答が実際にそれらの文書で裏づけられているかです。 両者を混同すると、システムのどこで失敗しているかが見えなくなります。

背景については検索拡張生成を参照してください。

アノテーションすべき 3 つのこと

  1. 検索の関連性:検索された各文書について、それはクエリに関連しているか。
  2. 回答の faithfulness:生成された回答は検索された文書に根ざしており、裏づけのない主張がないか。
  3. 引用の正確さ:回答の主張は、引用された情報源に実際に遡れるか。

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 つのうち最も主観的な項目です。

さらに読む