如果没有真实数据,如何评估 RAG

news/2024/9/26 21:21:57

当您有可以比较的真实数据时,评估检索-增强生成(RAG)模型要容易得多。但是如果你没有呢?这就是事情变得有点棘手的地方。然而,即使在缺乏基本事实的情况下,仍然有一些方法可以评估 RAG 系统的性能。下面,我们将介绍三种有效的策略,从零开始创建 ground truth 数据集的方法,当你确实拥有数据集时可以用来评估的指标,以及可以帮助你完成这一过程的现有框架。

RAG 评价有两种类型:检索评价和生成评价

下面的每个策略将被标记为检索评估、生成评估或兼顾两者。

如果没有真实数据,如何评估 RAG ?

向量相似度搜索阈值

类型:检索评价

如果您正在使用像 Pinecone 这样的矢量数据库,那么您可能对矢量相似性的概念很熟悉。本质上,数据库根据你查询的向量与潜在结果的向量的接近程度来检索信息。即使没有一个“正确”的答案来衡量,你仍然可以依靠余弦相似度等指标来衡量检索文档的质量。

余弦距离

例如,Pinecone 将返回余弦相似度值,显示每个结果与查询的接近程度。

#创建一个使用余弦相似度 pc 的 pinecone(向量数据库)索引。
create_index(
name=index_name,
dimension=2,
metric="cosine",
spec=ServerlessSpec(
cloud='aws',
region='us-east-1'
)
)
#检索最接近的前 3 个向量
query_results =index。query(
namespace="example-namespace1",
vector=[1.0, 1.5],
top_k=3,
include_values=True
)
# query_results
#这里的"score"是余弦相似度值
# {'matches': [{'id': 'vec1', 'score': 1.0, 'values': [1.0, 1.5]}
,# {'id': 'vec2', 'score': 0.868243158, 'values': [2.0, 1.0]}
,# {'id': 'vec3', 'score': 0.850068152, 'values': [0.1, 3.0]}],

通过暴露相似度分数,您可以对检索到的文档设置及格或不及格的分数。较高的阈值(如 0.8 或更高)意味着有更严格的要求,而较低的阈值将带来更多的数据,这可能是有帮助的,也可能只是嘈杂的。

这个过程并不是要马上找到一个完美的数字——这是一个反复试验的过程。当结果始终对我们的特定应用程序有用时,我们就知道我们是否已经达到了最佳点。

使用多个LLM来判断反应

类型:检索+生成评价

评估 RAG 系统的另一种创造性方法是利用多个LLM来判断响应。即使LLM不能在缺乏真实数据的情况下提供完美的答案,你仍然可以使用他们的反馈来比较回答的质量。

通过比较不同 llm 的响应并查看它们是如何排序的,您可以衡量检索和代的总体质量。这不是完美的,但它是一种创造性的方式,可以从多个角度了解系统输出的质量。

human -in- loop 反馈:让专家参与

类型:检索+生成评估

有时候,评估一个系统的最佳方式是老式的方式——通过询问人类的判断。

从领域专家那里获得反馈可以提供即使是最好的模型也无法比拟的见解。

设置评级标准

为了使人类的反馈更加可靠,它有助于建立清晰一致的评级标准。你可以让你的评论者对以下内容进行评价:

  • 相关性:检索的信息是否针对查询?(检索评价)
  • 正确性:内容是否事实准确?(检索评价)
  • 流畅度:是否好吗,还是觉得别扭或勉强?(一代评估)
  • 完整性:它是否完全覆盖了问题或留下空白(检索+生成评估)

有了这些标准,你可以对你的系统的表现有一个更结构化的感觉。

获得基线

评估人工反馈质量的一个聪明方法是检查不同的评论者之间的意见是否一致。您可以使用皮尔逊相关性等指标来查看他们的判断是否一致。如果你的审稿人意见不一致,这可能意味着你的标准不够清晰。这也可能是一个信号,表明这个任务比你预期的更主观。

皮尔逊相关系数

减少噪音

人类的反馈可能是嘈杂的,尤其是在标准不明确或任务是主观的情况下。

