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

server/2024/9/24 10:20:28/

论文: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.ppmy.cn/server/37346.html

相关文章

一起深度学习24/04/30——ResNet

ResNet神经网络 定义ResNet Block定义ResNet18加载数据集并训练、测试 定义ResNet Block ResNet Block 的作用: 是一个残差块,用于构建ResNet 主要是为了解决神经网络中的梯度爆炸和梯度消失问题,以及缓解训练过程中的退化问题。 在传统的神经…

书生·浦语大模型全链路开源开放体系

书生浦语大模型全链路开源体系InternLM2技术报告 InternLM 实战营第二期(第一节) 为了帮助社区用户高效掌握和广泛应用大模型技术,我们重磅推出书生浦语大模型实战营系列活动,旨在为开发者们提供全面而系统的大模型技术学习课程。…

智能电视遇险?海信、TCL、小米“上下求索”

众所周知,智能化已经成为各行各业的发展新方向,家电行业更是早早掀起了智能化浪潮,越来越多的智能家电产品涌现出来。在客厅场景,电视毫无疑问是众多家电中的C位,而在智能化浪潮的助推下,电视这一产品同样开…

crossover怎么打开软件 mac怎么下载steam crossover下载的软件怎么运行

CrossOver是一款Mac和Linux平台上的类虚拟机软件,通过CrossOver可以运行Windows的可执行文件。如果你是Mac用户且需要使用CrossOver,但是不知道CrossOver怎么打开软件,如果你想在Mac电脑上玩Windows游戏,但不知道怎么下载Steam&am…

vue3使用tsx/jsx时报错:JSX 元素隐式具有类型 “any“,因为不存在接口 “JSX.IntrinsicElements“。

vue3使用tsx/jsx时报错:JSX 元素隐式具有类型 "any",因为不存在接口 "JSX.IntrinsicElements"。 在项目中安装:npm install types/react npm install types/react

使用Axios从前端上传文件并且下载后端返回的文件

前端代码: function uploadAndDownload(){showLoading();const fileInput document.querySelector(#uploadFile);const file fileInput.files[0];const formData new FormData()formData.append(file, file)return new Promise((resolve, reject) > {axios({…

shell常用文件处理命令

1. 解压 1.1 tar 和 gz 文件 如果你有一个 .tar 文件,你可以使用以下命令来解压: tar -xvf your_file.tar在这个命令中,-x 表示解压缩,-v 表示详细输出(可选),-f 后面跟着要解压的文件名。 如果你的 .tar 文件同时被 gzip 压缩了(即 .tar.gz 文件),你可以使用以下…

我们该如何看待AIGC(人工智能)

引言 人工智能(AI)是当今世界科技发展的前沿领域之一,它正在以前所未有的速度和规模影响着我们的生活、工作和思考方式。AIGC,即人工智能生成内容(Artificial Intelligence Generated Content)&#xff0c…