ACP-LLM考试点:评估 RAG 应用表现
您目前处于:AI&大模型  2025-02-27

系列文章:

• 大模型是如何工作的?

• 让大模型能够回答私域知识问题

• RAG的工作原理

• 优化提示词改善答疑机器人回答质量

• 评估 RAG 应用表现


自动化测试是工程优化的重要手段。借助量化的自动化测试,可以帮你在改进 RAG 应用时,从感觉变好了,转变为指标量化显示应用表现更好。这不仅可以帮助你更快地评估RAG应用的问答质量、找到优化方向,还能将你所作出的优化结果量化出来。

当然,有了自动化测试并不意味着你就完全不需要人工评估了,建议在实际应用时,邀请 RAG 应用对应的领域专家一起构建能反映真实场景问题分布的测试集,并且持续更新测试集。

同时,由于大模型并不能总是做到 100% 准确,也建议你在实际使用时,定期抽样评估自动化测试结果的精度,并且尽量不要频繁更换大模型与 embedding 模型。对于 Ragas,你可以通过调整默认评测方法中的提示词(比如补充和你的业务领域相关的参考样例),来改善其表现(详情请参考拓展阅读)。

一、使用 Ragas 来评估应用表现

agas 提供了多项指标,可以用来全链路评测应用的问答质量。比如:

1、整体回答质量的评估

  • Answer Correctness,用于评估 RAG 应用生成答案的准确度。

2、生成环节的评估

  • Answer Relevancy,用于评估 RAG 应用生成的答案是否与问题相关。

  • Faithfulness,用于评估 RAG 应用生成的答案和检索到的参考资料的事实一致性。

3、召回阶段的评估

  • Context Precision,用于评估 contexts 中与准确答案相关的条目是否排名靠前、占比高(信噪比)。

  • Context Recall,用于评估有多少相关参考资料被检索到,越高的得分意味着更少的相关参考资料被遗漏。

1、评估 RAG 应用回答质量

(1)快速上手

在评估 RAG 应用整体回答质量时,使用 Ragas 的 Answer Correctness 是一个很好的指标。为了计算这个指标,你需要准备以下两种数据来评测 RAG 应用产生的 answer 质量:

  • question(输入给 RAG 应用的问题)

  • ground_truth(你预先知道的正确的答案)

(2)了解 answer correctness 的计算过程

从直观感受上 Answer correctness 的打分确实与你的预期相符。它在打分过程使用到了大模型与 embedding 模型,由 answer 和 ground_truth 的语义相似度和事实准确度计算得出。

语义相似度

语义相似度是通过 embedding 模型得到 answer 和 ground_truth 的文本向量,然后计算两个文本向量的相似度。向量相似度的计算有许多种方法,如余弦相似度、欧氏距离、曼哈顿距离等, Ragas 使用了最常用的余弦相似度。

事实准确度

事实准确度是衡量 answer 与 ground_truth 在事实描述上差异的指标。

answer 和 ground_truth 在事实描述上存在差异(工作方向),但也存在一致的地方(工作部门)。这样的差异很难通过大模型或 embedding 模型的简单调用来量化。Ragas 通过大模型将 answer 与 ground_truth 分别生成各自的观点列表,并对观点列表中的元素进行比较与计算。

下图可以帮助你理解 Ragas 衡量事实准确度的方法:

分数汇总

得到语义相似度和事实准确度的分数后,对两者加权求和,即可得到最终的 Answer Correctness 的分数。

2、评估检索召回效果

(1)快速上手

Ragas 中的 context precision 和 context recall 指标可以用于评估 RAG 应用中的检索的召回效果。

  • Context precision 会评估检索召回的参考信息(contexts)中与准确答案相关的条目是否排名靠前、占比高(信噪比),侧重相关性

  • Context recall 则会评估 contexts 与 ground_truth 的事实一致性程度,侧重事实准确度

实际应用时,可以将两者结合使用。

为了计算这些指标,你需要准备的数据集应该包括以下信息:

  • question,输入给 RAG 应用的问题。

  • contexts,检索召回的参考信息。

  • ground_truth,你预先知道的正确的答案。

(2)了解 context recall 和 context precision 的计算过程

Context recall

你已经从上文了解到 context recall 是衡量 contexts 与 ground_truth 是否一致的指标。

在Ragas 中,context recall 用来描述 ground_truth 中有多少比例的观点可以得到 contexts 的支持,计算过程如下:

  1. 由大模型将 ground_truth 分解成 n 个观点(statements)。

  2. 由大模型判断每个观点能在检索到的参考资料(contexts)中找到依据,或者说 context 是否能支撑 ground_truth 的观点。

  3. 然后 ground_truth 观点列表中,能在 contexts 中找到依据的观点占比,作为 context_recall 分数。

Context precision

在Ragas 中,context precision 不仅衡量了 contexts 中有多少比例的 context 与 ground_truth 相关,还衡量了 contexts 中 context 的排名情况。计算过程比较复杂:

  1. 按顺序读取 contexts 中的 contexti ,根据 question 与 ground_truth,判断 contexti 是否相关。相关为 1 分,否则为 0 分。

  2. 对于每一个 context,以该 context 及之前 context 的分数之和作为分子,context 所处排位作为分母,计算 precision 分。

  3. 对每一个 context 的 precision 分求和,除以相关的 context 个数,得到 context_precision。

