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

2024-05-13 03:04

本文主要是介绍【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 的运算机制,计算复杂度会呈现二次增长。

本论文提出了一个简单直接的方法 —— FiDFusion-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 模型仍然值得探索。

这篇关于【RAG 论文】FiD:一种将 retrieved docs 合并输入给 LM 的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984506

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat