【RAG 论文】GenRead:“generate-read“ 可能比 “retrieve-read“ 更有效

论文:Generate rather than Retrieve: Large Language Models are Strong Context Generators
⭐⭐⭐⭐
ICLR 2023
Code: github.com/wyu97/GenRead

一、论文速读

该工作发现:由 LLM 生成的文档中,往往比 retrieved documents 更可能包含正确的答案。于是,该工作尝试走一条与 retrieve-then-read pipeline 不同的思路:generate-then-read pipeline(GenRead)。

generate-then-read 的基本思路是:

  1. Generate:首先 prompt LLM(如 InstructGPT)根据 question 生成相关的上下文文档
  2. Read:把 question 和生成的上下文文档交给 LLM 来获得最终的 answer

注意,Generate 步骤和 Read 步骤所使用的 LLM 可以不同,Read 步骤可以使用一个较小的、针对特定数据集训练的模型(如 FiD)

二、如何让 LLM 生成更加丰富多样的上下文文档?

论文指出:如何让 LLM 生成多样的、高质量的上下文文档是一个具有挑战性的任务。这里介绍一下论文的一些做法。

2.1 Diverse Human Prompts

由于单一的 prompt 会产生相似的 token distribution,所以这里让 human annotators 去提供多个不同的 prompt,从而引导 LLM 去生成多样化的上下文 documents。

论文指出,这个做法虽然简单,但是很有效。

2.2 Clustering-based Prompts

Generate 步骤中,在引导 LLM 去生成文档时,可以使用 In-Context Learning 来引导其生成多样化的文档,为了达成这一目的,可以在提供给 LLM 的 few-shot exemplars 中尽量放一些多样化的 question-doc 示例。

具体做法如下:

  1. 针对数据集的每一个 question,使用 retriever(如 BM25)检索出一个对应的 document。由此获得一堆 question-document pairs。
  2. 使用 LLM(如 GPT-3)去对 pairs 中的每一个 document 进行编码,得到一个 12288 维度的 vector。然后对这些 vectors 做 K-means 聚类。
  3. 在每个聚类的 cluster 中,随机选出 n 个 question-document pair,作为 exemplars。

通过以上方法,就可以拿到用于 in-context learning 的 in-context demostrations 来引导 LLM 生成多样化的上下文文档。

如下图展示了 clustering-based prompting 方法的整体架构:

在这里插入图片描述

四、gen-read 与 retrieve-read 结合

论文指出,将本文提出的 generative-then-read 与已有的 retrieve-then-read 结合,可以达到更好的效果。

结合的方式就是:将 generatived 的上下文文档与 retrieved 的文档合并起来,再交给 reader 去阅读。

因此,本文提出的 generative-then-read 方法可以与目前已有的任何 reader 机制进行结合,并将 generated context documents 插入到目前任何知识密集型 NLP 任务中

五、实验结果

在这里插入图片描述

实验表明,GenRead 方法能够有效地利用大型语言模型的生成能力来解决知识密集型任务,并且多个任务上在不引入任何外部数据的情况下达到了或超过了现有 RAG 方法的性能。

六、总结

这篇论文提出了 Generative-Read 的思路,其实验表明,在不引入外部知识的情况下,其表现就可以达到甚至超过当前的 RAG 的方法。这说明了:当前对 LLM 的内部知识的利用还远远不足。

当然,本文也提出,将 Gen-Read 与 Retrivee-Read 进行结合可以达到更好的表现,所以如何在 RAG 系统中更加充分利用 LLM 内部知识,是一个值得研究的挑战。

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

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

相关文章

C++校招八股

c类的访问权限与继承方式 公有成员在任何地方都可以被访问,包括类的外部和派生类。受保护成员在类的内部和派生类中可以被访问,但在类的外部不可访问。 私有成员只能在类的内部访问,包括类的成员函数和友元函数,不允许在类的外部…

一步一步写线程之十一线程池应用内存池

一、内存池 内存池,非常好理解,就是存储内存的一个池子(Pool),一般来说,都是使用各种容器或者自己实现的类似容器的内存管理类。内存池其实就是为了解决两个主要问题,一个是内存反复分配回收的…

关于“泼辣”DB 你应该知道的几件事

PolarDB PolarDB for PostgreSQL(以下简称 PolarDB)是一款阿里云自主研发的企业级数据库产品,采用计算存储分离架构,100% 兼容 PostgreSQL。 PolarDB 的存储与计算能力均可横向扩展,具有高可靠、高可用、弹性扩展等企…

文件(夹)批量重命名数字、字母、日期、中文数字大写小写

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 目标是重命名下面5个文件(也可以是文件夹等,任意),从大写中文数字“贰”开始 打开工具,找到“文…

使用机器学习确定文本的编程语言

导入必要的库 norman Python 语句&#xff1a;import <span style"color:#000000"><span style"background-color:#fbedbb"><span style"color:#0000ff">import</span> pandas <span style"color:#0000ff&quo…

Java面试题:解释Java内存模型(JMM)是什么,它为何重要?

