噪声的力量:重新定义 RAG 系统的检索

该文得到了一个反常识的结论,当无关的噪声文档放在正确的位置时,实际上有助于提高RAG的准确性。

摘要

检索增强生成(RAG)系统代表了传统大语言模型(大语言模型)的显着进步。 RAG系统通过整合通过信息检索(IR)阶段检索到的外部数据来增强其生成能力,克服了标准大语言模型受限于预训练知识和有限上下文窗口的局限性。 该领域的大多数研究主要集中在 RAG 系统内大语言模型的生成方面。 我们的研究通过彻底、批判性地分析 IR 组件对 RAG 系统的影响来填补这一空白。 本文分析了检索器应具备哪些特征才能有效制定 RAG 的提示,重点关注应检索的文档类型。 我们评估各种元素,例如文档与提示的相关性、它们的位置以及上下文中包含的数量。 除其他见解外,我们的研究结果表明,包含不相关的文档可以意外地将性能提高超过30% 的准确性,这与我们最初关于质量下降的假设相矛盾。 这些结果强调需要开发专门的策略将检索与语言生成模型相结合,从而为该领域的未来研究奠定基础。

1.介绍

大型语言模型(大语言模型)(Brown 等人,2020)在各种任务上表现出了前所未有的熟练程度,从文本生成到复杂的问答(Beeching 等人,2023),到信息检索 (IR) 任务(Kenton 和 Toutanova,2019;Yates 等人,2021)。 然而,大语言模型在处理大型上下文方面受到限制(Vaswani 等人,2017),这一限制导致对其预先训练的知识的依赖增加。 这种限制不仅限制了他们有效管理扩展话语(例如书籍或长时间对话)的能力,而且还增加了产生幻觉的可能性,即模型产生事实上不正确或无意义信息的情况(Roller等人,2021). 为了提高大语言模型生成的响应的准确性,检索增强生成(RAG)系统已成为一种有前途的解决方案(Lewis等人,2020)。 这些系统的主要目的是通过为模型提供对外部信息的访问来提高事实准确性,而不是仅仅依赖于预训练阶段注入的知识,这些知识也可能是有限的或过时的。 RAG 系统的一个关键优势是能够增加大语言模型的有效上下文大小。 他们通过合并一个 IR 组件来实现这一点,该组件在响应生成过程中动态地获取相关的外部信息。 这种方法显着扩展了模型可访问的数据范围,将其上下文窗口扩展到初始输入之外。 RAG 系统的核心由两个基本组件组成:检索器和生成器。 IR组件负责获取外部信息以丰富生成模块的输入。 相比之下,生成组件利用大语言模型的力量来生成连贯且上下文相关的文本。 本研究集中于 RAG 系统的 IR 方面,我们提出以下研究问题: “为了优化 RAG 系统的快速构造,检索器需要哪些基本特征? 目前的猎犬理想吗?”. 我们关注检索器可以获取的三种主要文档类型:相关、相关和不相关。 相关文档包含与查询直接相关的信息,提供直接回答或告知查询的黄金标准数据。 相关文档虽然不直接回答查询,但在语义或上下文上链接到该主题。 例如,如果有人询问拿破仑的马的颜色,一份表达拿破仑妻子的马的颜色的文档虽然不包含正确的信息,但会高度相关。 另一方面,不相关文档与查询无关,代表检索过程中的一种信息噪声。 我们的分析发现,RAG 系统中相关文档比不相关文档危害更大。 更令人惊讶的是,我们发现嘈杂的文档是有益的,并且可以在准确性方面提高高达35%。 这些结果与 IR 系统面向客户的标准使用形成鲜明对比,在 IR 系统中,相关文档通常被认为比不相关文档更容易被接受。 分析表明,传统的检索技术在这种新范式中可能不是最佳的,因此需要开发适合集成检索与语言生成模型的特定需求的专门方法。 这些见解凸显了该领域新颖研究的潜力,为在 RAG 系统背景下系统地重新思考和推进 IR 策略铺平了道路。 总而言之,我们的贡献是:(a)我们进行了首次全面研究,重点关注检索到的文档如何影响 RAG 框架。 我们的目标是了解检索器所需的特性,以优化 RAG 系统的快速构建; (b) 这项研究发现,在 RAG 系统中,相关文档比不相关文档的危害更大。 事实上,与传统观点相反,我们发现嘈杂(不相关)的文档在准确性方面可以将性能提高高达 35%; © 我们提出了利用这一现象的策略。 同时,我们强调需要重新考虑信息检索策略,为未来的研究工作铺平道路。

