RAG 评估框架 -- RAGAS

原文

引入 RAG(Retrieval Augmented Generation)的原因

随着ChatGPT的推出,很多人都理所当然直接用LLM当作知识库回答问题。这种想法有两个明显的缺点:

  • LLM无法得知在训练之后所发生的事情,因此无法回答相关的问题
  • 存在一些专业知识,LLM在训练的时候并没有涉及,或者缺少相关的专业知识。

在这种情况下,RAG 被提出来解决上述的问题。RAG 的基本框架包括:

  • Retriever:用于从参考文献中获取相关的背景知识。
  • Generator:一般是用一个 LLM 充当这个角色,通过 retriever 拿回来的信息回答用户的提问。

虽然 RAG 的实用性显而易见,但是由于其性能受到多方面因素的影响(例如,参考语料,LLM的性能,Prompt等),想达到一个良好的表现需要大量的调整。因此如何评判 RAG system 的就成为一个非常重要的问题。

已有方法

已有的方法一般都基于两个方面来评估RAG系统:

利用 LLMs 来评估 faithfulness

具有代表性的是 Azaira 等人 提出根据 LLM 的隐藏层权重训练分类器,用于判断 statement 是否为真。虽然这个表现非常不过,但是对于只提供了 API 的LLM 模型并不适用(例如,ChatGPT)。

为解决上述这个问题,Manakul 等人提出一个名为 SelfCheckGPT 的模型。其核心思想是当真实的答案更加稳定。当答案是事实答案时,则不同样本的采样结果更相似,而如果是幻觉的答案则会趋于不相似。

文本生成系统的自动评估

具有代表性的工作是 Fu 等人使用指定所考虑的方面的 prompt,然后根据给定的自回归语言模型,基于生成的令牌的平均概率对段落进行评分。

另外一个工作是 Wang等人提出让 ChatGPT 直接在某个特定方面评估答案的分数(0~100或者5星评分)。这种方法虽然可以获得较为满意结果,但是对于 Prompt 的依赖程度非常高。

RAGAS 评估方法

Setting

  • 问题 q q q
  • 检索回来的信息,即上下文 c ( q ) c(q) c(q)
  • 根据检索回来的信息产生的答案 a s ( q ) a_s(q) as(q)

对于一个 RAG system 的评估需要考虑一下三个方面:

  • Faithfulness: 给出的答案应该是以给定上下文为基础生成的。
  • Answer Relevance:生成的答案应该解决提出的实际问题。
  • Context Relevance:检索回来的信息应该是高度集中的,尽量少的包含不相关信息。

Faithfulness

判断标准:当答案中的内容是从上下文中推导得到,那么答案 a s ( q ) a_s(q) as(q)是忠于上下文 c ( q ) c(q) c(q)

为评估 faithfulness,作者使用 LLM 来抽取一系列的 statements S ( a s ( q ) ) S(a_s(q)) S(as(q)),其目的是在于将较长的句子拆分为公断更集中的断言。Prompt 如下:
在这里插入图片描述
其中 “question” 和 “answer” 是指给定的提问和答案。对于每一个 statement 而言,LLM 会使用验证函数 v ( s i , c ( q ) ) v(s_i,c(q)) v(si,c(q)) 判断 c ( q ) c(q) c(q) 是否可以得到 s i s_i si。具体的验证 prompt 如下:
在这里插入图片描述
最终的分数 F = ∣ V ∣ ∣ S ∣ F=\frac{|V|}{|S|} F=SV

Answer relevance

判断标准:如果答案用适当的方式直接解决了问题,那么答案 a s ( q ) a_s(q) as(q) 是相关的。
PS. 需要注意的是,这里特别地没有考虑答案的事实性,而是只考虑了答案是否完成或者是否包含了冗余信息。

为了评估 answer relevance,对于给定的答案 a s ( q ) a_s(q) as(q),作者使用如下的 prompt,让 LLM 生成了可能的潜在问题 q i q_i qi
在这里插入图片描述
对于每一个 q i q_i qi,都会用余弦相似度来度量原始问题和潜在问题 embedding (使用的 text embedding ada 002 API)的相似度 s i m ( q , q i ) sim(q, q_i) sim(q,qi)。最终会用 AR (answer relevance score) A R = 1 n ∑ i = 1 n s i m ( q , q i ) AR=\frac{1}{n}\sum_{i=1}^{n}sim(q,q_i) AR=n1i=1nsim(q,qi) 来评估生成的答案与原始问题的一致性。

Context relevance

判断标准:如果上下文只包含回答问题所需要的内容,那么上下文 c q c_q cq 是相关的。
PS.目的是为了惩罚上下文存在冗余信息。

为了评估 context relevance,在给定问题 q q q 和其上下文 c ( q ) c(q) c(q) ,LLM 会使用如下的 prompt 从 c ( q ) c(q) c(q) 中提取对问题 q q q 至关重要的语句 S e x t S_{ext} Sext :
在这里插入图片描述
最终 CR(context relevance score)为 C R = number of extrated sentences total number of sentences in c ( q ) CR=\frac{\text{number of extrated sentences}}{\text{total number of sentences in}\quad c(q)} CR=total number of sentences inc(q)number of extrated sentences

实验

作者为了评估该方法,构建一个名为 WikiEval 的数据集,每个样本是有人工注释的三元组 question-context-answer。表格1 展示了其结果,百分比表示的是模型所偏好的答案/上下文(即具有最高估计的忠实度、答案相关性或上下文相关性)与人类注释者所偏好的回答/上下文重合的频率。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始学习Python基础语法:打开编程大门的钥匙

