【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法

论文: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering

⭐⭐⭐⭐

EACL 2021, Facebook AI Research

论文速读

在 RAG 中,如何将检索出的 passages 做聚合并输入到生成模型是一个问题,本文提出了一个简单有效的方案:FiD。

下图是一个简单的 open-domain QA 的使用方式,它直接将 question 和检索到的所有 passages 拼接起来,以 <question, retrieved passages> 的形式扔给 seq2seq 模型来生成 answer:

20240512210853

这种处理方式中,随着 retrieved passages 的数量增多,由于 Self-Attention 的运算机制,计算复杂度会呈现二次增长。

本论文提出了一个简单直接的方法 —— FiD(Fusion-in-Decoder)—— 将检索回来的每一个 passage 都独立与 question 用一些特殊符号作为间隔拼接起来并输给 encoder 做编码,然后 concat 在一起输入给 decoder 生成 final answer,所以称之为 Fusion-in-Decoder:

20240512211400

尽管方法简单,但效果却出奇的好,在当时 TriviaQA 和 NaturalQuestions 的 benchmark 上达到了 SOTA 水平:

While conceptually simple, this method sets new state-of-the-art results on the TriviaQA and NaturalQuestions benchmarks.

同时,作者认为,与检索模型相比,生成模型非常善于将多个 passages 的信息进行合成,所以本工作的 retrieved passages 的合成工作是交给了生成模型的 Decoder 来做的:

We believe that this is evidence that generative mod els are good at combining evidence from multiple passages, compared to extractive ones.

实验结果

与其他 baselines 的对比:

20240512211933

作者还测试了一下 FiD 在 valid set 上的 performance 与 retrieved passages 数量的函数关系:

20240512212100

可以看到,随着输入的 passages 越多,模型的性能就越好,但同时由于拼接后给 decoder 的输入变长,肯定会伴随着计算机内存的增长。

总结

FiD 给出了一种将 retrieved passages 如何聚合输入给生成模型的思路,这种方法相比于传统的全部拼接再给 LLM 的优势在于:

  • encoder 独立处理每个 passage,因此只需要在一个 passage 上执行 self-attention,这意味着模型的计算时间随着段落数量呈线性增长,而非二次增长。
  • 由 decoder 来联合聚合多个 retrieved passages,可以更好的从中找到相关支持信息。

论文最后指出,如何将 FiD 更好集成到 RAG 模型仍然值得探索。

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

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

相关文章

java基础知识点总结2024版(8万字超详细整理)

java基础知识点总结2024版&#xff08;超详细整理&#xff09; 这里写目录标题 java基础知识点总结2024版&#xff08;超详细整理&#xff09;java语言的特点1.简单性2.面向对象3.分布式4.健壮性5.安全性6.体系结构中立7.可移植性8.解释性9.多线程10.动态性 初识java中的main方…

Web前端开发之JavaScript_2