Java内存模型&#xff08;Java Memory Model, JMM&#xff09; 定义&#xff1a; Java内存模型是一个抽象的概念&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&#xff09;的访问规则&#xff0c;以及在并发环境下&#xff0c;这些变量的读写操作如何与内存…

基于OpenCv的图像Harris角点检测

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

使用D3.js进行数据可视化

D3.js介绍 D3.js是一个流行的JavaScript数据可视化库&#xff0c;全称为Data-Driven Documents&#xff0c;即数据驱动文档。它以数据为核心&#xff0c;通过数据来驱动文档的展示和操作。D3.js提供了丰富的API和工具&#xff0c;使得开发者能够创建出各种交互式和动态的数据可…

无界微前端项目实战

前言 微前端框架&#xff1a;无界 wujievue 微前端是什么 | 无界主应用&#xff1a;Vue 2 elementui子应用&#xff1a;Vue 3viteelement plus 前提 子应用的资源和接口的请求都在主域名发起&#xff0c;所以会有跨域问题&#xff0c;子应用必须做cors 设置vue3vite 项目跨…

爬取B站评论:Python技术实现详解

引言 在当今信息爆炸的互联网时代&#xff0c;用户生成的内容不断涌现&#xff0c;其中包括了各种各样的评论。而B站作为一个充满活力的视频分享平台&#xff0c;其评论区更是一个充满了各种各样精彩评论的宝藏地。那么&#xff0c;有没有一种简单的方法可以将这些评论收集起来…

大模型日报2024-05-03

大模型日报 2024-05-03 大模型资讯 马克扎克伯格宣布Meta发布Llama 3大型语言模型的重大AI新闻 摘要: Meta公司在周四发布了其Llama 3大型语言模型的首两个版本。该模型是Meta AI的动力核心&#xff0c;马克扎克伯格称其为“未来的...”。这一进展标志着Meta在人工智能领域的进…

深度学习心得

1. KL loss 其经常要与softmax一起使用&#xff0c;就是为了学习one-hot分布 2. 降维 Pooling层的作用是增加模型的鲁棒性&#xff0c;让模型对输入的少量变化不那么敏感。 如果真想通过降维&#xff0c;减少模型训练参数&#xff0c;那应该用PCA降维方法&#xff0c; skl…

Java中new一个对象内存区域如何变化?顺序是什么?

Java中new一个对象内存区域如何变化&#xff1f;顺序是什么&#xff1f; 如果你对Java内存区域了解的话&#xff0c;那么肯定会知道&#xff0c;创建对象如果是第一次的话&#xff0c;首先肯定是要加载对应的Class&#xff08;要创建对象的类&#xff09;,加载的类信息就是放在…

贪心-耍杂技的牛

问题描述 农民约翰的 N头奶牛&#xff08;编号为 1…N&#xff09;计划逃跑并加入马戏团&#xff0c;为此它们决定练习表演杂技。 奶牛们不是非常有创意&#xff0c;只提出了一个杂技表演&#xff1a; 叠罗汉&#xff0c;表演时&#xff0c;奶牛们站在彼此的身上&#xff0c;形…

Django之配置数据库

一&#xff0c;创建项目 二&#xff0c;将项目的setting.py中的 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }替换成如下&#xff08;以mysql为例&#xff09; DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: …

力扣---二叉树的锯齿形层序遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,…

基于深度学习神经网络的AI图片上色DDcolor系统源码

第一步&#xff1a;DDcolor介绍 DDColor 是最新的 SOTA 图像上色算法&#xff0c;能够对输入的黑白图像生成自然生动的彩色结果&#xff0c;使用 UNet 结构的骨干网络和图像解码器分别实现图像特征提取和特征图上采样&#xff0c;并利用 Transformer 结构的颜色解码器完成基于视…

PDF Shaper Ultimate 免安装中文破姐版 v14.1

软件介绍 PDF Shaper是一套完整的多功能PDF编辑工具&#xff0c;可实现最高的生产力和文档安全性。它允许你分割&#xff0c;合并&#xff0c;水印&#xff0c;署名&#xff0c;优化&#xff0c;转换&#xff0c;加密和解密您的PDF文件&#xff0c;也可插入和移动页&#xff0…

数字化思维的目的与价值,你真的懂吗?

在这个数字时代&#xff0c;数字化思维正逐渐成为企业和个人的能力。那么&#xff0c;数字化思维究竟以什么为中心&#xff1f;为了达成什么目的&#xff1f;又具有怎样的价值呢&#xff1f;让我们一起来揭开这个神秘的面纱。 数字化思维以数据为中心。数据成为了决策的关键依据…

Python系列一之excel的读取

这里我常用的 python 对于 excel 的读取库有两个&#xff0c;一个是 xlsxwriter 用于操作 excel 的写入&#xff0c;一个是 xlrd 用于 excel 文件的读取。 使用的库的版本如下&#xff1a; xlsx1.2.6xlrd1.1.0 xlsxwriter 写入 excel 新建一个 excel import xlsxwriterpat…