RQ-RAG:提升检索增强生成模型的查询精炼能力

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

大模型在面对未见场景时,往往会产生不准确或虚构的回答,这限制了它们的实用性。为了解决这一问题,香港科技大学、香港理工大学和麻省理工学院的研究团队提出了一种名为RQ-RAG(Retrieval-Augmented Generation with Query Refinement)的方法,旨在通过检索增强生成(RAG)的方式,结合外部文档,提升模型对复杂查询的处理能力。

图 1 阐释了RQ-RAG模型的功能,这些功能使其能够根据查询的复杂性和需求,动态地执行搜索、改写、分解和消除歧义的操作。在“按需搜索”场景中,模型识别出何时直接回答用户,何时需要额外信息来辅助回答。“改写”功能允许模型针对含糊或复杂的查询,通过重构查询词来精确搜索意图。“分解”查询是指将复杂问题拆分成多个简单问题,分别检索,以构建全面的回答。最后,“消除歧义”确保模型能够理解并解决查询中的多义性问题,从而提供明确、准确的回答。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信提供直播链接:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
 

LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

方法

RQ-RAG有三个主要组成部分:数据集构建(Dataset Construction)、生成器训练(Generator Training)和采样策略(Sampling Strategies)。

数据集构建

数据集构建的过程旨在训练模型显式地精炼查询。这一过程包括生成精炼的搜索查询和基于检索到的信息制作响应。给定原始数据集中的输入输出对 (X_origin, Y_origin),目标是构建一个包含特殊标记的行动序列。这些特殊标记指定了精炼的类型(如重写、分解或消除歧义),并跟随特定的精炼查询,表示为 Q_i, _type,其中 'type' 指代精炼动作,'i' 指代迭代轮次。随后,检索顶部的 k 个文档,表示为 [D_i1, D_i2, ..., D_ik]。在最终迭代步骤中,基于上述上下文生成新的答案 Y_new。这一过程可以视为等式 1 所示的转换:

收集涵盖广泛场景的语料库至关重要,包括多轮对话、需要分解的查询以及需要消除歧义的查询。图 2 展示了数据构建的流程,特别是如何使用 ChatGPT 自动化注释过程,包括任务分类、使用预定义的提示模板生成精炼查询、从外部数据源检索信息,以及基于精炼查询和相应上下文生成更新的响应。流程如下:

  • 任务池(Task Pool):将任务分为多轮对话、需要分解的查询、需要消除歧义的查询。
  • 查询搜索(Query Searching):使用生成的查询检索相关上下文。
  • 回答模板(Answer Template)、分解模板(Decompose Template)、消除歧义模板(Disambiguate Template):基于检索到的上下文生成答案。

生成器训练

在注释训练语料后,可以使用它来以标准的自回归方式训练大型语言模型(LLM),目标是最大化似然 L,表示为等式 2:

其中 M 表示模型参数,D 是数据集,pM(y|q_1, d_1, ..., q_i, d_i, x) 是模型 M 在给定输入 x 和精炼查询 q_i 以及检索到的文档 d_i 的情况下生成响应 y 的概率。

采样策略

在推理时,模型可以选择重写、分解或消除歧义给定的查询,也可以选择直接生成响应。为此设计了一种树解码策略,以处理不同的查询精炼方法。但是,使用不同的查询进行搜索会得到不同的检索上下文,从而导致不同的最终答案。如何在这些轨迹中采样最合适的路径是系统中的关键部分。为此提出了三种不同的采样策略:

  • 基于困惑度(PPL Based Selection):选择总生成输出的困惑度最低的轨迹。
  • 基于置信度(Confidence Based Selection):选择对最终答案 Yfinal 置信度最高的轨迹。
  • 集成(Ensemble Based Selection):通过选择具有最高累积置信度分数的最终结果来集成最终结果。

此外还定义了系统的上限,即如果任何一条轨迹导致正确答案,则认为它是正确的。这些采样方法从 Wang et al. (2022) 和 Yao et al. (2024) 中获得灵感,但在两个关键方面有所不同:1、不使用更大的模型来评估生成轨迹的质量;2、不受最终答案属于固定选项集的限制。图 7 展示了不同采样策略的对比:

  • 基于困惑度的选择(PPL Based Selection)
  • 基于置信度的选择(Confidence Based Selection)
  • 集成选择(Ensemble Based Selection)

实验

RQ-RAG方法在问答(QA)任务中的有效性评估任务主要分为两类:单跳QA任务和多跳QA任务。实验涉及的单跳QA任务包括Arc-Challenge、PopQA和OpenbookQA,而多跳QA任务则包括HotpotQA、2WikiMultiHopQA和Musique。

研究者将RQ-RAG与多种基线模型进行了对比,这些基线模型分为两类:不使用检索的基线(直接回答问题,不利用外部数据库检索到的上下文)和使用检索的基线(在回答问题前先从外部资源检索相关上下文)。在这些设置中,对比了Llama2-7B及其Chat版本在零样本配置下的表现,以及这些模型在特定任务数据集(例如单跳QA任务的ARC_C和OBQA,多跳QA任务的HOTPOTQA、2WIKI和MUSIQUE)上的微调表现。此外,还与SAIL-7B和先前的最佳方法Self-RAG-7B进行了对比。