2.相关作品

2.1.生成语言模型

现代大语言模型时代的开始可以追溯到题为《Attention Is All You Need》的开创性论文(Vaswani 等人,2017)。 这项工作引入了 Transformer 架构,该框架采用注意力机制而不是循环层,使模型能够捕获数据内的全局依赖关系。 继这一创新之后,2018 年引入了 BERT(来自 Transformers 的双向编码器表示)(Kenton 和 Toutanova,2019)。 BERT 利用深度双向、无监督的语言表示,代表了文本上下文理解领域的重大进步。 随着生成式预训练 Transformer (GPT) 的发展,基于 Transformer 的模型继续发展(Radford 等人,2018)。 其后继者 GPT-2 (Radford 等人, 2019) 在此基础上进行了扩展,推出了更大规模的模型,并在无需特定任务训练的情况下在各种语言任务中展示了改进的性能。 随后的迭代 GPT-3 (Brown 等人, 2020) 代表了模型规模和能力的进一步增强,特别是在少样本学习领域。 与此同时,基于并扩展 Transformer 架构的专用模型和变体不断增多。 值得注意的是,Google 的 T5(文本到文本传输转换器)(Raffel 等人,2020) 通过将 NLP 任务重新定义为文本到文本问题,提出了一个统一的框架。 Google 和 CMU 同年开发的 XLNet (Yang 等人, 2019) 通过采用基于排列的训练方法超越了 BERT 的性能。 最后,最近大型公开语言模型的产量激增。 一些演员已经发布了他们的模型,最引人注目的是 Llama (Touvron 等人, 2023a, b)、Falcon (Almazrouei 等人, 2023)、Mosaic MPT ( Team 等人, 2023), 和 Phi (Li 等人, 2023; Javaheripi 等人, 2023)。

2.2.信息检索

IR 领域起源于基于文本的系统。 基础方法,例如向量空间模型(VSM)(Wong等人,1985)和词频-逆文档频率(TF-IDF)(Ramos等人,2003) t1>,为量化文本相似度提供了基础。 这些稀疏检索方法,其中 BM25 是其最著名的当前迭代(Robertson 等人,2009),其特点是使用高维和稀疏特征向量,对于开发早期 IR 系统至关重要。 IR 的一个重大演变是稀疏检索器和密集检索器之间的区别。 稀疏检索器(例如 VSM 和 TF-IDF)依赖于精确的关键字匹配,并且由于其可解释性和简单性,对于大规模文档检索非常有效。 然而,他们常常难以理解单词之间的语义关系(Manning 等人,2008)。 相比之下,由于深度学习的进步而出现的密集检索器利用低维密集向量进行表示。 第一个真正改进稀疏方法的是 DPR (Karpukhin 等人,2020a),随后出现了大量其他技术(Izacard 等人,2021;Khattab 和 Zaharia ,2020)。

2.3.检索和生成

RAG 代表了机器学习的重大转变,结合了基于检索的模型和生成模型的优势。 这个想法最早起源于(程等人,2021)和(张等人,2019)等作品,但RAG的概念在中得到普及(Lewis 等人,2020),引入了一种将密集通道检索器与序列到序列模型相结合的模型,展示了知识密集型任务的实质性改进。 类似的方法几乎同时出现,例如(Guu 等人, 2020; Borgeaud 等人, 2022)。 我们建议读者参考(Mialon 等人, 2023) 进行有关增强语言模型的调查。 研究人员和从业者最近开始探索这些 RAG 系统的内部工作原理。 值得注意的是,(Sauchuk 等人,2022)分析了不同类型文档对级联 IR/NLP 系统的影响。 然而,他们没有使用大语言模型,因此得出了几乎相反的结论。 其他作品试图研究 Transformer 对输入的关注程度(Sun 等人,2021;Khandelwal 等人,2018;Liu 等人,2023;Ram 等人,2023)。 在本文中,我们希望首次全面分析在 RAG 系统中使用检索器模块的影响,研究几个关键因素的影响,例如文档的位置、类型以及使用的数量。