这里有几个方法可以解决这个问题:

  • 平均分数:通过平均多个人类评论者的评分,您可以消除任何个人偏见或不一致。
  • 关注一致性:另一种方法是只考虑审稿人同意的情况。这将给你一个更清晰的评估集,并有助于确保你反馈的质量。

从头开始创建 Ground Truth Dataset

在评估没有 ground truth 数据的 RAG 系统时,另一种方法是创建自己的数据集。这听起来很吓人,但有几种策略可以让这个过程变得更容易,从寻找相似的数据集到利用人类反馈,甚至是综合生成数据。让我们来分析一下如何做到这一点。

在线查找相似的数据集

这似乎是显而易见的,大多数得出结论认为他们没有地面真实数据集的人已经用尽了这个选择。但仍然值得一提的是,可能存在与你需要的数据集相似的数据集。也许它与你的用例在不同的业务领域,但它是你正在使用的问答格式。像 Kaggle 这样的网站有各种各样的公共数据集,你可能会惊讶于有多少与你的问题空间一致。

例子:

  • 斯坦福问答数据集
  • 亚马逊问答数据集

手动创建地面真实数据

如果你在网上找不到你需要的东西,你总是可以手动创建地面真值数据。这就是“人在循环”反馈派上用场的地方。还记得我们之前谈到的领域专家反馈吗?你可以利用这些反馈来构建你自己的迷你数据集。

通过策划一组人工审查的示例——其中结果的相关性、正确性和完整性已经得到验证——你为扩展数据集进行评估奠定了基础。

Katherine Munro 也有一篇很棒的文章,是关于敏捷聊天机器人开发的实验

方法。

训练一个 LLM 作为judge

一旦你有了最小的基础真值数据集,你就可以更进一步,训练一个 LLM 作为judge来评估你的模型的输出。

但在依靠 LLM 作为judge之前,我们首先需要确保它对我们的模型输出进行了准确的评级,或者至少是可靠的。以下是如何实现这一目标:

  1. 构建人工审核的示例:根据你的用例,20 到 30 个示例应该足够好,可以很好地了解 LLM 相比之下有多可靠。参考上一节关于评价的最佳标准以及如何衡量相互冲突的评价。
  2. 创建你的LLM评审:提示LLM根据你交给领域专家的相同标准给出评级。拿着这个评分,比较LLM的评分与人类的评分是如何一致的。同样,你可以使用像皮尔逊指标这样的指标来帮助评估。高相关性分数将表明 LLM 的表现与judge一样好。
  3. 应用即时工程最佳实践:即时工程可以成就或破坏这个过程。使用上下文预热 LLM 或提供一些示例(few-shot learning)等技术可以显着提高模型在判断时的准确性。

创建特定的数据集

另一种提高基础真实数据集质量和数量的方法是将文档分割成主题或语义组。与其将整个文档作为一个整体来看,不如将它们分解成更小、更集中的部分。

例如,假设你有一个文档(documentId: 123),其中提到:

“在推出产品 ABC 后,XYZ 公司在 2024 年第一季度的收入增长了 10%。”

这句话包含了两个不同的信息:

  1. 推出产品 ABC
  2. 2024 年第一季度收入增长 10%

现在,你可以将每个主题扩展到自己的查询和上下文中。例如:

  • 问题 1:“XYZ 公司推出了什么产品?”
  • 背景 1:“启动产品 ABC”
  • 问题 2:“2024 年 Q1 营收的变化是什么?”
  • 背景 2:“XYZ 公司 2024 年第一季度的收入增长了 10%”

通过将数据分解成这样的特定主题,你不仅可以为训练创造更多的数据点,还可以使你的数据集更加精确和集中。另外,如果你想将每个查询追溯回原始文档以提高可靠性,你可以很容易地为每个上下文段添加元数据。例如:

  • 问题 1:“XYZ 公司推出了什么产品?”
  • 上下文 1:“启动产品 ABC(文档 id: 123)”
  • 问题 2:“2024 年第一季度的收入变化是什么?”
  • 背景 2:“XYZ 公司在 2024 年第一季度的收入增长了 10%(文档 id: 123)”

