利用数据库过滤和元数据提取提升多跳查询的RAG性能

人工智能咨询培训老师叶梓 转载标明出处

大模型在处理需要从多个文档中检索和推理信息的多跳查询时,常常表现不佳,因为它们需要从多个来源检索和推理证据。图1展示了一个简单的RAG实现用于MultiHop-RAG查询。图中显示了用户查询、嵌入向量数据库、提示(Prompt)、查询上下文、错误响应的LLM、新闻文章以及从不同来源(Engadget、The Verge、BBC、CNN)的文章块。

为了解决这一问题,来自基辅-莫希拉国立大学的研究者提出了一种名为Multi-Meta-RAG的新方法,该方法通过使用数据库过滤和从LLM提取的元数据来改进检索增强生成(RAG)模型,从而更准确地选择与问题相关的文档。

想要掌握如何将大模型的力量发挥到极致吗?2024年10月26日叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。

留言“参加”即可来叶老师的直播间互动,1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。互动交流,畅谈工作中遇到的实际问题。

方法

Multi-Meta-RAG 的核心在于从查询中提取元数据以构建数据库查询过滤器。这一过程通过辅助大模型完成,它通过少量示例提示(few-shot prompt)来学习如何从查询中提取文章来源和发布日期等信息。

表1展示了几个查询及其对应的提取过滤器示例。例如,对于查询“TechCrunch的文章是否报道了Starz的新招聘,而Engadget的文章是否讨论了整个视频游戏行业的裁员?”提取的过滤器为{"source": {"$in": ["TechCrunch", "Engadget"]}}。这表明系统能够理解查询要求从特定的新闻来源中检索信息。值得注意的是,对于最后一个示例查询,正确使用了$nin操作符来排除特定来源TechCrunch。

这一步骤仅使用ChatGPT3执行,因为这一额外的RAG流程步骤必须快速且成本低廉。平均而言,这一步骤对于单个查询需要0.7秒。大多数查询都提取了来源过滤器,而发布日期过滤器则在15.57%的查询中被提取,尽管22.81%的MultiHop-RAG数据集中的查询是时间性的。

提取的元数据被用于增强RAG应用的性能,如图2Multi-Meta-RAG的工作流程所示。文章中的知识库文章被分割成包含256个token的块,使用LLamaIndex进行分割,并采用句子分割器,正如原始MultiHop-RAG实现中所做的。此外,选择了32的块重叠度,发现较小的块重叠度可以比原始实现中使用的LLamaIndex默认值200获得更好的top-K选择中独特块的多样性。

选择了LangChain Neo4j向量存储作为向量数据库,因为其索引实现最近开始支持元数据过滤。然后,使用嵌入模型将块转换并保存嵌入到向量数据库中,并将文章元数据保存为节点属性。在检索阶段,使用相同的嵌入模型转换查询,并检索与查询嵌入具有最高余弦相似度的top-K最相关块。同时,在相同的阶段使用大模型提取的元数据过滤块。与MultiHop-RAG类似,使用重排模块(bge-reranker-large)来检查检索性能。在使用嵌入模型和元数据过滤器检索了20个相应块之后,我们使用重排器选择top-K块。

通过这种方法,Multi-Meta-RAG 显著提高了在多跳查询中的RAG选择相关文档的性能,从而提高了对复杂查询的响应准确性。

实验

研究者选取了两种性能最优的嵌入模型bgelarge-en-v1.5和voyage-02,用以测试元数据过滤对块检索性能的影响。在这些实验中,检索得到的块列表与每个查询相关的ground truth evidence进行了比较,排除了那些缺乏对应证据的null查询。实验评估了Top-K块的检索情况,并采用了以下指标:

  • Mean Average Precision at K (MAP@K):衡量所有查询中Top-K检索结果的平均精度。
  • Mean Reciprocal Rank at K (MRR@K):计算每个查询在Top-K检索结果中第一个相关块的平均倒数排名。
  • Hit Rate at K (Hit@K):衡量在Top-K检索结果中出现的证据比例。