3.RAG

RAG 提供了一个强大的框架,可以成功应用于许多问题和下游任务。 在本文中,我们探讨了 RAG 在问答领域的应用,这可以说是其最流行的应用。

3.1.开放域问答

在这里插入图片描述

3.2.检索器

在这里插入图片描述

3.3.推理器

在这里插入图片描述

4.实验方法

在本节中,我们详细介绍实验框架。 我们将从描述实验中使用的数据开始。 这为检查检索器可以返回并传递给大语言模型的文档类型奠定了基础,这将是本节的主要焦点。

4.1.自然问题数据集

自然问题 (NQ) 数据集(Kwiatkowski 等人,2019) 是源自 Google 搜索数据的现实世界查询的大规模集合。 数据集中的每个条目都包含用户查询和包含答案的相应维基百科页面。 该数据集旨在促进自然语言理解和开放域问答的研究,提供丰富的现实世界问题和上下文相关答案的来源。 NQ-open 数据集(Lee 等人,2019) 是 NQ 数据集的子集,其不同之处在于消除了将答案链接到特定维基百科段落的限制,从而模仿了更通用的信息检索场景,类似于网络搜索。 这种开放域的性质极大地影响了我们的实验设计,特别是在文档的选择和分类方面。 遵循 Lee 等人 (2019) 的方法,我们回答查询的主要来源是截至 2018 年 12 月 20 日的英文维基百科转储。 与密集段落检索 (DPR) 方法 (Karpukhin 等人,2020b) 一致,此转储中的每篇维基百科文章都被分割为 100 单词的非重叠段落。 开放域问答中的一个重大挑战是维基百科转储和数据集中的问答对之间潜在的时间不匹配,这可能导致转储不包含答案的情况,如 AmbigQA 研究中所强调的(敏等人,2020)。 为了缓解这个问题,我们将原始 NQ 数据集中的黄金文档集成到我们的维基百科文档集中。 鉴于我们任务的开放域性质,可能存在与查询相关的其他文档,即包含答案,但我们不会将它们视为黄金。 最终数据集包含 21,035,236训练文档,其中 72,209 查询位于集合中,2,889位于测试集中。

详情内容见https://arxiv.org/abs/2401.14887

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

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

相关文章

CSS基础:插入CSS样式的3种方法

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。大专生,2年时间从1800到月入过万,工作5年买房。 分享成长心得。 262篇原创内容-公众号 后台回复“前端工具”可获取开发工具,持续更新中 后台回复“前端基础…

【UnityRPG游戏制作】Unity_RPG项目之界面面板分离和搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

2_5.Linux存储的基本管理

实验环境: 系统里添加两块硬盘 ##1.设备识别## 设备接入系统后都是以文件的形式存在 设备文件名称: SATA/SAS/USB /dev/sda,/dev/sdb ##s SATA, dDISK a第几块 IDE /dev/hd0,/dev/hd1 ##h hard VIRTIO-BLOCK /de…

stm32开发之threadx使用记录(主逻辑分析)

