人手アノテーションによる RAG システムの評価方法
検索拡張生成(RAG)を評価するための実践ガイド。検索の関連性と回答の忠実性を別々に採点し、根拠のない主張を Potato のスパンアノテーションで印付けする方法を解説します。
検索拡張生成(RAG)システムは、まったく異なる 2 通りの形で失敗し得ます。そして単一の品質スコアでは、どちらを見ているのかが隠れてしまいます。検索器(retriever)が誤った文書を引いてきたのか、あるいは生成器(generator)が良い文書を持っていたのにそれを無視したのか、のいずれかです。「回答が良いか」だけを測っていると、この 2 つを区別できず、システムのどちら側を直すべきかも分かりません。
解決策は、検索と生成を別々に評価し、回答がその出典からどこで逸脱したかを正確に印付けすることです。
アノテーションする価値のある 3 つの要素
- 検索の関連性。 検索された各文書は、クエリに対して実際に関連しているか?
- 回答の忠実性。 生成された回答はそれらの文書に根拠を置いており、捏造された主張がないか?
- 引用の正確性。 回答の主張は、引用している出典までたどれるか?
これらを分けて扱うことで、漠然とした「回答が間違っている」が、「正しい文書は検索されたが、モデルがそこに含まれない主張を追加した」に変わります。これは生成側の問題であり、検索の失敗とは別の修正を示唆します。
Potato での設定方法
3 つすべてを 1 つの画面に配置できます。multirate で検索された各文書を同じ尺度で評定し、リッカート尺度で忠実性を評定し、回答中の問題のあるスパンをハイライトします。
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]データを実用的にするのがスパンスキームです。5 点中 2 点という忠実性スコアは何かが間違っていることを伝えますが、ハイライトされたスパンは、どの文がなぜ問題なのかを伝えてくれます。
RAG 評価を静かに台無しにするもの
アノテーターは出典なしに忠実性を判断できません。 クエリ、検索された文書、回答を同じ画面に表示してください。文書が折りたたまれていたり別のタブにあったりすると、人は回答が正しそうに聞こえるかで評定してしまい、それはまさに捕まえようとしている失敗モードそのものです。
「関連している」には定義が必要です。 クエリに対して関連しているのか、それとも回答に実際に使われたのか。これらは異なる判断であり、事前に決めておかないとアノテーターの判断は割れます。
忠実性は主観的な要素です。 一部の項目で重複を集め、特に忠実性評定について一致率を確認してください。そこで一致率が低い場合は、数値を信頼する前に「根拠がない」の定義を厳密にしましょう。
次に読むべきもの
3 つのスキームがどう組み合わさるかを含む完全な解説は、RAG 評価ガイドにあります。RAG に限らず、あらゆるモデル出力の事実誤認やハルシネーションを印付けする方法については、スパンアノテーションによるハルシネーションの検出を参照してください。エージェントをより広く評価する場合は、AI エージェントの評価方法から始めてください。