深入解析:如何高效评估RAG系统(一)
深入解析:如何高效评估RAG系统(一)
RAG(检索增强生成)系统是解决大语言模型(LLM)“幻觉”问题的重要方法之一。本文深入探讨了RAG系统的优势、挑战以及如何通过RAGAS框架对其进行有效评估,旨在为读者提供一套系统的理解和应用RAG技术的指南。
一、为什么要选择RAG
众所周知,大语言模型(LLM)存在“幻觉”问题,经常一本正经地胡说八道,除此之外还有知识无法及时更新、可解释性差等问题。RAG(检索增强生成)和Fine-Tune(微调)是目前主流的两种解决方法,它们之间的对比如下:
在实际应用中,判断是采取RAG还是Fine-Tune方案可以通过以下几个维度判断:
在医疗等严肃应用场景中,为了避免“幻觉”问题,且由于可用于微调的数据有限,RAG成为了首选的方式。
二、如何评估RAG系统
“Demo只需一天,好用至少半年”,RAG是典型的入手简单做好难。自从跟随大模型爆火之后,各种RAG框架层出不穷,它们内置的大模型底座、检索策略等各不相同,无论是选择自己手动搭建还是采用第三方RAG框架,都需要了解如何去评价它。
首先我们再回顾一下RAG的基本工作流程和关键节点:
RAG包括三个核心内容,用户的输入(Query)、检索到的知识(Context)和模型最终给出的回答(Answer),它们之间两两对比可以得到三个基础指标,分别是:
- Context Relevance:衡量召回的内容和问题之间相关程度。如果相关度很低甚至召回了毫不相关的内容会给LLM提供错误的Prompt,这是目前RAG系统最大的挑战之一。
- Groundedness(Faithfulness):该指标衡量了生成的答案在给定的上下文中的事实一致性。它是根据答案和检索到的上下文计算出来的,如果该得分低,反应出了LLM的回答不遵从召回的知识,那么回答出现幻觉的可能就越大。
- Answer Relevance:该指标衡量回答内容和提问内容之间的相关性,如果出现“答非所问”或者回答内容不完整,该指标会给出一个比较低的分数。
- Answer Correctness:对于一些有标准答案(Ground Truth)的场景,还可以评估回答的内容和标准答案的一致性。
- Instruction Follwing:另外在挑选底座大模型的时候还可以评估不同底座模型的指令跟随能力(尤其是针对小参数模型),简单来讲就是“听话”的能力。
跟所有基于AI的应用一样,RAG应用可以通过人工端到端的评估方式进行评估,比如对于医疗问答系统,可以让专业的医生直接给输出的内容打分,这种方式是最可靠的但是很难覆盖所有场景且费时费力;除此之外就是通过自动化量化评估的方式给出评估结果,接下来将着重介绍几种自动化评估的框架。
三、开源RAG评估框架RAGAS
RAGAS应该是目前评估比较全面,而且各种文档也比较齐全的评估框架了,而且跟Langchain等框架做了集成,可以直接调用。RAGAS论文中提到三个指标,现在已经扩展到九个了:
Faithfulness(忠诚度)
RAGAS的计算原理是通过大语言模型(LLM)从生成的答案中拆分成一组描述,然后让大模型去判断是否是否可以从上下文中推断出来,主要是通过提示词工程实现,Prompt如下:(注意:RAGAS内置都是英文的提示词,需要转换成中文)
考虑给定的上下文和以下陈述,然后判断这些陈述是否得到上下文信息的支持。在得出结论(是/否)之前,对每个陈述进行简要解释。最后按指定格式依次给出对每项陈述的最终裁定。不要偏离指定格式:
[语句 1]
…
[语句 n]
例如某个问题被拆成5组描述,大模型判断3组可以从上下文推断出来,得分就是3/5=0.6
Answer Relevance(回答相关性)
RAGAS采用的是经典的余弦相似度来进行判断,首先使用大语言模型 (LLM) 从生成的答案中逆向设计问题的“n”个变体,然后计算生成的问题与实际问题之间的平均余弦相似度。引用官网给的例子:
Answer:France is in western Europe.
Question 1:“In which part of Europe is France located?”
Question 2:“What is the geographical location of France within Europe?”
Question 3:“Can you identify the region of Europe where France is situated?”
因为这个指标跟Context无关,所以也可以用来测试不是基于RAG的问答系统。
Context Precision(上下文召回精度)
这是一个评估召回的指标,核心思路给定一个问题,然后判断基于这个问题召回的内容跟金标准是否相关,计算步骤拆解如下:
第一步:判断每个chunk是否跟ground truth相关,假如一个问题和召回了top5的chunks,其中不同chunk分别用LLM进行判断相关性:
- chunk1 : 相关
- chunk2: 不相关
- chunk 3: 相关
- chunk 4:不相关
- chunk5:相关
第二步:计算每个chunk的 Precision@k值,在位置k之前的相关chunk数量除以 k,分别计算结果如下:
- Precision@1 = 1/1 = 1.0
- Precision@2 = 1/2 = 0.5
- Precision@3 = 2/3 ≈ 0.67
- Precision@4 = 2/4 = 0.5
- Precision@5 = 3/5 = 0.6
第三步:计算 Precision@k 的平均值
平均Precision@k=1.0+0.5+0.67+0.5+0.6=53.27=0.654
这里计算均值前引入了位置的信息判断,跟答案相关的越靠前,得分就会越高,Context Precision 指标可以看做是Faithfulness 指标的的一种延伸,二者都是用来评价召回内容跟金标准的一致性。
Context Recall(上下文召回率)
也是一个评估召回的指标,它的思路跟Answer Relevance有点接近,只不过他是把ground truth拆分了几份,每一份再去判断跟context的相关性,最终计算一个比例出来。
Context entities recall(上下文实体召回率)
这个是最近刚推出的指标,引入了实体的概念,通过计算context和ground truth中同时存在的实体数据在ground truth 实体中的比例来衡量召回的内容是否接近ground truth,举个例子:
假设ground truth中抽取的实体如下:[‘长城’, ‘北京’, ‘秦始皇’, ‘公元前221年’, ‘世界遗产’]
context1中抽取的实体 [‘长城’, ‘北京’, ‘秦始皇’, ‘中国’]
context2中抽取的实体 [‘长城’, ‘世界遗产’, ‘中国’]
计算相似度:
context1中的相关实体:[‘长城’, ‘北京’, ‘秦始皇’]
context2中的相关实体 : [‘长城’, ‘世界遗产’]
context1的召回准确率0.6>context2的召回准确率0.4,我们应该选用context1的召回策略。
Answer semantic similarity(回答语义相关度)
也是一个评估回答结果跟金标准一致性的指标,在RAGAS中,Answer Relevance指标通过逆向生成问题对比得出分数,这个就比较简单了,直接把answer和ground truth 分别做一个向量化,然后直接通过语义相似度判断一致性。语义相似度的判断是通过余弦相似度来实现的。
Answer Correctness(回答准确性)
RAGAS提供的另外一个评估系统answer和ground truth 一致性的指标,只不过他是上一个指标Context entities recall在结合factual correctness(事实一致性),两边分给一个权重然后计算最终得分,但是官网并没有提到事实一致性是如何计算的,那只能是人工评价后计算一个调和平均数,我们可以简单理解为这个指标是把人工评价和语义评价做了一个综合。
Aspect Critique(特定方向评估)
RAGAS提供一个可扩展的评估方向,其中内置的了,无害性(Harmlessness)、恶意性(Maliciousness)、连贯性(Coherence)、正确性(Correctness)和 简洁性(Conciseness)5个评估方向,评估方法是通过写一个提示词然后让大模型来进行判断是否存在上述问题,也可以自定义要评估指标,通过 SUPPORTED_ASPECTS 这个字段进行维护,每个指标都可以单独调用。
假设有一篇文章需要评估其质量,可以使用这些方面来进行评估:
- 无害性检查:判断文章内容是否会对读者造成心理或情感上的伤害。
- 恶意性检查:判断文章内容是否包含欺骗、操纵或伤害他人的意图。
- 连贯性检查:判断文章内容是否逻辑连贯,信息传达清晰
- 正确性检查:判断文章中的信息是否准确无误
- 简洁性检查:判断文章内容是否简洁明了,没有冗长和不必要的信息
Summarization Score(总结能力评分)
在RAG系统中,假如将 top k 设置为 5,那么通常会召回 5 个相关的知识片段。这些召回的知识片段会作为上下文的一部分全部传递给大语言模型。大语言模型会利用这些上下文信息来生成更准确和相关的回答。所以召回的内容进行总结的好坏也会影响最终输出的效果,好的总结应该包含原文中的所有重要信息,这个指标就是用来评估这个能力。实现思路如下:
- 首先从原文中提取出一组重要的关键词或关键短语。
- 然后基于这些关键词生成一组问题。
- 接着将这些问题应用到总结中,检查总结能否正确回答这些问题。
- 最后计算正确回答的问题数与总问题数的比值。
借用官网的例子:
Summary: JPMorgan Chase & Co. is an American multinational finance company headquartered in New York City. It is the largest bank in the United States and the world’s largest by market capitalization as of 2023. Founded in 1799, it is a major provider of investment banking services, with US$3.9 trillion in total assets, and ranked #1 in the Forbes Global 2000 ranking in 2023.
Questions: [
“Is JPMorgan Chase & Co. an American multinational finance company?”,
“Is JPMorgan Chase & Co. headquartered in New York City?”,
“Is JPMorgan Chase & Co. the largest bank in the United States?”,
“Is JPMorgan Chase & Co. the world’s largest bank by market capitalization as of 2023?”,
“Is JPMorgan Chase & Co. considered systemically important by the Financial Stability Board?”,
“Was JPMorgan Chase & Co. founded in 1799 as the Chase Manhattan Company?”,
“Is JPMorgan Chase & Co. a major provider of investment banking services?”,
“Is JPMorgan Chase & Co. the fifth-largest bank in the world by assets?”,
“Does JPMorgan Chase & Co. operate the largest investment bank by revenue?”,
“Was JPMorgan Chase & Co. ranked #1 in the Forbes Global 2000 ranking?”,
“Does JPMorgan Chase & Co. provide investment banking services?”,
]
Answers: [“0”, “1”, “1”, “1”, “0”, “0”, “1”, “1”, “1”, “1”, “1”]
最后我们把RAGAS体系的指标做一个总结:
评估召回能力,关系到检索策略、chunk策略:
Context Precision
Context Recall
Context entities recall
基于上下文的回答回答准确率,关系到大模型的指令跟随能力:
Faithfulness
Answer Relevancy
Answer Semantic Similarity
context-answer
Answer Correctness
Aspect Critique
Summarization Score
不依赖上下文也可以评估的指标:
Answer semantic similarity
Answer Correctness
Aspect Critique
Answer Relevance
上述内容结合了项目官网和个人的理解,如果理解错误的地方欢迎指正交流,后续文章后会接着介绍其他的RAG评估框架,敬请关注。