这样,每个细分都被绑定回其来源,使您的数据集对评估和训练更有用。

综合创建一个数据集

如果所有这些方法都失败了,或者如果您需要的数据多于手动收集的数据,那么合成数据生成可以改变游戏规则。使用数据增强甚至 GPT 模型等技术,您可以根据现有示例创建新的数据点。例如,你可以采用一组基本的查询和上下文,并稍微调整它们以创建变化。

例如,从这个查询开始:

  • “XYZ 公司推出了什么产品?”

你可以合成如下的变体:

  • “XYZ 公司推出了什么产品?”
  • “XYZ 公司推出的产品叫什么名字?”

这可以帮助您构建更大的数据集,而无需从头开始编写新示例的手动开销。

还有一些框架可以自动为你生成合成数据的过程,我们将在最后一节探讨。

一旦你有了一个数据集:是时候评估了

现在你已经收集或创建了你的数据集,是时候进入评估阶段了。RAG 模型涉及两个关键领域:检索和生成。两者都很重要,了解如何评估每一个将有助于你微调你的模型,以更好地满足你的需求。

评估检索:检索数据的相关性如何?

RAG 中的检索步骤是至关重要的—如果您的模型不能提取正确的信息,它将难以生成准确的响应。以下是你需要关注的两个关键指标:

  • 上下文相关性:这衡量了检索到的上下文与查询的一致性。从本质上讲,你是在问:这些信息是否与所问的问题有关?你可以使用你的数据集来计算相关性分数,要么通过人工判断,要么通过比较查询和检索文档之间的相似度指标(如余弦相似度)。
  • 上下文召回(Context Recall):上下文召回关注的是检索到多少相关信息。有可能是提取了正确的文档,但只包含了部分必要的信息。为了评估召回率,你需要检查你的模型提取的上下文是否包含了所有的关键信息片段,以完全回答查询。理想情况下,你想要高召回率:你的检索应该抓住你需要的信息,不应该留下任何关键信息。

评估生成:是否反应既准确又有用?

一旦检索到正确的信息,下一步就是生成一个响应,该响应不仅要回答查询,而且要忠实而清晰。以下是需要评估的两个关键方面:

  1. 忠实度:这度量生成的响应是否准确地反映了检索到的上下文。从本质上讲,你想要避免幻觉——在这种幻觉中,模型会编造出检索数据中没

有的信息。忠实是指确保答案建立在模型检索到的文档所呈现的事实基础上。

  1. 答案相关度:这是指生成的答案与查询的匹配程度。即使信息忠实于检索到的上下文,它仍然需要与被询问的问题相关。你不希望你的模型提取出正确的信息,而这些信息并不能完全回答用户的问题。

进行加权评估

一旦你评估了检索和生成,你可以更进一步,以加权的方式结合这些评估。也许你更关心相关性而不是召回,或者忠诚是你的首要任务。您可以根据您的具体用例为每个指标分配不同的权重。

例如:

  • 检索:60%上下文相关性+ 40%上下文召回
  • 生成:70%忠实度+ 30%答案相关性

这种加权评估让你可以灵活地优先考虑对你的应用程序最重要的东西。如果你的模型需要 100%的事实准确性(比如在法律或医疗环境中),你可能会更重视忠诚度。另一方面,如果完整性更重要,你可能会关注回忆。

简化评估过程的现有框架

如果创建自己的评估系统让你感到不知所措,不要担心——有一些很棒的现有框架已经为你做了很多繁重的工作。这些框架附带了专门为评估 RAG 系统而设计的内置指标,使评估检索和生成性能变得更加容易。让我们来看看其中最有用的几个。

RAGAS(检索-增强生成评估)

RAGAS 是一个专门构建的框架,用于评估 RAG 模型的性能。它包括评估检索和生成的指标,提供了一种全面的方法来衡量您的系统在每个步骤中的表现。它还通过采用进化生成范式提供综合测试数据生成。

受 evolution<a href="https://">- instruct 等作品的启发,Ragas 通过采用进化生成范式实现了这一目标,在该范式中,具有不同特征的问

