RAG应用已成为利用大模型能力的典型代表,受到广泛推广,并不断涌现出多种性能提升技术。然而,全面、准确地评估RAG系统仍然面临挑战。传统评估方法存在诸多局限性:难以有效衡量长文本回复、难以区分检索与生成模块的错误来源,且与人类判断的相关性较低。
为了解决这些问题,亚马逊科学团队与上海交通大学等研究团队联合开发了RAGChecker。这是一款专为RAG系统设计的创新评估框架,能够通过自动检查和验证生成内容的准确性,显著减少“幻觉”等常见生成错误。RAGChecker可集成至现有RAG系统中,从而提升系统回答的可靠性和对真实数据的引用精度,为实际应用提供更稳健的支持。
RAGChecker 是一种先进的自动评估框架,旨在评估和诊断检索增强生成 (RAG) 系统。它提供了一套全面的指标和工具,用于深入分析 RAG 性能。
RAGChecker的主要特点
整体评估:RAGChecker 提供Overall Metrics,支持对整个 RAG 管道的全面评估,帮助用户快速了解系统的整体表现。
诊断指标:RAGChecker包含诊断检索指标(Diagnostic Retriever Metrics)用于分析检索组件,以及诊断生成指标(Diagnostic Generator Metrics)用于评估生成组件。通过这些诊断指标,用户能够深入了解系统性能,为有针对性的优化提供关键数据支持。
细粒度评估:使用基于claim-level entailment的操作,实现细粒度评估,更精确地评估回答的正确性和合理性。
基准数据集:即将推出的全面RAG基准数据集,包含10个领域的4,000个问题,便于在多个领域对系统进行测试和对比。
元评估:包含人工注释的偏好数据集,用于评估RAGChecker的评估结果与人类判断之间的相关性,以确保系统评估结果的准确性和可靠性。
RAGChecker 使开发人员和研究人员能够精确、深入地彻底评估、诊断和增强他们的 RAG 系统。
RAGChecker 论文: https ://arxiv.org/pdf/2408.08067
RAGChecker的工作原理
RAGChecker使用声明级检查(claim-level checking)方法进行细粒度评估。以下是其工作原理:
声明抽取(Claim Extraction):RAGChecker使用大型语言模型(LLM)作为抽取器,将复杂文本(RAG系统响应和标准答案)分解为单独的声明。声明是一个独立的、原子化的信息片段,可以被验证为真或假。示例:文本:"埃菲尔铁塔建于1889年,高324米。" 抽取的声明:
("埃菲尔铁塔", "建于", "1889年")("埃菲尔铁塔", "高度", "324米")
声明检查(Claim Checking): 另一个LLM作为检查器,根据参考文本(检索的上下文或标准答案)验证每个提取的声明的准确性。
RAGChecker执行以下比较:
回复的声明 vs. 标准答案:衡量回复的正确性。
标准答案的声明 vs. 回复:衡量回复的完整性。
回复的声明 vs. 检索上下文:衡量忠实度并识别幻觉。
标准答案的声明 vs. 检索上下文:评估检索信息的质量。
这些比较是计算RAGChecker中各种指标的基础。
RAGChecker的指标
RAGChecker提供三类指标来评估RAG系统的不同方面:
整体指标
这些指标衡量整个RAG流程的整体质量:
精度(Precision): 表示回复的
正确性(correctness)
(回复中正确声明的比例)。召回(Recall): 表示回复的
完整性(completeness)
(回复中提到的标准答案声明的比例)。F1: 精确率和召回率的调和平均值,衡量回复的整体质量。
计算整体指标需要回复和标准答案,不需要检索上下文。
检索指标
检索指标衡量检索模块(如BM25)搜索相关信息和并降低噪音的能力。
声明召回(Claim Recall):检索上下文覆盖的标准答案声明的比例。
上下文精度(Context Precision):相关chunk的比例。不相关的chunk可以被视为噪音。
其中,相关chunk是指包含任意标准答案声明的chunk(图中绿色方块)。计算检索器指标需要标准答案和检索上下文。
生成指标
生成指标可以评估生成器的多个方面性能:
上下文利用率(Context Utilization):生成器有效使用上下文中相关信息的程度。
对相关/不相关chunk中的噪音敏感度(Noise Sensitivity in Relevant/Irrelevant Chunks):生成器受相关和不相关文本块中噪音影响的程度。
幻觉(Hallucination):生成的不在上下文中的错误信息。
自身知识(Self-knowledge):使用模型自身知识而不是检索上下文中的内容。
忠实度(Faithfulness):生成器使用检索上下文的程度。
RAGChecker指标总结
如何使用RAGChecker
首先安装依赖:
pip
install ragchecker
python -m spacy download en_core_web_sm
命令行运行RAGChecker
按照所需格式准备您的输入JSON文件(参见上面的描述)。
运行评估脚本(使用我们仓库中的示例文件):
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=128 \ # 可以大于batch_size_extractor
--metrics all_metrics # all_metrics, overall_metrics, retriever_metrics 或 generator_metrics
在Python代码中使用RAGChecker
from ragchecker import RAGResults, RAGChecker
from ragchecker.metrics import all_metrics
# 从json/dict初始化ragresults
with open("examples/checking_inputs.json") as fp:
rag_results = RAGResults.from_json(fp.read())
# 设置评估器
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
)
# 使用选定的指标(如retriever_metrics、generator_metrics、all_metrics)评估结果
evaluator.evaluate(rag_results, all_metrics)
print(rag_results)
代码成功运行后,它将输出如下所示的指标值:
Results for examples/checking_outputs.json:
{
"overall_metrics": {
"precision": 73.3,
"recall": 62.5,
"f1": 67.3
},
"retriever_metrics": {
"claim_recall": 61.4,
"context_precision": 87.5
},
"generator_metrics": {
"context_utilization": 87.5,
"noise_sensitivity_in_relevant": 22.5,
"noise_sensitivity_in_irrelevant": 0.0,
"hallucination": 4.2,
"self_knowledge": 25.0,
"faithfulness": 70.8
}
}
运行RAGChecker后,您将收到一组指标。以下是如何解读这些结果并采取行动:
检索模块:
声明召回率低:考虑使用更先进的检索模型或增加检索chunk的数量。
上下文精确率低:尝试减少检索文本块的数量以降低噪声。
如果可能的话,您还可以考虑微调检索器。
生成模块:
忠实度低或幻觉高:调整您的提示以强调仅使用检索到的信息。
上下文利用率低:修改提示以鼓励生成器识别和使用相关信息。
噪音敏感度高:在提示中增加推理步骤,帮助生成器忽略不相关信息。
整体系统改进:
尝试不同的文本块大小和检索文本块数量。
尝试不同的检索器和生成器组合。
如果可能,在特定领域数据上微调两个组件。
RAGChecker 现在与 LlamaIndex 集成,为使用 LlamaIndex 构建的 RAG 应用程序提供了强大的评估工具。有关如何将 RAGChecker 与 LlamaIndex 结合使用的详细说明,请参阅有关 RAGChecker 集成的 LlamaIndex 文档。这种集成允许 LlamaIndex 用户利用 RAGChecker 的综合指标来评估和改进他们的 RAG 系统。
参考资料:
1. https://github.com/amazon-science/RAGChecker?tab=readme-ov-file