LongRAG:增强长上下文大语言模型的检索增强生成

news2024/10/9 4:35:14

这篇论文的标题是《LongRAG: Enhancing Retrieval-Augmented Generation with Long-context LLMs》,由滑铁卢大学的Ziyan Jiang、Xueguang Ma和Wenhu Chen撰写。论文主要探讨了在传统的检索增强生成(RAG)框架中存在的一些问题,并提出了一种新的框架LongRAG,旨在改进检索和生成的平衡性。
代码:https://tiger-ai-lab.github.io/LongRAG/

论文摘要

在传统的RAG框架中,检索单元通常较短,如100字的维基百科段落。检索器需要在庞大的语料库中搜索,这增加了检索负担。为了减轻这种负担,作者提出了LongRAG框架,包括“长检索器”和“长阅读器”,将整个维基百科处理成4K-token的单位,使检索单元减少至60万,大大减轻了检索器的负担,显著提高了检索性能。在不需要训练的情况下,LongRAG在NQ和HotpotQA(全维基)上达到了62.7%和64.3%的EM(精确匹配)率,与最先进的模型相当。
image.png

主要方法

LongRAG框架包含三个重要设计:

  1. 长检索单元:通过使用整个维基百科文档或将多个相关文档分组,构建超过4K token的长检索单元,显著减少语料库的大小。
  2. 长检索器:长检索器通过搜索长检索单元来识别相关信息,将前4到8个检索单元连接起来作为长上下文。
  3. 长阅读器:长阅读器从检索的长上下文中提取答案,利用现有的长上下文LLM(如Gemini或GPT-4)进行零样本答案提取。

image.png
LongRAG示例。在左侧,展示了通过超链接将维基百科文档分组形成的长检索单元。每个检索单元平均包含4K个token,对应多个相关文档。右侧展示了来自HotpotQA的多跳问答测试案例。最终结果可以通过使用少量检索单元,并将其输入到长阅读器中实现。

文档分组算法

image.png

相似性搜索

我们使用一个编码器,记为EQ(·),将输入问题映射到一个d维向量。此外,我们使用一个不同的编码器,记为EC(·),将检索单元映射到一个d维向量。我们使用它们向量的点积来定义问题与检索单元之间的相似性:image.png
在LongRAG设置中,由于 g 的长度,计算 EC(g) 是有挑战性的,因此我们采用如下近似方法。
image.png
我们通过最大化检索单元 g 内所有子单元 g’ 的得分来进行近似。我们考虑了不同层次的粒度,包括段落级别、文档级别和完整的分组文档。在表3中展示了关于这些设置的实证研究。使用这种相似性评分设置,我们将检索与给定查询最接近的前 k 个检索单元。为了提高检索效率,我们预先计算每个检索单元 g’ 的嵌入,并在FAISS中预测精确的内积搜索索引。

汇总检索结果 我们将前 k 个检索单元连接成一个长上下文作为检索结果,记为CF=image.png。根据检索单元的选择,较大的检索单元会导致较小的k 值。例如,如果检索单元是段落,k 大约在100以上;如果是文档,k大约为10;而如果是分组文档作为检索单元,我们通常将k设定为4到8。

创新贡献

  1. 减少语料库大小:通过长检索单元,语料库大小从2200万减少到60万,减轻了检索器的负担。
  2. 提高信息完整性:长检索单元避免了语义不完整,减少了信息丢失。
  3. 无需再排序器:最佳结果可以通过仅考虑前4-8个检索单元实现。

实验结果

实验结果显示,LongRAG在NQ和HotpotQA上的表现显著优于传统方法,达到或接近最先进的RAG模型的性能。具体来说,在NQ数据集上,LongRAG的答案召回率(answer recall)从52%提高到71%,在HotpotQA数据集上,从47%提高到72%。

方法的优缺点

优点

  • 大幅减少了检索单元的数量和大小,减轻了检索器的负担。
  • 提高了检索的准确性和信息的完整性。
  • 实验结果显示其在零样本情况下性能优异。

缺点

  • 依赖于长上下文嵌入模型的性能,而现有的长上下文嵌入模型还有提升空间。
  • 仅使用了黑盒LLM作为阅读器,未来可以探索更优化的阅读器模型。

总结

LongRAG框架通过平衡检索器和阅读器的负担,实现了更高效的检索和生成性能,为未来RAG系统的设计提供了新的思路。

论文下载地址

链接:https://pan.quark.cn/s/0f0b35098dc5

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

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

相关文章

Linux基础 - 存储结构与管理硬盘

目录 零. 简介 一. 文件系统 Ubuntu 文件系统结构: 路径: 二. 硬盘管理 零. 简介 Linux 文件系统是一种用于组织和存储文件、目录以及相关数据的架构。 常见的 Linux 文件系统有: Ext4(Fourth Extended File System)&#…

数据结构:队列详解 c++信息学奥赛基础知识讲解

目录 一、队列概念 二、队列容器 三、队列操作 四、代码实操 五、队列遍历 六、案例实操 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 详细代码: 一、队列概念 队列是一种特殊的线性…