题(如推理、条件反射、多上下文等)从提供的文档集中系统地制作出来。- RAGAS 文档

ARES:使用合成数据和 LLM 判断的开源框架

ARES 是另一个强大的工具,它结合了合成数据生成和基于LLM的评估。ARES 使用合成数据——由人工智能模型生成的数据,而不是从现实世界的交互中收集的数据——来构建一个可用于测试和改进 RAG 系统的数据集。

该框架还包括一个 LLM 判断器,正如我们之前讨论的那样,它可以通过将模型输出与人类注释或其他参考数据进行比较来帮助评估模型输出。

结论

即使没有真实数据,这些策略也可以帮助您有效地评估 RAG 系统。无论你是使用向量相似阈值、多个 llm、LLM-as-a-judge、检索指标还是框架,每种方法都为你提供了一种衡量性能和改进模型结果的方法。关键是找到最适合您特定需求的方法-并且不要害怕在此过程中进行调整。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

一些历史遗留问题(确信)

由于之前一直在语雀上做笔记,但是语雀的笔记直接移植到博客园上好麻烦,在这里直接贴上语雀的链接,可以点进去链接查看之前的笔记( https://www.yuque.com/u41076977/kuw531?# 《PWN》

WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!

前言 今天大姚给大家分享一套基于.NET 8.0 + LayUI的快速开发框架,项目完全开源、免费(MIT License)且开箱即用:WaterCloud。可完全实现二次开发让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。项目介绍 WaterCloud是一套基于ASP…

HuggingChat macOS 版现已发布

Hugging Face 的开源聊天应用程序 Hugging Chat,现已推出适用于 macOS 的版本。主要特点 Hugging Chat macOS 版本具有以下亮点:强大的模型支持: 用户可以一键访问多个顶尖的开源大语言模型,包括 Qwen 2.5 72B、Command R+、Phi 3.5、Mistral 12B 等等; 丰富的功能: 应用内置…

Setup Factory API

SetupFactory中可以通过其API控制很复杂的业务需求。下图中展示了其内置的API种类与具体分类函数。序号API名称 API说明1 Application.Exit 退出安装程序,并返回一个可选的返回代码2 Application.GetInstallLanguage 返回一个包含当前安装语言的表格3 Application.GetLastErro…

使用duxapp开发 React Native App 事半功倍

Taro的React Native端开发提供了两种开发方式,一种是将壳和代码分离,一种是将壳和代码合并在一起开发壳是用来打包调试版或者发版安装包使用的 代码是运行在壳上的js代码 Taro壳子的代码仓库https://github.com/NervJS/taro-native-shellduxapp中更进一步,你不需要太关注壳子…

package.json依赖包漏洞之nodejs-glob-parent正则表达式拒绝服务漏洞

背景 有个安全扫描的流水线,扫描了负责的项目之后,发现一些漏洞。 需要说明的是,这个扫描只是针对package.json文件,扫的是依赖树,而不是项目源代码,也不是打包后的代码。 但既然是漏洞,都是可以好好学习下的。nodejs-glob-parent正则表达式拒绝服务漏洞(CVE-2020-28469…

[转]线性代数库介绍

1、BLAS基础线性代数程序集(Basic Linear Algebra Subprograms),基于Fortran实现的基本向量乘法,矩阵乘法的一种科学计算函数库,也是一组向量和矩阵运行的接口规范标淮,规范向量之间的乘法、矩阵之间的乘法等,BLAS实际上是将复杂的矩阵、向量运算简化成类似加减乘法一样…

资本(生成函数)

$\quad $ 其中 $n\le 1e3 $ 、$ m\le 1e9 $ 、 $ T\le 10 $。 $\quad $ 这是一个排列问题,所以我们可以考虑指数型生成函数,这里我们称 \(x ^n\) 的系数为 \(\frac{x ^n}{n!}\) 之前的系数,下文记作 \([x ^n]\) 。 $\quad $ 我们定义函数 \(f _{k}(x)=\sum _{n=0}^{k}\frac{…