如何用人工標註評估 RAG 系統
評估檢索增強生成的實用指南:分別衡量檢索相關性和回答忠實度,並在 Potato 中用片段標註標出缺乏依據的論斷。
檢索增強生成系統可能以兩種完全不同的方式失敗,而單一的品質分數會掩蓋你正在面對的到底是哪一種:要麼是檢索器拉取了錯誤的文件,要麼是生成器拿到了好文件卻置之不理。如果你只衡量"回答好不好",就無法區分這兩者,也就無法判斷該修復系統的哪一半。
Where RAG goes wrong
解決辦法是分別評估檢索和生成,並精確標出回答在哪裡偏離了它的來源。
值得標註的三件事
- **檢索相關性。**對於每一份檢索到的文件,它是否真的與查詢相關?
- **回答忠實度。**生成的回答是否紮根於這些文件,沒有憑空捏造的論斷?
- **引用準確性。**回答中的論斷能否追溯回它所引用的來源?
把這三者分開,就能把含糊的"回答錯了"變成"檢索到的文件是對的,但模型添加了一個文件中沒有的論斷"。這是一個生成問題,它指向的修復方向與檢索失敗截然不同。
在 Potato 中進行配置
你可以把這三項都放在同一個介面上。用 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 評估的細節
**沒有來源,標註者無法判斷忠實度。**把查詢、檢索到的文件和回答放在同一個介面上。如果文件被摺疊起來或放在另一個標籤頁裡,人們就會根據回答聽起來是否正確來打分,而這恰恰是你想要捕捉的失敗模式。
**"相關"需要一個定義。**是與查詢相關,還是確實被用在了回答裡?這是兩種不同的判斷,如果你不事先確定,標註者就會各執一詞。
**忠實度才是那個主觀的部分。**在一部分樣本上收集重疊標註,並專門檢查忠實度評分的一致性。如果那裡一致性偏低,就先收緊"缺乏依據"的定義,再去信任這些數字。
接下來去哪裡
完整的演練,包括這三個標註方案如何相互配合,可參見 RAG 評估指南。若要在任意模型輸出(而不僅是 RAG)中標記事實錯誤和幻覺,請參見用片段標註檢測幻覺。如果你想更廣泛地評估智慧體,可以從如何評估 AI 智慧體開始。