实验结果(表2)表明,两种嵌入模型在所有核心指标上相较基线RAG均有显著提升:MRR@10、MAP@10、Hits@10和Hits@4。特别是对于voyage-02模型,Hits@4指标提升了17.2%。这一改进对于实际的RAG系统至关重要,因为检索到的Top-K结果数量应尽可能少,以适应上下文窗口限制和成本考量。

表3展示了使用MultiHop-RAG的LLM(GPT4和Google PaLM)的整体生成准确性。与基线RAG相比,两种模型的准确性都有显著提升。Google PaLM的准确性提高了25.6%,从0.47提升至0.608。GPT-4的结果也显示了7.89%的增长,从0.56提升至0.63。准确性是通过检查LLM生成的响应中的任何词是否出现在每个问题的正确答案中来计算的。

表4进一步细分了不同问题类型的LLM在MultiHop-RAG中的生成准确性。两种模型在推理查询中都取得了超过0.9的显著分数。Google PaLM在比较和时间查询方面的表现明显优于GPT-4。然而,PaLM在处理Null问题时表现挣扎,而GPT-4几乎达到了完美的分数。这些结果表明,结合两种模型处理不同查询可以是提高整体准确性的有效策略。

总体而言,Multi-Meta-RAG在块检索和LLM生成实验中均展现出显著的性能提升,与基线RAG相比,同时保持了方法的相对简单和可解释性。

论文链接:https://arxiv.org/pdf/2406.13213

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

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

相关文章

解决:git SSL certificate problem: unable to get local issuer certificate