如果你暂时无法理解上面的计算过程也没有关系,你只需知道该指标衡量了 contexts 中 context 的排名情况。如果你感兴趣,我们鼓励你去阅读 Ragas 的源码

3、其他推荐了解的指标

Ragas 还提供了很多其他的指标,这里就不一一介绍,你可以访问 Ragas 的文档来查看更多指标的适用场景和工作原理。

Ragas 支持的指标可以访问:https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/

二、如何根据 Ragas 指标进行优化

做评测的最终目的不是为了拿到分数,而是根据这些分数确定优化的方向。你已经学习到了answer correctness、context recall、context precision三个指标的概念与计算方法,当你观察到某几个指标的分数较低时,应该制定相应的优化措施。

1、context recall

context recall指标评测的是RAG应用在检索阶段的表现。如果该指标得分较低,你可以尝试从以下方面进行优化:

(1)检查知识库

知识库是RAG应用的源头,如果知识库的内容不够完备,则会导致召回的参考信息不充分,从而影响context recall。你可以对比知识库的内容与测试样本,观察知识库的内容是否可以支持每一条测试样本(这个过程你也可以借助大模型来完成)。如果你发现某些测试样本缺少相关知识,则需要对知识库进行补充。

(2)更换embedding模型

如果你的知识库内容已经很完备,则可以考虑更换embedding模型。好的embedding模型可以理解文本的深层次语义,如果两句话深层次相关,那么即使“看上去”不相关,也可以获得较高的相似度分数。比如提问是“负责课程研发的是谁?”,知识库对应文本段是“张伟是教研部的成员”,尽管重合的词汇较少,但优秀的embedding模型仍然可以为这两句话打出较高的相似度分数,从而将“张伟是教研部的成员”这一文本段召回。

(3)query改写

作为开发者,对用户的提问方式做过多要求是不现实的,因此你可能会得到这样缺少信息的问题:“教研部”、“请假”、“项目管理”。如果直接将这样的问题输入RAG应用中,大概率无法召回有效的文本段。你可以通过对员工常见问题的梳理来设计一个prompt模板,使用大模型来改写query,提升召回的准确率。

2、context precision

与context recall一样,context precision指标评测的也是RAG应用在检索阶段的表现,但是更注重相关的文本段是否具有靠前的排名。如果该指标得分较低,你可以尝试context recall中的优化措施,并且可以尝试在检索阶段加入rerank(重排序),来提升相关文本段的排名。

3、answer correctness

answer correctness指标评测的是RAG系统整体的综合指标。如果该指标得分较低,而前两项分数较高,说明RAG系统在检索阶段表现良好,但是生成阶段出了问题。你可以尝试前边教程学到的方法,如优化prompt、调整大模型生成的超参数(如temperature)等,你也可以更换性能更加强劲的大模型,甚至对大模型进行微调等方法来提升生成答案的准确度。

拓展阅读

更换 Ragas 的提示词模板

Ragas 的许多评测指标是基于大模型来实现的。与 LlamaIndex 一样,Ragas 的默认提示词模板是英文的,同时允许自定义修改。你可以将 Ragas 各指标的默认提示词翻译成中文,使得评测的结果更符合中文问答场景。

我们在ragas_prompt文件夹中提供了中文的提示词模板,你可以参考以下代码将中文提示词适配到 Ragas 的不同指标中。

Ragas 会在提示词中向大模型提供一些示例,来帮助大模型理解应该如何进行判断、生成观点列表等操作,因此你也可以更改示例来适配到你的业务场景。

Ragas 自带 prompt 模板
更改 prompt 模板之后

更多评价指标

除了RAG外,还有许多种大模型或者自然语言处理(NLP)的应用或任务,如Agent、NL2SQL、机器翻译、文本摘要等。Ragas提供了许多可以评测这些任务的指标。

评价指标 使用场景 指标含义
ToolCallAccuracy Agent 评估 LLM 在识别和调用完成特定任务所需工具方面的表现,该参数由参考工具调用与大模型做出的工具调用比较得到,取值范围是0-1。
DataCompyScore NL2SQL 评估大模型生成的SQL语句在数据库检索后得到的结果与正确结果的差异性,取值为0-1。
LLMSQLEquivalence NL2SQL 相比于上者,无需真正在数据库中进行检索,只评估大模型生成的SQL语句与正确的SQL语句的区别,取值为0-1。
BleuScore 通用 基于 n-gram 评估响应与正确答案之间的相似性。最初被设计用于评估机器翻译系统,评测时无需使用大模型,取值为0-1。

课后小测验

【单选题】Context Precision 指标检测的是?( )

  • A. 整体回答质量的评估

  • B. 评估与提问相关的召回文本段是否排名靠前

  • C. 生成的答案与召回文本段是否相关

  • D. 生成的答案是否与提问相关

答案:B


转载请并标注: “本文转载自 linkedkeeper.com ”  ©著作权归作者所有