在大型语言模型(LLM)时代,RAG 或检索增强生成是突出的 AI 框架,例如 ChatGPT。 它通过整合外部知识提升这些模型的能力,确保更准确和更及时的响应。 标准的 RAG 系统包括一个 LLM,一个类似 Milvus 的向量数据库,以及一些提示作为代码。
随着越来越多的开发人员和企业采用 RAG 构建 GenAI 应用程序,评估它们的有效性变得越来越重要。 在另一篇文章中,我们评估了使用 OpenAI 助手和 Milvus 向量数据库构建的两种不同 RAG 系统的性能, 这些系统为评估 RAG 系统提供了一些启示。
本文将深入探讨评估 RAG 应用程序所使用的方法。我们还将介绍一些强大的评估工具, 并突出标准的度量标准。
RAG 评估指标
评估 RAG 应用并不仅仅是简单地比较几个例子。 关键在于使用令人信服、定量且可复现的指标来评估这些应用。
在这个过程中,我们将介绍 三类指标:
- 基于真相的指标
- 无基于真相的指标
- 基于 LLM 响应的指标
基于真相(ground truth)的指标
真相指的是数据集中对应用户查询的知名答案或知识文档块。 当真相是答案时,我们可以直接将真相与 RAG 响应进行比较, 使用答案语义相似性和答案正确性等指标,促进端到端的测量。
以下是根据正确性评估答案的示例。
真相(ground truth):爱因斯坦于 1879 年在德国出生。 高答案正确性(high answer correctness):1879年,爱因斯坦在德国出生。 低答案正确性(low answer correctness):在西班牙,爱因斯坦于 1879 年出生。
如果真相是来自知识文档的块,我们可以使用传统指标, 如精确匹配(EM)、Rouge-L 和 F1,评估文档块与检索上 下文之间的相关性。 本质上,我们正在评估 RAG 应用的检索效果。
- 如何为您自己的数据集生成基本真相。
我们现在已经确定了使用带有基本真相的数据集来评估 RAG 应用程序的重要性。 然而,如果您想使用未标记基本真相的私有数据集来评估 RAG 应用程序该怎么办呢? 如何为您的数据集生成所需的基本真相?
最简单的方法是要求像 ChatGPT 这样的 LLM 根据您的专有数据集生成示例问题和答案。 像 Ragas 和 LlamaIndex 这样的工具也提供了根据您的知识文档定制生成测试数据的方法。
这些生成的测试数据集包括问题、上下文和相应答案,促进了定量评估,而无需依赖无关的外部基准数据集。 这种方法赋予用户使用其独特数据来评估 RAG 系统的能力,确保进行更加定制和有意义的评估过程。
没有基准的度量标准
即使在每个查询都没有基准真相的情况下,我们仍然可以评估 RAG 应用程序。 TruLens-Eval 是一种开源评估工具,它创新了 RAG 三元概念, 并侧重于评估查询、上下文和响应三元组中元素的相关性。
三个相应的度量标准是:
- 上下文相关性:衡量检索到的上下文如何支持查询。
- 稳固性:评估语言模型的响应与检索到的上下文的一致程度。
- 答案相关性:衡量最终 响应与查询的相关性。
以下是一个根据答案与问题相关性进行评估的示例
Question: Where is France and what is its capital?
Low relevance answer: France is in western Europe.
High relevance answer: France is in western Europe and Paris is its capital.
RAG三重组合由3个评估组成: 上下文相关性、稳固性和答案相关性。 对每个评估的满意度让我们确信我们的LLM应用程序不会出现幻觉。
- 上下文相关性
任何RAG应用程序的第一步都是检索;为了验证我们检索的质量,我们希望确保每个上下文块与输入查询相关。 这一点至关重要,因为这个上下文将被LLM用来形成答案,所以上下文中的任何无关信息都可能被编织成幻觉。 TruLens通过使用序列化记录的结构来评估上下文相关性。
- 负载性
在检索到上下文之后,它然后由LLM形成答案。 LLM经常倾向于偏离所提供的事实,夸大或扩展以获得听起来正确的答案。 为了验证我们应用程序的牢固性,我们可以将响应分成独立的声明, 并在检索到的上下文中独立搜索支持每个声明的证据。
- 答案相关性
最后,我们的回答仍然需要有助于回答最初的问题。 我们可以通过评估最终回应与用户输入的相关性来验证这一点。
此外,这些三重度量标准可以进一步细分,增强评估的细粒度。 例如,Ragas(一个致力于评估RAG系统性能的开源框架) 已将上下文相关性细分为三个进一步详细的度量标准:上下文精度、上下文相关性和上下文召回。
基于LLM响应的指标
这类指标评估LLM的响应,考虑了友好性、有害性和简洁性等因素。 例如,LangChain提出了简洁性、相关性、正确性、连贯性、 有害性、恶意、帮助性、争议性、厌恶性、犯罪性和不敏感性等指标。
以下是一个基于简洁性评估答案的示例。
Question: What's 2+2?
Low conciseness answer: What's 2+2? That's an elementary question. The answer you're looking for is that two and two is four.
High conciseness answer: 4