研究者发现RQ-RAG在单跳QA任务中显著优于各种基线模型。具体来说,在检索设置下,RQ-RAG比Llama2-7B(零样本)平均高出33.5%,突显了大型语言模型(LLMs)在处理检索到的上下文时面临的挑战。另外与特定任务监督模型和没有搜索增强中间步骤的精选数据集监督模型相比,RQ-RAG进一步超越了这些基线,证明了在训练中整合搜索增强步骤的附加价值。值得一提的是,RQ-RAG在仅有约40k训练数据的情况下,也超过了使用150k监督训练数据的Self-RAG,平均提高了1.9%。

表1展示了单跳QA任务的性能对比,其中包含了不同模型在ARC_C、POPQA和OBQA数据集上的表现。RQ-RAG在这些数据集上的表现均优于其他基线模型,包括在没有检索和有检索的设置下。

在多跳QA数据集上,RQ-RAG的表现同样出色,反映了与单跳QA场景中观察到的类似趋势。与零样本模型相比,无论是在特定数据集上训练还是在没有搜索增强步骤的精选数据集上训练,RQ-RAG的性能都有显著提升。这些基线模型没有赋予模型分解查询的能力,这是多跳场景中的关键技能,直接使用原始查询进行信息检索往往不够。与此相反,RQ-RAG的流程使模型能够自动优化查询,平均提升了22.6%。另外与使用ChatGPT作为底层语言模型的更强大的基线相比,RQ-RAG在多跳QA任务中的表现也显著优于Chain-of-Thought和Chain-of-Note方法。

表2展示了多跳QA任务的性能对比,其中包括了不同模型在HOTPOTQA、2WIKI和MUSIQUE数据集上的表现。RQ-RAG在这些数据集上的表现均优于其他基线模型。

在系统性能的上限方面,研究者通过考虑所有轨迹中的成功率来评估系统的上限,即任何导致正确答案的轨迹都被视为成功。这一全面的评估揭示了系统的高潜力上限,具体在ARC_C中达到76.8%,在POPQA中为65.6%,在OBQA中为84.0%,在HOTPOTQA中为80.5%,在2WIKI中为60.6%,在MUSIQUE中为54.5%。这些结果强调了系统优化查询和多次检索不同上下文的能力,从而增加了达到正确答案的可能性。

图3展示了不同采样策略在六项任务中的表现。研究者发现,对于单跳QA任务,基于置信度的策略通常表现最佳,而对于多跳QA任务,集成策略显示出更优越的性能。总体而言,基于困惑度的策略表现适中。

在答案再生方面,研究者探索了从数据集中保留原始答案比例的不同对性能的影响。实验结果显示,在HotpotQA上,完全重新生成的答案设置(0%保留)表现最佳。随着保留原始答案比例的增加,有效性显著下降,表明基于检索到的上下文重新生成答案是有益的策略。

在不同数据资源的鲁棒性方面,研究者发现使用不同的数据源对系统性能的影响很小。实验评估了系统在三个单跳QA任务中的表现,使用了DuckDuckGo、Wikipedia和Bing Search作为推理过程中的数据源。表3展示了不同检索源的性能对比,结果表明,与Self-RAG相比,RQ-RAG在数据源变化时表现出更大的鲁棒性。

这些结果证明了RQ-RAG在提升语言模型的检索和生成能力方面具有显著的效果。

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

项目链接:https://github.com/chanchimin/RQ-RAG

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

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

相关文章

被低估的SQL

SQL是现代数据库管理系统中不可或缺的一部分。尽管它的使用已十分普遍,但在数据处理领域,SQL的某些功能和潜力仍然被许多人低估。接下来,小编将与您一起,探讨SQL的一些被忽视的特性,揭示它在数据管理中的真正实力。 1.…

模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<、==、<=、>=、!=的运算符重载、赋值运算符(=)重载等的介绍

文章目录 前言一、 clear函数二、流提取(<<)和流插入(>>)运算符重载三、 >、<、、<、>、!的运算符重载四、赋值运算符&#xff08;&#xff09;重载总结 前言 模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<…

记一次导入dbf文件后数据为空问题的解决方法

前言 省流&#xff1a;这篇文章最终采用的是更换导出文件格式的方法&#xff0c;看到这里觉得方法不适用的小伙伴可以不用浪费几秒钟看完这篇文章哦。 问题描述 作者使用的是Navicat数据库管理工具&#xff0c;然后在将源数据库的数据表导出为dbf格式文件后&#xff0c;再将…

Linux进阶命令-echodatealias

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

JAVA中获取类的超类(父类)或接口的class类型

一、前言 这里所说的超类&#xff08;父类&#xff09;或接口&#xff0c;指的就是某个类继承了一个类或实现了N个接口。 比如ArrayList&#xff0c;它继承了一个类&#xff08; java. util. AbstractList<E> &#xff09;&#xff0c;这时候AbstractList就称为ArrayLi…

