一.RAG系统评估工具
目标
- 了解RAG系统评估的指标
- 掌握RAGAS框架的原理和使用方式
1.概述
当为某个真实线上系统开发了检索增强生成 (RAG) 应用,那么在此应用正式上线提供服务前,需要评估 RAG 的表现到底是怎样的,如果发现现有的 RAG 效果不够理想,可能需要一些新的 RAG 算法流程来改进,在这之前,就需要对 RAG 流程进行评估,得到评估指标,然后才能进行自动化对比,观察改进的流程是否真的有效
2.RAGAS评估框架
- RAGAS (Retrieval Augmented Generation Assessment)一般称为 Automated Evaluation of Retrieval Augmented Generation,即检索增强生成的自动评估,Ragas是一个大模型评测框架,可以评估检索增强生成(RAG)的效果,帮助分析模型的输出,了解模型在给定任务上的表现
- Github地址: https://github.com/explodinggradients/ragas
- RAGAS的评估主要基于两个方向:
- 检索部分
- 生成部分
那么针对不同的部分评估的指标也会有所区分,下面将分别介绍RAGAS评估框架所需的数据,评估指标,实际用例等
(1).数据说明
最开始的 RAGAs 在评估数据集时,不必依赖人工标注的标准答案,而是通过底层的大语言模型 (LLM) 来进行评估,所以只需要一个带有问题-答案对的评估数据集(QA 对),如:https://huggingface.co/datasets/m-ric/huggingface_doc 具体数据字段格式:
- question:作为 RAG 管道输入的用户查询,输入
- answer:从 RAG 管道生成的答案,输出
- contexts:从用于回答question外部知识源中检索的上下文
- ground_truths:question的基本事实答案,这是唯一人工注释的信息
(2).评估指标
- 评估检索(context)的指标:提供了上下文相关性(context_relevancy)和上下文召回率(context_recall),这些可以衡量检索系统的性能,即检索的段落是否相关
- 评估生成(answer)的指标:提供了忠实度(faithfulness),用以衡量生成的信息是否准确无误;以及答案相关性(answer_relevancy),用以衡量答案对问题的切题程度,即模型生成的答案是否恰当
1).上下文相关性 (context relevance)
- 作用:量化检索结果与问题的匹配度,比率越高,表示检索到的上下文与问题的相关性越强
比率越高,表示检索到的上下文与问题的相关性越强
实现方式:
为了估算上下文的相关性,用LLM从上下文 C(q) 中抽取对回答问题 q 至关重要的句子 S。提取的prompt如下:
请从提供的{上下文}中提取可能有助于回答以下{问题}的相关句子。 如果没有找到相关句子,或者你认为问题无法从给定上下文中得到回答, 则返回短语“信息不足”。 在提取候选句子时,你不得更改给定上下文中的句子。然后,在RAGAS中,通过下面的公式计算相关性:
案例:
问题:
“如何防御SQL注入?”
检索上下文: 66.7% -> 至少85%
[①“输入过滤特殊字符(如单引号)”, ②“使用PreparedStatement预编译SQL”, ③“Redis缓存穿透解决方案”(无关噪声)]
2).上下文召回率 (context recall)
作用:衡量检索到的上下文(contexts)与真实答案(ground_truths)的匹配程度(评估检索是否覆盖问题所需全部关键点)
该指标通过问题、标注答案和检索到的上下文计算,分数范围在0到1之间,得分越高表示性能更好
要从真实答案中估计上下文召回率,需要分析真实答案中的每个声明(claim),以确定它是否可以归因于检索到的上下文,理想情况下,真实答案中的所有声明都应可归因于检索到的上下文
实现方式:
假设真实答案(Reference Answer)为: 真实答案: “2010年世界杯的冠军是西班牙。” “西班牙在决赛中以1-0击败了荷兰。” RAG检索到的上下文(Retrieved Context)为: 检索到的上下文: “西班牙在2010年世界杯的决赛中击败了荷兰。” “2010年世界杯的冠军是西班牙,西班牙队首次赢得世界杯。” 步骤具体实施: 声明1: "2010年世界杯的冠军是西班牙。" 输入给GPT-3.5:检索到的上下文 + 声明1。 GPT-3.5检查上下文是否包含“2010年世界杯的冠军是西班牙”。 结果:GPT-3.5发现上下文包含该信息,因此该声明“召回”。 声明2: "西班牙在决赛中以1-0击败