RAG应用的评估(一)

前言

上篇文档主要是对Advanced-RAG的定义、策略和适用场景做了一个细致的分析,那么当我们准备将一个基于大模型的RAG应用投入生产时,如何去判断这个RAG是否合理呢?下面有一些问题是需要提前考并应付的:

  • LLM输出的不确定性会带来一定的不可预知性。一个 RAG 应用在投入生产之前需要科学的测试以衡量这种不可预知性。

  • 在LLM应用上线后的持续维护中, 需要科学、快速、可复用的手段来衡量其改进效果, 比如回答的置信度是上升了 10%还是下降了5%?

  • RAG 应用的"外挂"知识库是动态的, 在不断维护的过程中, 可能会产生新的知识干扰。因此, 定期检测与重新评估是确保应用质量的重要手段。

  • 由于 RAG 应用依赖基础大模型, 那么如何在大量的商业与开源大模型中选择最适合企业的 大模型或如何知道大模型升级一次版本对 RAG 应用产生了多大影响?

RAG应用的评估方法

当前,常见的RAG应用主要有两种评估方法:1、人工评估;2、自动化评估。

人工评估

人工评估是RAG评估的最基础的办法,通俗的来说就是找一些垂直领域专家或专业的人工评估员对RAG生成的结果进行评估,评估的标准包括准确性、连贯性、相关性等。但是,懂得都懂,这种办法虽然能提供高质量的反馈,但是这种方法耗时费力,且受制于评估员的主观性和经验差异性。

自动化评估

就当前而言,自动化评估是企业的主流选择,同时也是当前RAG的主流和发展方向,主要是用过LLM和相关算法对RAG生成的文本进行量化评分,从而快速评估RAG性能。

RAG应用的评估依据和指标

任何RAG系统的有效性和性能都是依赖两个核心组件:检索器生成器,检索器高效地识别和检索相关的文档,生成器使用检索到的信息生成连贯、相关和准确的响应。而为了评估RAG系统,通常使用两种类型评估:

检索评估:主要目的是评估上下文相关性,即检索到的文档与用户查询的匹配程度,确保提供生成组件的上下文是相关和准确的。

响应评估:衡量系统能否根据检索到的文档所提供的上下文信息,有效地生成高质量的最终响应。

评估依据

RAG 应用的评估依据(评估模块输入要素):

输入问题(question):用户使用RAG应用时输入的问题。

生成的答案(answer):需评估的RAG应用输出,即问题的答案。

上下文(context):用户增强RAG应用输出的参考上下问题,通常在检索阶段生成。

参考答案(reference_anwser):输入问题真实的正确答案,通常需人类标注。

评估指标

  上下文相关性(Context Relevancy)

  检索出的上下文与输入问题相关性

  • 含义:指上下文中有多少内容与输入问题相关。

  • 示例:

    • 问题:“埃菲尔铁塔的建造年份?”

    • 检索器返回:

      • “埃菲尔铁塔于 1887 年动工,1889 年竣工。”

      • “巴黎是法国的文化中心。”

  • 对上述示例的分析:

    • 第二个片段虽与巴黎相关,但未包含建造年份信息。

    • context_relevancy 会根据关键信息(如“1887”“1889”)的存在与否进行评分,而非仅统计相关片段的数量,且这种评估方式一般使用较少。

  上下文精度(Context Precision)

    在具体的定义上,这个有点争议,

    一种说法是:检索出的上下文(context)中与参考答案(reference_answer)相关的部分在上文(context)中是否出现在最前面的位置,这种较为常用。

    另一种说法是:检索到的上下文(context)中 相关信息的比例,可以理解为

RAG应用的评估(一)_第1张图片

    

问题:“苹果公司的总部在哪里?”

    上下文:“苹果公司(Apple Inc.) 成立于 1976 年,总部位于美国加利福尼亚州库比蒂诺市,CEO 是蒂姆·库克,主要产品包括 iPhone 和 Mac。”

    分析:问题关注“总部位置”,上下文中仅“加利福尼亚州库比蒂诺市”相关,其余(成立时间、CEO、产品)无关→精确率 = 1/4=25%。

  上下文召回率(Context Recall)

  衡量检索到的上下文中是否包含回答问题所需的全部关键信息,或者说检索到的上下文(context)与参考答案(reference_answer)之间的一致程度,有时也称为命中率(hit_rate)。

RAG应用的评估(一)_第2张图片

 问题:“《三体》的作者是谁?哪一年出版?”

    参考答案:“刘慈欣,2006 年。”

    上下文:“刘慈欣,中国科幻作家,2006 年开始在《科幻世界》连载《三体》。”

    分析:参考答案的关键信息是“刘慈欣”和“2006 年”,上下文均包含→召回率 = 100%。

    反例:若上下文仅包含“刘慈欣”,未提“2006 年”,则召回率 = 50%。

响应评估

忠实度(Faithfulness)

生成的答案(answer)是否完全基于提供的上下文(context)信息,没有捏造、幻觉或与上下文矛盾的内容。

将生成答案拆解为原子事实(如时间、地点、事件),逐一检查是否能在上下文中找到直接依据,如果存在上下文未提及的信息,即使正确,若上下文无依据也视为不忠实。

  问题:“爱因斯坦在哪一年获得诺贝尔奖?”

  生成答案:“爱因斯坦于1921年因光电效应研究获得诺贝尔物理学奖。”

  上下文:“1921年诺贝尔物理学奖得主阿尔伯特·爱因斯坦,获奖理由为‘发现光电效应定律’。”

  分析:答案中“1921年”“光电效应”“诺贝尔物理学奖”均来自上下文,无额外信息→ 忠实度=100%。

  反例:若答案添加“他当时在普林斯顿大学任教”(上下文未提及),则忠实度下降。

答案相关性(Answer Relevancy)

生成的答案(answer)是否直接、清晰地回答了用户原始的查询问题(question)。即使答案忠实于上下文,但如果答非所问,那么这个答案也是无效的。

  问题:“如何煮咖啡?”

  生成答案:“咖啡豆需研磨至中粗度,用90°C热水冲泡3分钟。”

  分析:答案直接针对“如何煮”的步骤,包含关键动作(研磨、冲泡温度、时间)→相关性高。

  反例:若答案为“咖啡豆起源于埃塞俄比亚”(回答“起源”而非“方法”),则相关性低。

评估总结

指标 归属 相关评估输入 含义
context_recall 检索 上下文(context)、参考答案(reference_answer) 上下文中覆盖用户问题所需关键信息的比例
context_precision 检索 上下文(context)+参考答案(reference_answer)或者问题(question)+上下文( context) 上下文的关键信息位置是否靠前或者是上下文的关键信息所占比例
faithfulness 响应 答案(answer)、上下文(context) 生成的答案是否完全基于提供的上下文信息
answer_relevancy 响应 答案(answer)、问题(question) 生成的答案是否直接、清晰地回答了用户原始的查询问题
context_relevancy 检索 问题( question)、上下文( context) 上下文中有多少内容与输入问题相关,较少使用

你可能感兴趣的:(AIGC,ai,机器学习,人工智能,语言模型)