文章目录 一、引言1.1 Python作为一种流行的编程语言的介绍1.2 Python的应用领域和适用性 二、为什么选择Python2.1 Python的简洁性和易读性2.2 Python的跨平台特性 三、Python在数据科学和人工智能领域的应用3.1 第一个Python程序3.1.1 Hello, World!:编写并运行你…

学习python仅此一篇就够了(内置模块)

内置模块 导入模块 import 关键字导入 --------- import math import 模块名称 as alias(别名) import hashlib as h (给hashlib起别名) from 包 import 模块名称 random模块 该模块主要用来产生随机数(伪随机数,计算机产生不了真正的随机数,是依…

统信UOS_麒麟KYLINOS上使用Remmina远程Windows并传输文件

原文链接:统信UOS/麒麟KYLINOS上使用Remmina远程Windows并传输文件 hello,大家好啊!继之前我们讨论了在统信UOS/麒麟KYLINOS与Windows之间通过Open SSH实现文件传输之后,今天我要给大家带来的是如何使用Remmina软件在统信UOS/麒麟…

第二百六十五回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Flutter中如何使用三方包相关的内容,本章回中将介绍Widget的生命周期.闲话休提,让我们一起Talk Flutter吧。 概念介绍 本章回中介绍的生命周期是指Widget从创建到结果的整个过程,这…

12.2内核空间基于SPI总线的OLED驱动

在内核空间编写SPI设备驱动的要点 在SPI总线控制器的设备树节点下增加SPI设备的设备树节点,节点中必须包含 reg 属性、 compatible 属性、 spi-max-frequency 属性, reg 属性用于描述片选索引, compatible属性用于设备和驱动的匹配&#xff…

【数据结构】树和二叉树堆(基本概念介绍)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 前言 树的概念 树的常见名词 树与…

linux TIME_WAIT时间变短

在Linux中,TIME_WAIT状态表示TCP连接已经关闭但还未完全清除的过程。默认情况下,TIME_WAIT状态会持续2分钟(120秒)以确保网络上没有重复的数据包被传输到错误的目标地址。 要将TIME_WAIT时间设置为更短的值,可以通过修…

2024.1.14每日一题

LeetCode 83.删除排序链表中的重复元素 83. 删除排序链表中的重复元素 - 力扣(LeetCode) 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输…

手把手教你学会接口自动化系列十-将用例写在json中,持久化管理起来上

我们之前写的把url,登录都封装了,但是用例的数据怎么用其他文件管理起来,和代码分离呢?由次,我就行了json进行用例的管理。 从接口的角度我们分析,我们都知道接口请求有以下几方面: url method headers data 由次我将我的用例管理格式设置成下面的 {"url"…

关闭免费版pycharm社区版双击shift时出现的搜索框

Pycharm 在双击 shift 的时候总是弹出搜索框,但作为中国玩家,经常需要双击 shift 循环切换中英文。这就很困恼。 下面就解决这个问题。单独关闭双击shift的功能。 步骤 1.左上角 File -> Settings 2. 如图,输入‘advan’ 找到高级设置&…

基于AidLux的智慧教育版面分析应用

基于AidLux的智慧教育版面分析应用 1. Aidlux平台介绍 融合架构操作系统AidLux,可以为单一ARM设备同时提供Android和Linux运行环境,双系统既能独立使用又能相互通信。 非虚拟机方式实现双系统融合并行 同时拥有两个系统的完整用户体验无需重启即可在两个系统之间…

RibbonGroup 添加QRadioButton

RibbonGroup添加QRadioButton: QRadioButton * pRadio new QRadioButton(tr("Radio")); pRadio->setToolTip(tr("Radio")); groupClipboard->addWidget(pRadio); connect(pRadio, SIGNAL(clicked(…

扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论和应用

扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论、公式和应用 引言 卡尔曼滤波是一种广泛应用于估计动态系统状态的技术,但当系统的动态模型或测量模型是非线性的时候,传统的卡尔曼滤波方法就显得无能为力。扩展卡…

Ubuntu中用useradd创建用户后无法用su切换过去

原因: 没有设置密码,没有指定家目录和shell版本,就不能su切换到新用户 解决方法: su - root //切换到root权限 useradd -m -s /bin/bash node1 //-m自动创建home目录,-s指定shell版本 passwd node1 //设置密码 参考链…

springboot(ssm单位考勤系统 oa办公系统Java系统

springboot(ssm单位考勤系统 oa办公系统Java系统 开发语言:Java 框架:ssm/springboot vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7(或8.0) 数据库工…

【保姆级教程|YOLOv8添加注意力机制】【1】添加SEAttention注意力机制步骤详解、训练及推理使用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

SpringBoot+thymeleaf实战遇到的问题

目录 一、控制台: 二、数据库查询异常: 三、前后端错误校验 四、在serviceImp中需要添加一个eq条件,表示和数据库中的哪个字段进行比较,否则会查出所有数据,导致500 五、使用流转换数据更简洁 六、重复报错&…

动态规划篇-03:打家劫舍

198、打家劫舍 状态转移方程 base case 边界问题就是:走到最后一间房子门口也没抢,那么最终抢到的金额为0 明确状态 “原问题和子问题中会变化的变量” 抢到的金额数就是状态,因为随着在每一件房子门口做选择,抢到的金额数会随…

大模型训练营Day3 基于 InternLM 和 LangChain 搭建你的知识库 作业

本篇记录大模型训练营第三次的作业,属实是拖延症本症患者。 主要步骤前面的安装各种包和依赖如前面作业一样,按照文档操作即可: 再按照文档进行各种克隆,把知识库复制到本地: 复制粘贴操作文档中的构建向量数据库的文…

七:Day08_任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz。 建议: 单体项目架构使用…