强强联合!当RAG遇到长上下文,滑铁卢大学发布LongRAG,效果领先GPT-4 Turbo 50%

过犹不及——《论语·先进》

大学考试时,有些老师允许带备cheet sheet(忘纸条),上面记着关键公式和定义,帮助我们快速作答提高分数。传统的检索增强生成(RAG)方法也类似,试图找出精准的知识片段来辅助大语言模型(LLM)。

但这种方法其实有问题。因为:

  • LLM没有"老师划重点",需要自己在海量信息中寻找答案。

  • RAG是两步走:先检索,再生成。如果第一步检索就出错,再好的生成也难以弥补。

  • 过分追求精准的知识片段,反而可能限制了模型的发挥空间。

所以,与其苛求检索结果的精准性,不如给模型提供更丰富的上下文信息,让它自己去理解和提炼关键知识。这样可能效果会更好。

那有没有可能让LLM不要cheet sheet,直接参加“开卷考”呢?随着现在长上下文技术(LongContext)日渐成熟,让LLM干脆带着“书”来回答问题开始成为可能。

滑铁卢大学的研究者们就做了这么一个尝试,抛开当前“长上下文党”和“RAG党”之间的争论,把“长上下文”和“RAG”整个地结合了起来,反正就是“我全都要”。至于效果嘛?据说连GPT-4也已经被“吊打”了喔

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

RAG vs LongContext?

由于LLM往往受到知识时效性和训练知识边界的限制,RAG方法被提出作为大模型的补充,RAG先检索相关信息,再用LLM生成答案。这样可以让模型获取最新外部知识,提高表现。

但是,LLM和RAG都难以处理长文本。随着RoPE和AliBI等位置编码技术,以及各种长文本训练方法的提出,模型处理更长的上下文成为可能。

有趣的是,虽然RAG和长文本LLM已经同时存在一段时间,但很少有人尝试把它们结合起来。如果能用长文本LLM来理解和提炼RAG检索到的大段信息,应该会有不错的效果。这样做可以减轻检索环节的压力,提高整体性能。

LongRAG

长上下文检索器

在传统的RAG框架中,检索器通常使用较小的检索单元,如短文本段落,并侧重于检索包含答案的精确细粒度上下文。然而,LongRAG框架中的长上下文检索器(Long Retriever)更加注重召回率,目标是检索与问题相关的上下文,但不一定是精确的答案。这种设计选择将更多的负担从检索器转移到生成器,让生成器从相关上下文中提取确切的答案。

长上下文检索的构建过程分为三个步骤:

  • 首先,通过将整个维基百科文档或多个相关文档组合成一个长检索单元,形成M个检索单元。这些长检索单元通过文档内插入的超链接进行分组,确保了每个检索单元的语义完整性,并为需要多文档信息的任务提供了丰富的上下文。

  • 其次,使用编码器将输入问题映射到d维向量,并使用不同的编码器将检索单元映射到相同的d维空间。通过计算问题向量和检索单元向量之间的点积来定义它们之间的相似度,并通过在检索单元内的所有块中最大化分数来近似这个相似度,从而有效地检索与给定查询最接近的top k检索单元。

  • 最后,将这些检索单元串联成长上下文作为检索结果,为下一步的生成器处理提供输入。

长阅读器

长阅读器(Long Reader)是LongRAG框架中的另一个核心组件,它负责从长上下文检索器检索出的长上下文中提取答案。与传统RAG框架中的生成器不同,长阅读器处理的是大约30K tokens的长文本,这要求它能够理解和推理更长的上下文信息。

长阅读器的操作相对直接。它接收相关的指令、问题以及长上下文检索器检索出的长上下文结果,然后将这些信息输入到一个能够处理长上下文的LLM中。这个LLM需要具备处理长文本的能力,并且在处理位置信息时不应表现出明显的偏差。本文选择了在处理长上下文输入方面表现出色Gemini1.5-Pro和GPT-4o作为长阅读器。

对于不同的上下文长度,长阅读器采用了不同的策略。对于短上下文(通常少于1K tokens),它指导阅读器直接从检索到的文本中提取答案。而对于长上下文(通常超过4K tokens),直接提取答案的方法可能会导致性能下降。因此,最有效的方法是将LLM作为一个聊天模型来使用。首先,它输出一个较长的答案,可能包含几个词到几句话。然后,通过进一步的提示,引导它从长答案中提取出更短的答案。这个过程涉及到两阶段的提示。

实验

数据

本文提出的LongRAG框架在两个与维基百科相关的问答数据集上进行了测试:Natural Questions(NQ)和HotpotQA。Natural Questions数据集专为端到端问答任务设计,包含3610个问题,这些问题是从真实的谷歌搜索查询中挖掘出来的,答案则是由标注者在维基百科文章中确定的文本片段。HotpotQA数据集包含多跳问题,需要两个维基百科段落来回答问题。由于测试集的目标段落不可获取,研究者遵循先前的工作,在包含7405个问题的验证集上进行评估。

