本文翻译自 Qdrant 官方博客,原文链接已附。本文首先介绍评估的必要性,然后介绍评估的框架,最后阐述表现不佳的解决方法,值得一读。
本指南将教你如何评估一个 RAG 系统的准确性 和质量。你将学会通过测试搜索精度、召回率、上下文相关性和响应准确性来保持 RAG 系统的性能。
构建一个 RAG 应用程序仅仅是开始; 测试其对终端用户的实用性,并对其组件进行长期稳定性校准至关重要。
RAG 系统在三个关键阶段可能会遇到错误:检索相关信息、增强该信息以及生成最终响应。通过系统地评估和微调每个组件,你将能够保持一个可靠且具有上下文相关性的生成 AI 应用程序,满足用户需求。
在生成阶段,幻觉是一个显著的问题,LLM(大语言模型)可能忽视上下文并编造信息,这会导致不基于现实的响应。
此外,生成有偏见的答案也是一个关注点,因为 LLM 生成的答案有时可能是有害、不恰当的,或者带有不合适的语气,因此在各种应用和交互中可能存在风险。
增强过程中面临的挑战之一是过时的信息,响应中可能包含不再最新的数据。另一个问题是存在上下文缺口,即检索的文档之间缺乏关联的上下文。
这些缺口可能导致呈现不完整或片段化的信息,从而减少增强响应的整体连贯性和相关性。
在检索过程中,一个显著的问题是缺乏精确性,检索的并非所有文档都与查询相关。这个问题由于召回率差而加剧,意味着并非所有相关的文档都被成功检索。
此外,存在迷失在中间[1] 问题,表明一些 LLM 可能在处理长上下文时存在困难,特别是当关键信息位于文档中部时,这可能导致不完整或不太有用的结果。
为了简化评估过程,有几个强大的框架可以使用。下面我们将探讨三个流行的框架:Ragas、Quotient AI 和 Arize Phoenix。
Ragas[2](即 RAG 评估)使用包含问题、理想答案和相关上下文的数据集,将 RAG 系统生成的答案与真实答案进行比较。它提供诸如忠实度、相关性和语义相似度等指标,以评估检索和答案的质量。
图 1:Ragas 框架的输出,展示了诸如忠实度、答案相关性、上下文召回率、精度、相关性、实体召回率和答案相似度等指标。这些指标用于评估 RAG 系统响应的质量。
Quotient AI 是另一个旨在简化 RAG 系统评估的平台。开发者可以上传评估数据集作为基准,测试不同的提示和 LLM。这些测试作为异步任务运行:Quotient AI 自动运行 RAG 流程,生成响应并提供关于忠实度、相关性和语义相似度的详细指标。该平台的全部功能可以通过 Python SDK 访问,使你能够访问、分析和可视化你的 Quotient 评估结果,发现需要改进的地方。
图 2:Quotient 框架的输出,展示了定义数据集是否在 RAG 流程的所有阶段(索引、分块、检索和上下文相关性)中正确处理的统计数据。
Arize Phoenix[3] 是一个开源工具,通过追踪响应的逐步构建过程,帮助改进 RAG 系统的性能。你可以在 Phoenix 中直观地查看这些步骤,帮助识别性能瓶颈和错误。你可以定义 “评估器[4]” 来使用 LLM 评估输出的质量、检测幻觉和检查答案的准确性。Phoenix 还会计算诸如延迟、令牌使用和错误等关键指标,帮助你了解 RAG 系统的效率。
图 3:Arize Phoenix 工具易于使用,展示了整个过程架构以及检索、上下文和生成过程中发生的步骤。
不当的数据导入可能导致丢失重要的上下文信息,而这些信息对于生成准确和连贯的响应至关重要。此外,不一致的数据导入可能导致系统生成不可靠和不一致的响应,削弱用户的信任和满意度。
向量数据库支持不同的索引[5] 技术。为了确认你是否正确地导入数据,你应该始终检查与索引技术相关的变量变化如何影响数据导入。
调整文档分块大小: 分块大小决定了数据的粒度,影响精度、召回率和相关性。它应该与嵌入模型的令牌限制对齐。
确保适当的分块重叠: 这有助于通过在不同分块之间共享数据点来保持上下文。可以采用去重和内容规范化等策略来管理这一点。
制定适当的分块/文本拆分策略: 确保你的分块/文本拆分策略适应你的数据类型(例如 HTML、Markdown、代码、PDF)和使用场景。例如,法律文档可能按标题和小节分块,医学文献可能按句子边界或关键概念拆分。
图 4:你可以使用诸如ChunkViz[6] 之类的工具来可视化不同的分块拆分策略、分块大小和分块重叠情况。
你需要确保嵌入模型能够准确理解和表示数据。如果生成的嵌入是准确的,相似的数据点将在向量空间中紧密排列。嵌入模型的质量通常通过像 [Massive Text Embedding Benchmark (MTEB)](https://huggingface.co/spaces/mteb/leaderboard "Massive Text Embedding Benchmark (MTEB "Massive Text Embedding Benchmark (MTEB)")") 这样的基准进行衡量,其中模型的输出与真实数据集进行比较。
嵌入模型在捕捉数据的语义关系中起着关键作用。
你可以选择多种嵌入模型, [Massive Text Embedding Benchmark (MTEB) Leaderboard](https://huggingface.co/spaces/mteb/leaderboard "Massive Text Embedding Benchmark (MTEB "Massive Text Embedding Benchmark (MTEB) Leaderboard") Leaderboard") 是一个很好的参考资源。轻量级库如FastEmbed[7] 支持使用流行的文本嵌入模型[8] 生成向量嵌入。
在选择嵌入模型时,检索性能 和领域特定性 非常重要。你需要确保模型能够捕捉语义差异,这会影响检索性能。对于专业领域,你可能需要选择或训练一个自定义的嵌入模型。
语义检索评估测试了你的数据检索效果。有几个指标可以选择:
通过使用这些指标评估检索质量,你可以判断检索步骤的效果。对于 ANN 算法的评估,Precision@k 是最合适的指标,因为它直接衡量了算法如何逼近精确的搜索结果。
每一个新的具有更大上下文窗口的 LLM 都声称使 RAG 过时。然而,像迷失在中间[9] 这样的难题表明,依赖于大模型的默认检索方式可能无法提供最优化的解决方案。可以通过进一步优化检索算法(例如进行多轮检索或组合多种搜索技术)来改善性能。
评估和优化 RAG 系统是一个持续的过程。通过使用适当的框架和方法评估检索、增强和生成过程,你可以确保你的系统保持准确和可靠。微调每个阶段并不断验证和优化系统的组件,最终将有助于构建一个具有高质量生成响应的 RAG 应用程序。
为帮助开发者深入学习企业级 RAG 应用,推荐这本专注于RAG 开发与优化的书籍——《基于大模型的 RAG 应用开发与优化 — 构建企业级 LLM 应用》,无论是初学者还是进阶开发者,都能从中获益。
[1]
迷失在中间:https://arxiv.org/abs/2307.03172
[2]
Ragas:https://docs.ragas.io/en/v0.0.17/index.html
[3]
Arize Phoenix:https://docs.arize.com/phoenix
[4]
评估器:https://docs.arize.com/phoenix/evaluation/concepts-evals/evaluation
[5]
索引:https://qdrant.tech/documentation/concepts/indexing/
[6]
ChunkViz:https://chunkviz.up.railway.app/
[7]
FastEmbed:https://github.com/qdrant/fastembed
[8]
流行的文本嵌入模型:https://qdrant.github.io/fastembed/examples/Supported_Models/#supported-text-embedding-models
[9]
迷失在中间:https://arxiv.org/abs/2307.03172