条件语句三元运算符循环语句字符串数组 1. 条件语句 1.1 if语句 if (布尔值){ // “布尔值”往往由一个表达式产生&#xff0c;其中&#xff0c;赋值表达式不具备比较作用 语句; } 1.2 if...else 语句 if...else可成对单独使用&#xff0c;也可多层if...else …

十二届蓝桥杯Python组3月中/高级试题 第三题

** 十二届蓝桥杯Python组3月中/高级试题 第三题 ** 第三题&#xff08;难度系数 3&#xff0c;25 个计分点&#xff09; 提示信息&#xff1a; 心理学用“智力商数”即“IQ”来表示一个人的智力水平。经过研究划分&#xff0c;智力水平可分为7 个等级&#xff1a; 1、IQ≥140…

Java类与对象(一)

类的定义与使用 在Java中使用关键字class定义一个类&#xff0c;格式如下&#xff1a; class 类名{// 成员变量/字段/属性//成员方法/行为 }Java中类和c语言中的结构体有点类似&#xff0c; 在Java中类名一般采用大驼峰&#xff08;每个首字母大写&#xff09;的形式&#xf…

类和对象一(从封装开始讲述)

目录&#xff1a; 一.封装 二.封装扩展之包&#xff0c;自定义包 三.访问限定符 四.static成员 一.封装&#xff1a;封装&#xff1a;将数据和操作数据的方法进行有机结合&#xff0c;隐藏对象的属性和实现细节&#xff0c;仅对外公开接口来和对象进行 交互。面向对象…

Python | 为列表中的元素分配唯一值

我们可以给列表中的所有数字分配一个唯一的值&#xff0c;重复时它会保留给它的值。这是一个非常常见的问题&#xff0c;在Web开发中&#xff0c;处理物品id时会遇到。让我们讨论一下解决这个问题的一些方法。 1. 使用enumerate() 列表解析 # initializing list test_list …

Reactor Netty TCP 服务器端-响应式编程-011

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform…

Pytorch图像分类模型模型实时在线验证代码

1.训练并保存自己的模型 保存的模型格式为&#xff1a;XXX.pth torch.save(model, "./weight/last.pth")if best_acc <(validation_acc / len_val):torch.save(model, "./weight/best.pth")2.转化为ONNX格式 2.1环境安装&#xff08;window10&#x…

一款简约大气的个人单页介绍主页(附加源码)

一款简约大气的个人单页介绍主页&#xff08;附加源码&#xff09; 效果图部分源码领取源码下期更新预报 效果图 部分源码 .box_bg{width: 100%;height: 100%; }.wenzi{text-align: center;float: left;display: inline;width: 112px;line-height: 48px; } .wenzi2{text-align…

Hikyuu高性能量化研究框架助力探索

Hikyuu Quant Framework 是一款基于C/Python的开源量化交易分析与研究工具&#xff0c;主要用于A股市场的交易策略分析与回测&#xff0c;目前不支持期货等&#xff0c;需要自行改造。 Hikyuu的目标 Hikyuu的最初目的是为了快速对A股全市场股票进行策略回测和验证&#xff0c…

国内镜像地址 Docker、Conda、Node

国内主要系统、软件、开发框架镜像地址&#xff0c;包括 NPM、Centos、Ubuntu、Docker、PIP、Homebrew等。 Conda镜像 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.e…

【C++11】列表初始化、右值引用的详细讲解(上)

前言 在一开始学C之前我们就简单的了解了一下C的发展历史。 相比较而言&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全&#xff0c;不仅功能更强大&#xff0c;而且能提升程序员的开发效率加了许多特性&#xff0c;约140个新特性。使得C…

《A data independent approach to generate adversarial patches》论文分享(侵删)

原文链接&#xff1a;A data independent approach to generate adversarial patches | Machine Vision and Applications author{Xingyu Zhou and Zhisong Pan and Yexin Duan and Jin Zhang and Shuaihui Wang}, 一、介绍 在图像识别领域&#xff0c;与数字域中的攻击相比…

【C++杂货铺铺】AVL树

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 概念 &#x1f4c1; 节点的定义 &#x1f4c1; 插入 &#x1f4c1; 旋转 1 . 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3. 新节点插入较高左…

BM5 合并k个已排序的链表

描述 合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。 数据范围&#xff1a;节点总数 0≤&#x1d45b;≤50000≤n≤5000&#xff0c;每个节点的val满足 ∣&#x1d463;&#x1d44e;&#x1d459;∣<1000∣val∣<1000 要求&#xff1a;时间复杂度 &am…

工业级路由器的穿透力是不是更强(原创科普)

今天我想和大家聊聊工业级路由器的一个重要特性——穿透力。作为一名从事工业网络通信的工程师,我发现很多用户在选择工业级路由器时,都会问到一个问题:"工业级路由器的穿透力是不是更强?"下面就让我来为大家解答这个疑问。当然如果有通信产品需要也可以关注星创易联…

Kafka效率篇-提升效率三板斧

kafka在效率上做了很多的努力。最初的一个使用场景是处理网页上活跃的数据&#xff0c;它往往有非常大的体量&#xff0c;每个页面都能产生数十条写入。而且我们假设每条消息都会被至少一个消费者消费&#xff08;通常是多个&#xff09;&#xff0c;因此&#xff0c;我们努力让…

二维费用背包分组背包

二维费用背包&分组背包 一定要做的

基于Python的简单自动聊天机器人的设计与实现

基于Python的简单自动聊天机器人的设计与实现 Design and Implementation of a Simple Chatbot using Python 完整下载链接:基于Python的简单自动聊天机器人的设计与实现 文章目录 基于Python的简单自动聊天机器人的设计与实现摘要第一章 引言1.1 研究背景1.2 研究目的1.3 研…

WPF之页的使用

1,Page介绍。 Page直接从FrameworkElement中派生出来&#xff0c;WIndow从ContentControl中派生。 [Localizability(LocalizationCategory.Ignore)]public class Window : ContentControl, IWindowService{....} [ContentProperty("Content")]public class Page : Fr…