对于知识源,即维基百科的不同版本,被用于不同的数据集。对于NQ,使用了2018年12月20日转储的维基百科,包含大约300万篇文档和2200万个段落。对于HotpotQA,使用了2017年10月1日转储的摘要段落,包含约500万篇文档。在处理文档时,只提取纯文本,并从文档中剥离了所有结构化数据部分,如列表、表格和图表。

长上下文检索效果

在NQ数据集中,研究者采用了三种不同长度的检索单元:段落、文档和分组文档。检索单元的长度从短到长不等,其中包括整个文档或多个相关文档的组合,平均包含4K个tokens。通过使用长上下文检索,LongRAG框架显著减少了语料库的大小,从22M减少到600K文档单元,同时显著提高了检索器的答案召回率,从52.24%提高到71.69%。此外,长检索单元的使用还显著减少了为达到可比性能所需的检索单元数量。例如,在分组文档级别,仅使用8个检索单元就可以达到与100个段落级别检索单元相似的召回率。

对于HotpotQA数据集,检索单元仅限于文档级别和分组文档级别。在HotpotQA中,研究者观察到类似的结果,长上下文检索显著减轻了检索组件的负担。例如,在文档级别和分组文档级别,召回率和答案召回率都有所提高。

完整表现

在NQ数据集上,LongRAG实现了62.7%的精确匹配率(Exact Match Rate),与最强的经过微调的RAG模型之一Atlas相当。

在HotpotQA数据集上,LongRAG实现了64.3%的精确匹配率,接近于最先进的全监督RAG框架。

对比GPT-4,都实现了50%的效果提升!

在评估过程中,本文还比较了不同检索单元的选择和不同数量的检索单元对性能的影响。本文发现,无论选择哪种检索单元,当向阅读器提供过多的检索单元时,性能都会达到一个转折点,之后性能会下降。这是因为过多的信息会超出阅读器的处理能力,使其无法有效地理解和提取长上下文中的相关信息。例如,在NQ数据集中,段落级别的检索单元的转折点在100到200个单元之间,而分组文档级别的检索单元的转折点在4到8个单元之间。这表明,向阅读器提供大约30K tokens的上下文长度是最适合的。

此外,本文还比较了不同的阅读器模型。在NQ数据集上,GPT-4o在200个测试问题上实现了最高的精确匹配得分,显示出其在LongRAG框架中作为长阅读器角色时最为有效。GPT-4o之所以表现出色,归功于其处理和理解长文本的能力,确保了关键信息的准确提取。

最后,研究者还提出了对精确匹配率(Exact Match, EM)评估标准的改进,以更公平地评估LongRAG的性能。由于LongRAG的长检索上下文可能包含地面真实答案的别名或不同形式,因此研究者放宽了精确匹配的定义,将预测结果与真实答案之间的差异在五个token以内的情况也视为精确匹配。

总结

LongRAG框架的核心优势在于:

"长上下文检索器"就像带着重点笔记进考场,能快速定位相关信息,"长阅读器"则像学霸,能准确从长文本中提取关键答案。两者配合,让AI在回答复杂问题时更高效准确。

虽然LongRAG表现不错,但仍有提升空间:

  • 检索器处理超长文本的能力可以进一步增强。

  • 阅读器对长文本的理解还需优化。

总的来说,LongRAG为AI问答系统开辟了新方向。随着技术进步,它有望在处理复杂问题方面发挥更大作用。

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

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

相关文章

React@16.x(48)路由v5.x(13)源码(5)- 实现 Switch

目录 1&#xff0c;原生 Switch 的渲染内容2&#xff0c;实现 1&#xff0c;原生 Switch 的渲染内容 对如下代码来说&#xff1a; import { BrowserRouter as Router, Route, Switch } from "react-router-dom"; function News() {return <div className"p…

MySQL体系架构

1.1.MySQL的分支与变种 MySQL变种有好几个&#xff0c;主要有三个久经考验的主流变种&#xff1a;Percona Server&#xff0c;MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持&#xff0c;均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库&#xff0c;值…

JVM专题之Java对象内存模型

一个Java对象在内存中包括3个部分: 对象头、实例数据和对齐填充 数据 内存 -- CPU 寄存器 -127 补码 10000001 - 11111111 32位的处理器 一次能够去处理32个二进制位 4字节的数据 64位操作系统 8字节 2的64次方的寻址空间 指针压缩…

从零开始:大模型简介与应用|实战系列

实战系列 相信有不少伙伴对大模型有所耳闻&#xff0c;但也是一知半解&#xff0c;也许你知道很重要可以为自己的工作提供帮助但是不知道该如何结合&#xff0c;又或是转行的过程中并不知道从何入手&#xff0c;网上的教程要么不包含具体的操作步骤要么需要好几篇合在一起才能…

鸿蒙小案例-首选项工具类

一个简单的首选项工具类 主要提供方法 初始化 init()方法建议在EntryAbility-》onWindowStageCreate 方法中使用 没多少东西&#xff0c;放一下测试代码 import { PrefUtil } from ./PrefUtil; import { promptAction } from kit.ArkUI;Entry Component struct PrefIndex {St…