如何让人工智能训练更快

影响人工智能训练时间的因素 在深度学习训练中&#xff0c;训练时间的计算涉及到多个因素&#xff0c;包括 epoch 数、全局 batch size、微 batch size、计算设备数量等。下面是一个基本的公式来说明这些参数之间的关系&#xff08;注意&#xff0c;这只是一个基本的说明公式&…

ctfshow-文件包含

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…

Jmeter终极线程组“Ultimate Thread Group“如何使用?

1、安装,点击"选项"&#xff0c;再点击"Plugins Manager"&#xff0c;下载"Custom Thread Groups" 2、添加"jpgc - Ultimate Thread Group" 3、"jpgc - Ultimate Thread Group"使用

DC 板 boot 测 nor 兼容性记录(qspi )

DC 板 boot 测 nor 兼容性记录&#xff08;qspi &#xff09; 软件问题&#xff1a; 1、DC板在跑 qspi时&#xff0c;在跑ddr 初始化部分需要修改以下参数&#xff0c;否则会在fsbl stage1 或者 stage 3 出错。 Board配置选 ad101_v10&#xff1b; 2、由于socket与DC板接触可能…

【springboot】父子工程项目搭建

父工程创建 1.新建一个spring项目 2.选择合适的springboot版本&#xff0c;点击【完成】&#xff0c;即创建父工程完毕 3.删除父工程中无用文件&#xff1a;src 创建子工程模块 1.右键项目名->新建&#xff08;news&#xff09;->模块&#xff08;Module&#xff09;…

【linux-Day2】linux下的基本指令

【linux-Day2】linux下的基本指令 一键查看操作系统的重要地位linux下的基本指令&#x1f4e2;ls&#xff1a;显示当前目录下所有的子目录和文件&#x1f4e2;pwd&#xff1a;显示用户当前所在的目录&#xff0c;在windows中&#xff0c;相当于显示当前目录的绝对路径。&#x…

Oracle绑定变量窥视与自适应游标共享

一.Oracle的绑定变量窥视与自适应游标共享 创建test表&#xff0c;列status存在2个值&#xff0c;有数据倾斜&#xff0c;在列status create table test as select rownum id,DBMS_RANDOM.STRING(A,12) name,DECODE(MOD(ROWNUM,500),0,Inactive,Active) status from all_obj…

2024最新精选文章!分享5款论文ai生成软件

在2024年&#xff0c;AI论文生成软件的出现极大地提升了学术写作的效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。以下是五款值得推荐的AI论文生成软件&#xff0c;其中特别推荐千笔-AIPassPaper。 ### 千笔-AIPa…

【Jupyter Notebook】汉化

1.打开:Anaconda Prompt 2.输入:"activate Zhui01"(注意&#xff1a;Zhui01是刚创建的环境名字) activate Zhui01 3.输入:"pip install jupyterlab-language-pack-zh-CN" pip install jupyterlab-language-pack-zh-CN 4.打开:Jupyter Notebook 5.点击&q…

【稀疏矩阵】使用torch.sparse模块

文章目录 稀疏矩阵的格式coocsrcsc Construction of Sparse COO tensorsConstruction of CSR tensorsLinear Algebra operations&#xff08;稀疏与稠密之间混合运算&#xff09;Tensor methods and sparse&#xff08;与稀疏有关的tensor成员函数&#xff09;coo张量可用的ten…

E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串

1.题目 【问题描述】 “懒羊羊”字符串是一种特定类型的字符串&#xff0c;它由三个字符组成&#xff0c;具有以下特点: 1.字符串长度为 3. 2.包含两种不同的字母。 3.第二个字符和第三个字符相同 换句话说&#xff0c;“懒羊羊”字符串的形式应为 ABB&#xff0c;其中A和B是不…

Python去中心化身份验证指南

随着区块链技术的发展,去中心化身份验证系统成为了保护个人数据安全和确保数字身份不被篡改的重要工具。本文将介绍如何利用Python和区块链技术构建一个简单的去中心化身份验证系统,包括基本概念、实现步骤和代码示例。 什么是去中心化身份验证系统? 去中心化身份验证系统…

SpringBoot学习(8)RabbitMQ详解

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件最主要的作用是解耦&#xff0c;中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&…

【网易低代码】第3课,页面表格删除功能

你好&#xff01; 这是一个新课程 CodeWave网易低代码 通过自然语言交互式智能编程&#xff0c;同时利用机器学 习&#xff0c;帮助低代码开发者进一步降低使用门槛、提高应用开发效率 【网易低代码】第3课&#xff0c;页面表格删除功能 1.拖拽组件link链接到表格中&#xff0c…

一文读懂在线学习凸优化技术

一文读懂在线学习凸优化技术 在当今的数据驱动时代&#xff0c;机器学习算法已成为解决复杂问题的关键工具。在线学习凸优化作为机器学习中的一项核心技术&#xff0c;不仅在理论研究上具有重要意义&#xff0c;还在实际应用中展现出巨大的潜力。本文将深入浅出地介绍在线学习…