RAG 评估的最佳实践:综合指南
David Myriel
·2024 年 11 月 24 日

引言
本指南将教您如何评估 RAG 系统的准确性和质量。您将学习通过测试搜索精度、召回率、上下文相关性和响应准确性来维持 RAG 性能。
构建 RAG 应用仅仅是个开始;测试其对最终用户的有用性并校准其组件以实现长期稳定性至关重要。
RAG 系统可能在三个关键阶段中的任何一个阶段遇到错误:检索相关信息、增强该信息以及生成最终响应。通过系统地评估和微调每个组件,您将能够维护一个满足用户需求的可靠且上下文相关的 GenAI 应用。
为什么需要评估您的 RAG 应用?
避免幻觉和错误答案
在生成阶段,“幻觉”是一个值得关注的问题,即 LLM 会忽略上下文并编造信息。这可能导致生成不符合事实的响应。
此外,生成带有偏见的答案也是一个问题,因为 LLM 生成的响应有时可能有害、不恰当或带有不当语气,从而在各种应用和交互中构成风险。
丰富增强到您的 LLM 的上下文
增强过程面临一些挑战,例如信息过时(响应可能包含不再是最新的数据)以及上下文空白(检索到的文档之间缺乏关联性上下文)。
这些空白可能导致呈现不完整或零散的信息,从而降低增强响应的整体连贯性和相关性。
最大化搜索和检索过程
在检索方面,搜索的一个重要问题是精度不足,即检索到的文档并非都与查询相关。召回率低使得这个问题更加复杂,这意味着并非所有相关文档都能成功检索到。
此外,“迷失在中间”问题表明,一些 LLM 可能难以处理长上下文,尤其当关键信息位于文档中间时,这会导致结果不完整或实用性较低。
推荐框架
为了简化评估过程,可以使用几种强大的框架。下面我们将探讨其中三种流行的框架:Ragas、Quotient AI 和 Arize Phoenix。
Ragas:通过问答测试 RAG
Ragas(或 RAG Assessment)使用包含问题、理想答案和相关上下文的数据集,将 RAG 系统生成的答案与真实情况进行比较。它提供诸如忠实度、相关性和语义相似度等指标来评估检索和答案的质量。
图 1:Ragas 框架的输出,展示了诸如忠实度、答案相关性、上下文召回率、精度、相关性、实体召回率和答案相似度等指标。这些指标用于评估 RAG 系统响应的质量。
Quotient:使用自定义数据集评估 RAG 流水线
Quotient AI 是另一个旨在简化 RAG 系统评估的平台。开发者可以上传评估数据集作为基准来测试不同的提示和 LLM。这些测试作为异步作业运行:Quotient AI 自动运行 RAG 流水线,生成响应并提供关于忠实度、相关性和语义相似度的详细指标。该平台的全部功能可通过 Python SDK 访问,使您能够访问、分析和可视化您的 Quotient 评估结果,以发现改进领域。
图 2:Quotient 框架的输出,包含用于衡量数据集在 RAG 流水线所有阶段(索引、分块、搜索和上下文相关性)中是否被正确处理的统计数据。
Arize Phoenix:可视化分解响应生成过程
Arize Phoenix 是一个开源工具,通过跟踪响应是如何逐步构建的来帮助提高 RAG 系统的性能。您可以在 Phoenix 中直观地看到这些步骤,这有助于识别性能下降和错误。您可以定义使用 LLM 评估输出质量、检测幻觉和检查答案准确性的“评估器”。Phoenix 还会计算延迟、令牌使用量和错误等关键指标,让您了解 RAG 系统的工作效率。
图 3:Arize Phoenix 工具使用直观,并展示了整个过程架构以及检索、上下文和生成内部发生的步骤。
您的 RAG 系统可能表现不佳的原因
您将数据不正确地导入到向量数据库中
不正确的数据导入可能导致重要的上下文信息丢失,这对于生成准确且连贯的响应至关重要。此外,不一致的数据导入可能导致系统产生不可靠且不一致的响应,从而损害用户信任和满意度。
向量数据库支持不同的索引技术。为了了解您是否正确导入数据,您应该始终检查与索引技术相关的变量变化如何影响数据导入。
解决方案:注意数据如何进行分块
校准文档块大小:块大小决定了数据粒度,并影响精度、召回率和相关性。它应该与嵌入模型的令牌限制对齐。
确保适当的块重叠:这有助于通过在块之间共享数据点来保留上下文。应通过去重和内容规范化等策略进行管理。
制定适当的分块/文本分割策略:确保您的分块/文本分割策略根据您自己的数据类型(例如 HTML、markdown、代码、PDF)和用例的细微差别进行定制。例如,法律文件可以按标题和子部分分割,医学文献可以按句子边界或关键概念分割。
图 4:您可以使用 ChunkViz 等工具来可视化不同的块分割策略、块大小和块重叠。
您可能正在错误地嵌入数据
您需要确保嵌入模型能够准确理解和表示数据。如果生成的嵌入准确,则相似的数据点将在向量空间中紧密相邻。嵌入模型的质量通常使用诸如 大规模文本嵌入基准 (MTEB) 等基准进行衡量,在该基准中,模型的输出与真实数据集进行比较。
解决方案:选择正确的嵌入模型
嵌入模型在捕获数据中的语义关系方面起着关键作用。
您可以选择多种嵌入模型,而 大规模文本嵌入基准 (MTEB) 排行榜 是一个很好的参考资源。像 FastEmbed 这样的轻量级库支持使用流行的文本嵌入模型生成向量嵌入。
在选择嵌入模型时,需要考虑检索性能和领域特异性。您需要确保模型能够捕获语义细微之处,这会影响检索性能。对于专业领域,您可能需要选择或训练自定义嵌入模型。
您的检索过程未优化
语义检索评估测试数据检索的有效性。您可以从以下几种指标中进行选择:
- Precision@k:衡量前 k 个搜索结果中相关文档的数量。
- 平均倒数排名 (MRR):考虑第一个相关文档在搜索结果中的位置。
- 折损累积增益 (DCG) 和归一化折损累积增益 (NDCG):基于文档的相关性得分。
通过使用这些指标评估检索质量,您可以评估检索步骤的有效性。对于专门评估 ANN 算法而言,Precision@k 是最合适的指标,因为它直接衡量算法对精确搜索结果的近似程度。
解决方案:选择最佳检索算法
具有更大上下文窗口的每一个新 LLM 都声称 RAG 已经过时。然而,像“迷失在中间”这样的研究表明,将整个文档输入给 LLM 会降低其有效回答问题的能力。因此,检索算法对于在 RAG 系统中获取最相关的数据至关重要。
配置密集向量检索:您需要选择合适的相似度指标以获得最佳检索质量。密集向量检索中使用的指标包括余弦相似度、点积、欧氏距离和曼哈顿距离。
在需要时使用稀疏向量和混合搜索:对于稀疏向量,BM-25、SPLADE 或 BM-42 等算法选择将影响检索质量。混合搜索将密集向量检索与基于稀疏向量的搜索相结合。
利用简单过滤:此方法将密集向量搜索与属性过滤相结合,以缩小搜索结果范围。
设置正确的超参数:您的分块策略、块大小、重叠和检索窗口大小会显著影响检索步骤,并且必须根据特定要求进行定制。
引入重排序:此类方法可以使用交叉编码器模型对向量搜索返回的结果进行重新评分。重排序可以显著改善检索,从而提高 RAG 系统的性能。
LLM 生成性能欠佳
LLM 负责根据检索到的上下文生成响应。LLM 的选择范围从 OpenAI 的 GPT 模型到开源模型。您选择的 LLM 将显著影响 RAG 系统的性能。以下是一些需要注意的方面:
- 响应质量:LLM 的选择将影响生成响应的流畅性、连贯性和事实准确性。
- 系统性能:不同 LLM 的推理速度各不相同。较慢的推理速度会影响响应时间。
- 领域知识:对于特定领域的 RAG 应用,您可能需要针对该领域进行训练的 LLM。有些 LLM 比其他 LLM 更容易进行微调。
解决方案:测试和批判性分析 LLM 质量
Open LLM 排行榜 可以帮助您选择 LLM。在该排行榜上,LLM 根据其在各种基准(例如 IFEval、GPQA、MMLU-PRO 等)上的得分进行排名。
评估 LLM 涉及几个关键指标和方法。您可以使用这些指标或框架来评估 LLM 是否提供了高质量、相关且可靠的响应。
表 1:衡量 LLM 响应质量的方法
方法/指标 | 方法/指标 |
---|---|
困惑度 | 衡量模型预测文本的能力。 |
人工评估 | 根据相关性、连贯性和质量对响应进行评分。 |
BLEU | 用于翻译任务中,将生成的输出与参考译文进行比较。得分越高(0-1),表示性能越好。 |
ROUGE | 通过将生成的摘要与参考摘要进行比较来评估摘要质量,计算精度、召回率和 F1 分数。 |
EleutherAI | 一个用于在不同评估任务上测试 LLM 的框架。 |
HELM | 一个用于评估 LLM 的框架,侧重于实际模型部署中重要的 12 个不同方面。 |
多样性 | 评估响应的多样性和独特性,得分越高表示输出越多样化。 |
许多 LLM 评估框架提供了灵活性,以适应特定领域或自定义评估,从而解决您的用例的关键 RAG 指标。这些框架利用 LLM 作为评判者(LLM-as-a-Judge)或 OpenAI Moderation API 来确保您的 AI 应用的响应得到审核。
使用自定义数据集
首先,从源文档中为评估数据集创建问题和真实答案对。真实答案是您期望从 RAG 系统获得的精确响应。您可以通过多种方式创建它们:
- 手动创建数据集:手动创建问题和答案。
- 使用 LLM 创建合成数据:利用诸如 T5 或 OpenAI API 等 LLM。
- 使用 Ragas 框架:此方法使用 LLM 生成用于评估 RAG 系统的各种问题类型。
- 使用 FiddleCube:FiddleCube 是一个可以帮助生成针对测试过程不同方面的各种问题类型的系统。
创建数据集后,收集检索到的上下文和 RAG 流水线为每个问题生成的最终答案。
图 5:这里是四个评估指标的示例:
- question:基于源文档的一组问题。
- ground_truth:对查询的预期准确答案。
- context:RAG 流水线为每个查询检索到的上下文。
- answer:RAG 流水线为每个查询生成的答案。
结论:运行测试时需要注意什么
为了了解 RAG 系统是否正常运行,您需要确保:
- 检索有效性:检索到的信息在语义上是相关的。
- 响应的相关性:生成的响应是有意义的。
- 生成响应的连贯性:响应是连贯且逻辑关联的。
- 响应的及时性:响应基于当前数据。
端到端 (E2E) 评估 RAG 应用
端到端 (E2E) 评估衡量整个检索增强生成 (RAG) 系统的整体性能。以下是一些您可以衡量的关键因素:
- 实用性:衡量系统的响应在多大程度上帮助用户实现其目标。
- 基础性:确保响应基于从检索到的上下文中的可验证信息。
- 延迟:监控系统的响应时间,确保其满足所需的速度和效率标准。
- 简洁性:评估响应是否简短但全面。
- 一致性:确保系统在不同的查询和上下文中始终提供高质量的响应。
例如,您可以使用诸如答案语义相似度和正确性等指标来衡量生成响应的质量。
衡量语义相似度将告诉您生成答案与真实情况之间的差异,范围从 0 到 1。该系统使用余弦相似度来评估向量空间中的对齐情况。
检查答案正确性评估生成答案与真实情况之间的总体一致性,结合了事实正确性(由 F1 分数衡量)和答案相似度得分。
RAG 评估仅仅是个开始
RAG 评估仅仅是个开始。它为系统的持续改进和长期成功奠定了基础。最初,它可以帮助您识别和解决与检索准确性、上下文相关性和响应质量相关的即时问题。然而,随着您的 RAG 系统演变并受到新的数据、用例和用户交互的影响,您需要继续进行测试和校准。
通过持续评估您的应用,您可以确保系统适应不断变化的需求并随着时间的推移保持其性能。您应定期校准所有组件,例如嵌入模型、检索算法和 LLM 本身。这个迭代过程将帮助您识别和修复新出现的问题,优化系统参数,并纳入用户反馈。
RAG 评估的实践尚处于早期发展阶段。请保留本指南,并等待更多技术、模型和评估框架的开发。我们强烈建议您将它们纳入您的评估过程中。
想下载本指南的打印友好版本?填写此表格,我们将通过电子邮件将 PDF 发送给您。