RAGChecker:顯著超越RAGAS,一個精細化評估和診斷 RAG 系統的創新框架 精華
RAG應用已經是當下利用大模型能力的典型應用代表,也獲得了極大的推廣,各種提升RAG性能的技術層出不窮。然而,如何全面、準確地評估 RAG 系統一直是一個挑戰。傳統評估方法存在諸多局限性:無法有效評估長文本回復、難以區分檢索和生成模塊的錯誤來源、與人類判斷的相關性不高。為此,亞馬遜和上海交通大學等研究團隊開發了 RAGChecker[1],這是一個專為 RAG 系統設計的創新評估框架。
圖片
RAGChecker 的核心亮點在于其細粒度的評估方法。它首先使用大型語言模型將文本分解為獨立的聲明,然后通過另一個模型驗證每個聲明的準確性。這種方法不僅能夠評估整體性能,還能深入診斷檢索和生成模塊的具體問題。
RAGChecker 提供了三類指標:
1)整體指標:包括精度、召回率和 F1 分數,全面反映 RAG 系統的輸出質量。
2)檢索指標:
- 聲明召回:衡量檢索上下文覆蓋標準答案聲明的比例。
- 上下文精度:評估檢索上下文中相關 chunks 的比例。
3)生成指標:
- 上下文利用率:反映生成器有效利用相關信息的程度。
- 幻覺:量化生成的錯誤信息比例。
- 忠實度:衡量生成器對檢索上下文的依賴程度。
- 相關/不相關噪聲敏感度:評估生成器對不同類型噪聲的敏感程度。
- 自知識:反映生成器依賴內部知識的程度。
使用方法
RAGChecker 提供了多種使用方法,包含命令行、python 編碼等方式,還可以與主流 LLM 開發框架集成,如 llamaindex。
- 安裝
pip install ragchecker
python -m spacy download en_core_web_sm- 使用命令行
ragchecker-cli \
--input_path=examples/checking_inputs.json \
--output_path=examples/checking_outputs.json \
--extractor_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
--checker_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
--batch_size_extractor=64 \
--batch_size_checker=64 \
--metrics all_metrics \
# --disable_joint_check # uncomment this line for one-by-one checking, slower but slightly more accurate- 使用 python
from ragchecker import RAGResults, RAGChecker
from ragchecker.metrics import all_metrics
# initialize ragresults from json/dict
with open("examples/checking_inputs.json") as fp:
rag_results = RAGResults.from_json(fp.read())
# set-up the evaluator
evaluator = RAGChecker(
extractor_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
checker_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
batch_size_extractor=32,
batch_size_checker=32
)
# evaluate results with selected metrics or certain groups, e.g., retriever_metrics, generator_metrics, all_metrics
evaluator.evaluate(rag_results, all_metrics)
print(rag_results)
"""Output
RAGResults(
2 RAG results,
Metrics:
{
"overall_metrics": {
"precision": 76.4,
"recall": 62.5,
"f1": 68.3
},
"retriever_metrics": {
"claim_recall": 61.4,
"context_precision": 87.5
},
"generator_metrics": {
"context_utilization": 87.5,
"noise_sensitivity_in_relevant": 19.1,
"noise_sensitivity_in_irrelevant": 0.0,
"hallucination": 4.5,
"self_knowledge": 27.3,
"faithfulness": 68.2
}
}
)
"""- 與 llamaindex 集成
# User query and groud truth answer
user_query = "What is RAGChecker?"
gt_answer = "RAGChecker is an advanced automatic evaluation framework designed to assess and diagnose Retrieval-Augmented Generation (RAG) systems. It provides a comprehensive suite of metrics and tools for in-depth analysis of RAG performance."
# Get response from LlamaIndex
response_object = rag_application.query(user_query)
# Convert to RAGChecker format
rag_result = response_to_rag_results(
query=user_query,
gt_answer=gt_answer,
response_object=response_object,
)
# Create RAGResults object
rag_results = RAGResults.from_dict({"results": [rag_result]})
print(rag_results)實驗結果
RAGChecker 的有效性已通過大規模實驗和人工評估得到驗證。結果顯示,RAGChecker 的評分與人類判斷的相關性顯著高于現有評估方法。在 Pearson 相關性上,RAGChecker 達到了 61.93%,而最接近的基線方法 RAGAS 僅為 48.31%。

關鍵要點
利用 RAGChecker,研究人員評估了 8 個最先進的 RAG 系統,覆蓋了 10 個不同領域的數據集。

通過分析結果,他們發現了一些關鍵洞見:
- 檢索器的質量至關重要。無論使用何種生成器,更好的檢索器都能帶來一致的性能提升。例如,將 BM25 檢索器替換為 E5-Mistral 檢索器,在使用 GPT-4 作為生成器時,整體 F1 分數從 50.3 提高到 52.7 。
- 生成器模型的規模越大,整體性能越好。這體現在更高的上下文利用率、更低的噪聲敏感度和更少的幻覺。以 Llama3 系列為例,70B 版本在各項指標上都優于 8B 版本。
- 開源模型在區分準確信息和噪聲方面表現較差。它們傾向于過度信任上下文,特別是在檢索質量提高時。例如,Llama3-70B 的忠實度從 93.2%上升到 95.9%,而 GPT-4 僅從 87.9%上升到 92.9%。
- 存在檢索召回和生成器噪聲敏感度之間的權衡。提高檢索召回率會不可避免地引入更多噪聲,從而增加生成器的噪聲敏感度。數據顯示,使用 E5-Mistral 檢索器時,聲明召回率從 74.0%提高到 83.5%,但相關噪聲敏感度也從 26.2%上升到 28.9%。
基于這些發現,研究者提出了幾點改進 RAG 系統的建議:
- 優先提升檢索器性能,如使用更好的嵌入模型或適度增加檢索 chunk 數量和大小。實驗表明,將 chunk 大小從 150 增加到 300,可以將整體 F1 分數從 52.6 提高到 53.4 。
- 在有限上下文長度的情況下,使用較少數量的大 chunks 優于較多數量的小 chunks 。這可以提高上下文精度,從而減少噪聲影響。
- 針對不同的應用場景和用戶偏好,可以通過調整生成提示來平衡上下文利用率、噪聲敏感度和忠實度。例如,通過優化提示詞,可以將 GPT-4 的忠實度從 92.2%提高到 93.6%。
- 對于開源模型,需要著重提升其推理能力,以更好地區分和利用上下文中的有用信息。這可能需要在訓練過程中引入更多的推理任務。
小結
RAGChecker 為全面評估和診斷 RAG 系統提供了一個強大而靈活的工具。通過揭示 RAG 系統中檢索和生成模塊的復雜交互,以及不同設計選擇帶來的影響,RAGChecker 不僅能幫助研究人員更好地理解和改進現有 RAG 系統,還為未來 RAG 系統的優化和創新指明了方向。
參考資料
[1]RAGChecker: https://github.com/amazon-science/RAGChecker
本文轉載自 ??AI工程化??,作者: ully

