前言 threadx的相关参考资料 论坛资料、微软官网本次使用的开发板为普中科技–麒麟,核心芯片为 stm32f497zgt6开发工具选择的是stm32cubemx(代码生成工具)clion(代码编写工具)编译构建环境选择的是arm-none-gcc编译 本次项目结构 CMakeList对应的配置 set(CMAKE_…

Seata(分布式事务集成测试和总结)

文章目录 1.集成测试1.集成测试正常下单1.步骤2.浏览器访问 http://localhost:10008/order/save?userId666&productId1&nums1&money1003.注意事项和细节 2.集成测试模拟异常1.步骤1.com/sun/springcloud/controller/StorageController.java 休眠12s,模…

虚拟机打不开

问题 另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘“G:\centeros\hadoop104kl\hadoop100-cl2.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机。 原因 前一次非正常关闭虚拟机导致.lck 文件是VMWare软件的一种磁盘锁文件&…

线性数据结构

1.数组 数组使用一块连续的内存来存储元素,并且元素的类型都是相同的。可以通过索引来访问。 2.链表 链表由一系列节点组成,每个节点包含两部分:数据部分和指针部分。数据部分用于存储元素的值,指针部分则指向下一个节点。没有使…

机器学习 - multi-class 数据集训练 (含代码)

直接上代码 # Multi-class datasetimport numpy as np RANDOM_SEED 42 np.random.seed(RANDOM_SEED) N 100 # number of points per class D 2 # dimensionality K 3 # number of classes X np.zeros((N*K, D)) y np.zeros(N*K, dtypeuint8) for j in range(K):ix rang…

多线程的入门(二)线程实现与初步使用

1.实现Runable接口 实现Runable接口,实现run方法; 这种方式创建的线程实现类执行时需要创建Thread实例去运行该任务 示例如下: package com.example.springbootdamo.Thread;import org.apache.logging.log4j.LogManager; import org.apach…

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页:➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋🔴玩家下棋🔴电脑下棋2.2…

二叉树进阶——手撕二叉搜索树

troop主页:troop 手撕二叉搜索树 1.二叉搜索树的定义2.实现(非递归)补充结构2.1查找2.2插入2.3删除(重要)情况1(无孩子&&一个孩子) 3.二叉搜索树的应用3.1K模型3.2KV模型3.2.1KV模型的实现 总结二叉…

RUST语言值所有权之内存复制与移动

1.RUST中每个值都有一个所有者,每次只能有一个所有者 String::from函数会为字符串hello分配一块内存 内存示例如下: 在内存分配前调用s1正常输出 在分配s1给s2后调用报错 因为s1分配给s2后,s1的指向自动失效 s1被move到s2 s1自动释放 字符串克隆使用

I2C驱动实验:读取AP3216C设备中寄存器的数据

一. 简介 经过前面几篇文章的学习,已经完成了I2C驱动框架,字符设备驱动框架,编写了 读写 I2C设备中寄存器的数据的代码,文章如下: I2C驱动实验:实现读/写I2C设备寄存器的函数-CSDN博客 本文在此基础上&a…

C#开发中一些常用的工具类分享

一、配置文件读写类 用于在开发时候C#操作配置文件读写信息 1、工具类 ReadIni 代码 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namesp…

不同设备使用同一个Git账号

想要在公司和家里的电脑上用同一个git账号来pull, push代码 1. 查看原设备的用户名和邮箱 第1种方法, 依次输入 git config user.name git config user.email第2种方法, 输入 cat ~/.gitconfig2. 配置新设备的用户名和邮箱 用户名和邮箱与原设备保持…

高效学习方法:冥想背诵,看一句念一句,再每个词分析位置及语法等合理性,忘记哪个词再看猜下为什么会忘,跟自己的表达哪里不一样。

原则:易学则易行,则效果最好。《易经》 你提到的这种学习方法结合了多种记忆和理解技巧,可以帮助提高学习效率。下面是对这种方法的一个详细解释和一些建议: 冥想背诵:通过冥想来集中注意力,可以帮助你在没…

数据如何才能供得出、流得动、用得好、还安全

众所周知,数据要素已经列入基本生产要素,同时成立国家数据局进行工作统筹。目前数据要素如何发挥其价值,全国掀起了一浪一浪的热潮。 随着国外大语言模型的袭来,国内在大语言模型领域的应用也大放异彩,与此同时&#x…

使用YOLOv8训练自己的【目标检测】数据集

文章目录 1.收集数据集1.1 使用开源已标记数据集1.2 爬取网络图像1.3 自己拍摄数据集1.4 使用数据增强生成数据集1.5 使用算法合成图像 2.标注数据集2.1确认标注格式2.2 开始标注 3.划分数据集4.配置训练环境4.1获取代码4.2安装环境 5.训练模型5.1新建一个数据集yaml文件5.2预测…

java中的正则表达式和异常

正则表达式: 作用一:用来校验数据格式是否合法 作用二:在文本中查找满足要求的内容 不用正则表达式:检验QQ号是否合法,要求全部是数字,长度在6-20,不能以0开头 public class test {public stat…

手机扫码查看视频如何实现?扫描二维码在线看视频的制作技巧

现在的学校或者幼儿园会需要拍摄学生的视频,然后展示给其他人查看,为了能够方便用户能够快速的获取文件内容,所以经常会通过生成视频二维码的方法,将二维码分享之后手机扫码来获取视频内容,有效提升用户获取内容的体验…