在window上搭建docker

1、打开Hyper-V安装 在地址栏输入控制面板&#xff0c;然后回车 勾选Hyper-V安装&#xff0c;如果没有找到Hyper-V&#xff0c;那么请走第2步 2、如果没有Hyper-V(可选&#xff09;第一步无法打开 家庭版本需要开启Hyper-V 创建一个文本文档&#xff0c;后缀名称为.bat.名称…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥生成介绍及算法规格】

密钥生成介绍及算法规格 当业务需要使用HUKS生成随机密钥&#xff0c;并由HUKS进行安全保存时&#xff0c;可以调用HUKS的接口生成密钥。 注意&#xff1a; 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harm…

【C++】 ——【模板初阶】——基础详解

目录 1. 泛型编程 1.1 泛型编程的概念 1.2 泛型编程的历史与发展 1.3 泛型编程的优势 1.4 泛型编程的挑战 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的原理 2.4 函数模板的实例化 2.5 模板参数的匹配原则 2.6 函数模板的特化 2.7 函数模板的使…

html+css+js淘宝商品界面

点击商品&#xff0c;alert弹出商品ID 图片使用了占位符图片&#xff0c;加载可能会慢一点 你可以把它换成自己的图片&#x1f603;源代码在图片后面 效果图 源代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"…

时空预测+特征分解!高性能!EMD-Transformer和Transformer多变量交通流量时空预测对比

时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比 目录 时空预测特征分解&#xff01;高性能&#xff01;EMD-Transformer和Transformer多变量交通流量时空预测对比效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

番外篇 | YOLOv8改进之即插即用全维度动态卷积ODConv + 更换Neck网络为GFPN

前言:Hello大家好,我是小哥谈。本文所做出的改进是在YOLOv8中引入即插即用全维度动态卷积ODConv和更换Neck网络为GFPN,希望大家学习之后能够有所收获~!🌈 目录 🚀1.基础概念 🚀2.网络结构 🚀3.添加步骤 🚀4.改进方法 🍀🍀步骤1:block.py文件修改…

在TkinterGUI界面显示WIFI网络摄像头(ESP32s3)视频画面

本实验结合了之前写过的两篇文章Python调用摄像头&#xff0c;实时显示视频在Tkinter界面以及ESP32 S3搭载OV2640摄像头释放热点&#xff08;AP&#xff09;工作模式–Arduino程序&#xff0c;当然如果手头有其他可以获得网络摄像头的URL即用于访问摄像头视频流的网络地址&…

解析MySQL核心技术:视图的实用指南与实践案例

在数据库管理中&#xff0c;MySQL视图&#xff08;View&#xff09;是一种强大的功能&#xff0c;利用它可以简化复杂查询、提高数据安全性以及增强代码的可维护性。本篇文章将详细介绍MySQL视图的相关知识&#xff0c;包括视图的创建、修改、删除、使用场景以及常见的最佳实践…

Python学生信息管理系统(完整代码)

引言&#xff1a;&#xff08;假装不是一个大学生课设&#xff09;在现代教育管理中&#xff0c;学生管理系统显得尤为重要。这种系统能够帮助教育机构有效地管理学生资料、成绩、出勤以及其他教育相关活动&#xff0c;从而提高管理效率并减少人为错误。通过使用Python&#xf…

亚马逊跟卖选品erp采集,跟卖卖家的选品利器,提升选品效率!

今天给亚马逊跟卖卖家&#xff0c;分享我现在在用的两种选品方式&#xff0c;做个铺货或者是跟卖都可以&#xff0c;是不是很多卖家选品现在都是亚马逊前端页面或是新品榜单选择产品跟卖&#xff0c;这样找品这就相当于大海捞针&#xff0c;而且新品榜单的产品你能看到那其他卖…

经典卷积神经网络 LeNet

一、实例图片 #我们传入的是28*28&#xff0c;所以加了padding net nn.Sequential(nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Flat…

Linux Swap机制关键点分析

1. page被swap出去之后,再次缺页是怎么找到找个换出的页面? 正常内存的页面是通过pte映射找到page的,swap出去的page有其特殊的方式:swap的页面page->private字段保存的是:swap_entry_t通过swap_entry_t就能找到该页面的扇区号sector_t,拿到扇区号就可以从块设备中读…

day04-组织架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.组织架构-树组件应用树形组件-用层级结构展示信息&#xff0c;可展开或折叠。 2.组织架构-树组件自定义结构3.组织架构-获取组织架构数据4.组织架构-递归转化树形…

Redis 典型应用——分布式锁

一、什么是分布式锁 在一个分布式的系统中&#xff0c;也会涉及到多个节点访问同一个公共资源的情况&#xff0c;此时就需要通过锁来做互斥控制&#xff0c;避免出现类似于 "线程安全" 的问题&#xff1b; 而 Java 中的 synchronized&#xff0c;只能在当前进程中生…