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 系统。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。