RAG评估:RAGChecker重磅发布!精准诊断RAG系统的全新细粒度框架!

文摘   2024-11-02 15:50   新加坡  

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 ragcheckerpython -m spacy download en_core_web_sm

命令行运行RAGChecker

  1. 按照所需格式准备您的输入JSON文件(参见上面的描述)。

  2. 运行评估脚本(使用我们仓库中的示例文件):

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, RAGCheckerfrom ragchecker.metrics import all_metrics

# 从json/dict初始化ragresultswith 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后,您将收到一组指标。以下是如何解读这些结果并采取行动:

  1. 检索模块:

  • 声明召回率低:考虑使用更先进的检索模型或增加检索chunk的数量。

  • 上下文精确率低:尝试减少检索文本块的数量以降低噪声。

如果可能的话,您还可以考虑微调检索器。

  1. 生成模块:

  • 忠实度低或幻觉高:调整您的提示以强调仅使用检索到的信息。

  • 上下文利用率低:修改提示以鼓励生成器识别和使用相关信息。

  • 噪音敏感度高:在提示中增加推理步骤,帮助生成器忽略不相关信息。

  • 整体系统改进:

    • 尝试不同的文本块大小和检索文本块数量。

    • 尝试不同的检索器和生成器组合。

    • 如果可能,在特定领域数据上微调两个组件。


    RAGChecker 现在与 LlamaIndex 集成,为使用 LlamaIndex 构建的 RAG 应用程序提供了强大的评估工具。有关如何将 RAGChecker 与 LlamaIndex 结合使用的详细说明,请参阅有关 RAGChecker 集成的 LlamaIndex 文档这种集成允许 LlamaIndex 用户利用 RAGChecker 的综合指标来评估和改进他们的 RAG 系统。

    参考资料:

    1. https://github.com/amazon-science/RAGChecker?tab=readme-ov-file

    AI技术研习社
    专注分享人工智能、大模型、算法、大数据开发、数据分析领域的技术干货和落地实践!
     最新文章