RAG 评估框架 -- RAGAS

发布时间:2024年01月14日

原文

引入 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=n1?i=1n?sim(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 展示了其结果,百分比表示的是模型所偏好的答案/上下文(即具有最高估计的忠实度、答案相关性或上下文相关性)与人类注释者所偏好的回答/上下文重合的频率。
在这里插入图片描述

文章来源:https://blog.csdn.net/Anooyman/article/details/135581103
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。