在使用Git进行代码交流和版本控制过程中,可能会遇到SSL证书问题。这通常是由于Git客户端无法验证SSL证书的合法性而引起的。当我们尝试与Git服务器建立安全连接时,Git客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构(Certifi…

三数之和(15)

打回现实的一道题 思路:先将数组进行排序 遍历数组,使用left标记i1,right标记nums.length-1 如果三数之和(nums[i]nums[left]nums[right])大于0,right--,如果小于0,left 注意:1、使用set集合进行去重 2、找到…

链路分析对性能测试的意义

目录 一、白盒能力的提升 二、人员技术门槛的提升 链路分析的出现对测试工程师也带来了不同的影响,能实际提升测试工程师的分析能力,但是需要测试工程师具备主动的自我提升意识。 一、白盒能力的提升 传统的性能测试主要以TPS、响应时间、成功率等用户…

【工具】Ghidra|Ghidra 安装过程以及脚本运行方式

文章目录 前言安装 java下载 Ghidra打开 Ghidra 使用 Ghidra步骤 1:打开 Ghidra 并加载项目步骤 2:打开 Script Manager步骤 3:新建脚本并编写代码步骤 4:保存脚本步骤 5:运行脚本注意事项 前言 我的用途:…

【Prometheus】为Prometheus设置basic_auth访问权限

Prometheus目前已经成为国、内外互联网行业,一款非常知名的免费监控工具,我们可以通过它,以及Prometheus官方、第三方提供的一些exporter工具,对系统、中间件、数据库等一系列的软、硬件的运行数据,进行采集、存储、监…

【在Win11下安装ubuntu +图形化界面】

在win11下安装ubuntu 一、安装流程1. 前期准备:先配置好基础设置2. 安装 ubuntu3. ubuntu进行配置4. 下载图形化界面 并安装 二、遇到的问题问题1. win11安装wsl报错:无法解析服务器的名称或地址1. 方法一:更改DNS(对本人无效&…

Java8中Stream、Function、Opotions特性使用案例

所有数据都基于UserInfo类&#xff0c;其中包含了 userId、userName、course、score 等字段&#xff0c;下面是如何使用Options、 Stream 、Function来处理 UserInfo 对象列表的一些示例 List<UserInfo> userInfoList Arrays.asList(new UserInfo(1L, "Alice"…

闯关leetcode——206. Reverse Linked List

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/reverse-linked-list/ 内容 Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head [1,2,3,4,5] Output: [5,4,3,2,1] Example 2:…

【23CSPJ普及组】一元二次方程(uqe)

时间限制: 1000 ms 内存限制: 524288 KB 【题目描述】 众所周知&#xff0c;对一元二次方程 &#x1d44e;&#x1d44f;&#x1d465;&#x1d450;0,(&#x1d44e;≠0)&#xff0c;可以用以下方式求实数解&#xff1a; ∙∙ 计算 Δ−4ac&#xff0c;则: 1. 若 Δ&…

【功能介绍】在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在信创终端上查看系统的硬盘序列号以及USB设备的VID和PID的文章。在日常使用中&#xff0c;查看硬盘的序列号以及USB设备的VID&#xff08;…

电脑篇——Windows设置文件夹只读功能(高级篇)

使用背景&#xff1a; 某工厂产线上的Windows电脑里面有一些生产测试软件在指定的文件夹中&#xff08;下文中称为文件夹A&#xff09;。为了防止普通职工随意修改、删除、替换文件&#xff0c;对生产软件版本管控产生不可控因素&#xff0c;我们需要给文件夹A添加保护&#xf…

基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)

目录 1. 延迟关闭订单 1.1 订单延时关闭功能技术选型 1.1.1 定时任务 1.1.2 RabbitMQ 1.1.3 Redis 过期监听 1.1.4 Redisson 1.1.5 RocketMQ 1.2 RocketMQ订单延时关闭发送方实现 1.3 RocketMQ订单延时关闭的消费方实现 1. 延迟关闭订单 用户发起订单后&#xff0c;如…

2023 ICPC 亚洲澳门赛区赛 D. Graph of Maximum Degree 3

题目 题解 #include <bits/stdc.h> using namespace std; // #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long long #define pii pair<int, int> #defi…

Spring--4

SpringWeb 概念 是Spring框架的一个模块&#xff0c;基于Servlet的一个原始Web框架。 SpringWEB 运行流程 描述&#xff1a;前端用户请求发送的后端以后&#xff0c;先经过前端控制器DispatcherServlet(再次之前也可能有过滤器的存在)&#xff0c;经过前端控制器解析后&…

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装

一起搭WPF架构之LiveCharts.Wpf的简单了解与安装 前言LiveCharts.Wpf介绍LiveCharts.Wpf的安装总结 前言 根据项目需求&#xff0c;我单独留了一个界面用于进行数据分析。数据分析的内容考虑是采用图表的形式将SQLite数据库中存储的数据进行绘制成图&#xff0c;以便数据分析。…

第三十一篇:TCP协议如何解决丢包的问题,TCP系列六

前面我们说TCP协议是可靠的、基于字节流、面向连接的传输层通信协议&#xff1b; 这里我想换种说法&#xff1a;与其说是TCP协议是可靠的&#xff0c;不如说传输层程序软件实现了TCP协议的规范&#xff08;网络层次模型&#xff0c;每一层都有对应的程序软件&#xff09;&…

33 类与对象 · 下

目录 一、构造函数的深入 &#xff08;一&#xff09;构造函数的其他特点 &#xff08;二&#xff09;使用例 1、Date类与Time类显示写 2、Date类与Time类写一部分 &#xff08;三&#xff09;总结 &#xff08;四&#xff09;初始化顺序小题目 二、类型转化 &#xff…

【芯片设计】DC综合retiming策略的学习与实践

对于DC综合中的retiming策略早有耳闻&#xff0c;但是一直没有比较系统的学习和实验过&#xff0c;正好借着这次交付过程的归纳总结机会&#xff0c;把一些零零散散的收获学习记录下。 记得刚出新手村时和某位大佬聊到过&#xff0c;他说你逻辑里写了在某级计算一个结果&#…

UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑

TP_WeaponComponent.h 看看头文件 暴露了attach weapon和fire给蓝图 这两个函数意义一看名字吧&#xff0c;就是捡起来枪的时候执行&#xff0c;一个就是发射子弹的时候执行 #pragma once#include "CoreMinimal.h" #include "Components/SkeletalMeshComponen…