了解负载均衡器

现代系统变得越来越复杂,但这种复杂性确保了处理大量的网络流量和请求。 简单来说,负载均衡器的主要思想就像它的名字一样,它跨服务器提供直接的客户端请求。换句话说,负载均衡器是在多台服务器之间分配网络或应用程序流量的系统…

【系统架构设计师】六、信息系统基础知识(定义|分类|企业信息化系统|生命周期|建设原则|开发方法)

目录 一、信息系统的定义 二、信息系统的分类 三、企业使用的信息化系统 四、信息系统的生命周期 五、信息系统建设原则 六、信息系统的开发方法 6.1 结构化方法 6.2 原型法 6.3 构件化开发方法 6.4 面向服务的方法 6.5 面向对象的方法 6.6 敏捷方法 历年真题考情&#x…

AMSR-E/Aqua L1A 原始观测次数,第 3 版

AMSR-E/Aqua L1A Raw Observation Counts, Version 3 简介 改进后的 V003 AMSREL1A 产品对共同登记参数 A1 和 A2 进行了经验修正,并更新了用于修正 AMSR-E 89 GHz 位置信息的参数文件。因此,第三版 AMSREL1A 数据提高了以下方面的精度:纬度…

【个人博客搭建】(26)发布后端webapi项目

1、选择启动的webapi,右击发布 2、选择左下角的“显示所有设置” 在上一页按钮那边是发布文件夹的目录 地址, 现在界面的就是配置的信息, 配置:Debug、Release 目标框架:我们用的net8.0,就是他&#xff…

Golang | Leetcode Golang题解之第191题位1的个数

题目: 题解: func hammingWeight(num uint32) (ones int) {for ; num > 0; num & num - 1 {ones}return }

C语言 | Leetcode C语言题解之第191题位1的个数

题目: 题解: int hammingWeight(uint32_t n) {int ret 0;while (n) {n & n - 1;ret;}return ret; }

S_LOVE多端恋爱小站小程序源码 uniapp多端

S_LOVE多端恋爱小站小程序源码,采用uniapp多端开发框架进行开发,目前已适配H5、微信小程序版本。 源码下载:https://download.csdn.net/download/m0_66047725/89421726 更多资源下载:关注我。

数据库系统体系结构-DBMS的三级模式结构、DBMS的工作方式、模式定义语言、二级映射

一、体系结构的概念 1、大多数DBMS遵循三级模式结构 (1)外模式 (2)概念模式 (3)内模式 2、DBMS的体系结构描述的应该是系统的组成结构及其联系以及系统结构的设计和变化的原则等 3、1978年美国国家标…

在flask中加载mnist模型,并预测图片

一、在tensorflow中新建及保存模型 启动Jupyter Notebook 新建Notebook 生成 mnist_model.h5 模型的代码 import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import…

【Oracle篇】逻辑备份工具expdp(exp)/impdp(imp)和物理备份工具rman的区别和各自的使用场景总汇(第八篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…

计算机视觉的职业规划

Hi,大家好。我是茶桁。 今天这节课呢,咱们先不着急讲原理,先来讲讲职业规划的话题。 如果想要直接上手企业级的 AI 项目,可以看看咱们的「AI 人工智能企业项目实战」。 趋势和薪资 首先,先来讲讲就业的趋势。其实学…

Python学习笔记20:进阶篇(九)常见标准库使用之sys模块和re模块

前言 本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。 根据模块知识,一次讲解单个或者多个模块的内容。 教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html 错误输出…

python笔记3

1.通过乘法多次打印,以及字符串相加的合体打印 xzzz yyyy print(xy) print(x*10)#与一个数为打印多少次 2.设置俩个变量,可以通过下面的方法来判断是否一个元素是否在另一个元素中,返回bool值 xzzz yyyy print(xy) print(x*10)#与一个数为打…

算法学习笔记——单双链表及其反转—堆栈诠释

单双链表及其反转——堆栈诠释 按值传递 int、long、byte、short、char、float、double、boolean和String 都是按值传递 概念:在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,…

Windows 获取打印机及端口号方法 (C#)

1. 打开注册表编辑器 regedit 2.选择如下配置 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Device 3. 代码 C# using System; using Microsoft.Win32;class Program {static void Main(){string registryPath "SOFTWARE\Microsoft\Windows …

解决pycharm安装dlib失败的问题

今天使用pycharm来学习opencv人脸识别库face-recognition的时候出现了一点小问题,在pycharm中直接安装face-recognition会失败,说是因为缺少依赖库dlib,但是直接使用pycharm安装dlib库也有问题,不知道大家遇到没有 错误提示 note…

【unity实战】Unity中基于瓦片的网格库存系统——类似《逃离塔科夫》的库存系统

最终效果 文章目录 最终效果前言素材下载图片配置获取格子坐标动态控制背包大小添加物品移动物品物品跟随鼠标创建物品的容器,定义不同物品修改物品尺寸修复物品放置位置问题按物品尺寸占用对应大小的格子判断物品是否超出边界范围物品放置重叠,交换物品…