一、简介
一句话简介
该论文是RAG的开山之作,提出了一种新的模型架构,将检索和生成结合在一起,以解决预训练模型在知识密集型自然语言处理任务中的局限性。
作者、引用数、时间
该文出自 Facebook AI Research 团队,Patrick Lewis、Ethan Perez等人,提交于arXiv,且已被NeurIPS 2020接收,第一版发布于2020年5月22日,被引用数:3600多次。
论文地址
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
开源代码地址
RAG 实验的代码已经开源,作为 HuggingFace Transformers Library(Wolf 等人,2019)的一部分,可在此链接查看:
https://github.com/huggingface/transformers/tree/main/examples/research_projects/rag
demo地址
https://huggingface.co/rag/
二、摘要
摘要讨论了 RAG(Retrieval-Augmented Generation) 模型的背景、动机和研究贡献:
-
背景:大型语言模型(如 GPT、BERT)通过大量数据预训练,能够存储丰富的知识,并在微调后表现出色。然而,这些模型在处理需要外部知识的复杂任务时存在一定局限性,尤其是在访问和操作知识时。它们的知识更新也非常困难。
-
RAG 模型的提出:为了解决这一问题,RAG 模型结合了两种不同的记忆系统:
- 参数化记忆:模型内置的预训练语言模型,它已经通过大量数据学习了通用的语言知识。
- 非参数化记忆:通过检索外部知识库(如维基百科)实时获取的信息,帮助模型生成答案。这样可以扩展模型的知识范围,增强生成效果。
-
两种 RAG 模型对比:
- 一种是在整个生成过程中使用相同的检索文档。
- 另一种是在生成每个词时,可以从不同的文档中获取信息,进一步提升生成的灵活性。
-
实验结果:通过对多个知识密集型任务进行微调,实验结果表明 RAG 模型在多个开放领域的问答任务中表现优异,并且在语言生成任务中,生成的回答比传统模型更准确、更丰富。
RAG 模型的创新在于它通过结合内置的语言知识和外部实时检索知识,提升了模型的生成能力和知识灵活性,尤其适合处理复杂和开放性的问题。
三、引言
引言主要介绍了 RAG(Retrieval-Augmented Generation) 模型的背景、现有问题和模型设计和优势,特别是它如何结合预训练语言模型和实时文档检索来提升复杂任务中的性能。
-
背景和问题:预训练的语言模型(如 BERT 和 GPT)尽管在自然语言处理任务上取得了很大进展,但它们在处理知识更新、解释生成内容等方面存在局限。生成不真实的答案(称为“幻觉”)是它们的一个常见问题。
-
RAG 模型的提出:为了解决这些问题,RAG 模型结合了预训练的语言模型和外部的非参数化知识源(如维基百科)进行知识检索。RAG 模型在生成答案时,能够不仅依赖模型自身的知识,还能通过实时检索相关文档来生成更加准确和丰富的答案。
-
创新点:与之前的模型相比,RAG 的创新点在于它能够同时使用预训练的参数化记忆(模型内部的知识)和非参数化记忆(外部检索到的文档),使得模型的知识库更加灵活、易于扩展,并能够生成多样且精确的答案。
-
实验结果:实验表明,RAG 在多个知识密集型任务中的表现优于传统模型,特别是在开放领域问答和事实校验任务中,RAG 展现了生成更准确、更详细回答的能力。
四、整体架构(用一个例子来阐明)
这张图展示了 RAG(Retrieval-Augmented Generation) 的整体架构,为了帮助理解这个架构,下面用一个通俗易懂的例子来解释。
场景例子:
你想向智能助手提问:“谁是《神曲》的作者?”(这是你输入的问题)。
-
查询编码器(Query Encoder):
- 你的问题先经过查询编码器,模型将这个问题转化为一个向量表示,即图中的 q ( x ) q(x) q(x)。可以把它想象成将自然语言问题转换为计算机能够理解的数字形式。
-
检索器(Retriever):
- 接下来,检索器使用这个向量去搜索一个文档数据库,这个过程通过一种称为最大内积搜索(MIPS)的技术来实现。这个步骤的目的是找到最相关的文档,这些文档中可能包含关于《神曲》的答案。
- 假设从数据库中找到了 4 个相关的文档 z 1 , z 2 , z 3 , z 4 z_1, z_2, z_3, z_4 z1,z2,z3,z4,每个文档都包含与问题相关的内容。
-
生成器(Generator):
- 对于每个找到的文档,模型使用生成器(在图中表示为 p θ p_\theta pθ)生成一个可能的回答。这是通过“参数化记忆”完成的,即生成模型根据文档和问题生成一个文本回答。
- 比如,对于文档 z 1 z_1 z1,生成器可能会生成:“《神曲》是但丁写的”,而对于文档 z 2 z_2 z2,生成器可能会产生类似的回答。
-
边缘化(Marginalization):
- 因为检索器找到了多个文档,模型会对所有文档的生成结果进行综合处理,即边缘化。这个过程可以通过对所有文档生成的结果进行加权求和来实现。简单来说,模型会将所有文档的回答综合起来,最终给出一个最优的预测(即“但丁是《神曲》的作者”)。
-
最终输出:
- 最终,智能助手输出的回答可能是:“《神曲》是由但丁创作的”,这是结合了多个文档中的信息来生成的。
核心点:
- 参数化记忆(Parametric Memory):模型通过预训练的权重来生成回答,这种权重是通过大量数据学习到的,这些权重参数已经存储了模型学到的大量事实知识。
- 非参数化记忆(Non-Parametric Memory):模型依赖外部文档库(非参数化的存储方式)来辅助生成更准确的回答,而不是完全依赖模型内部的权重。
五、方法 (架构各部分详解)
注意:如果看不懂复杂的数学公式部分,可直接跳过,后面就有通俗易懂的例子解释
5.1 模型
下面为数学公式部分,看不懂可跳过
RAG 有两种不同模型:RAG-Sequence Model 和 RAG-Token Model。它们主要区别在于如何处理检索到的文档和如何在生成答案时进行边缘化处理。
1. RAG-Sequence Model
- 过程:在 RAG-Sequence 模型中,检索到的文档作为一个潜在变量,整个序列的生成过程使用相同的文档。也就是说,对于给定的查询 x x x,检索器会找到前 k k k 个相关的文档,然后生成器使用同一个文档来生成整个输出序列。
- 边缘化:在生成完成后,模型对所有文档的输出进行边缘化处理。具体的公式是:
p RAG-Sequence ( y ∣ x ) ≈ ∑ z ∈ top-k ( p ( ⋅ ∣ x ) ) p η ( z ∣ x ) p θ ( y ∣ x , z ) p_{\text{RAG-Sequence}}(y|x) \approx \sum_{z \in \text{top-k}(p(\cdot|x))} p_\eta(z|x) p_\theta(y|x, z) pRAG-Sequence(y∣x)≈z∈top-k(p(⋅∣x))∑pη(z∣x)pθ(y∣x,z)
其中, p η ( z ∣ x ) p_\eta(z \mid x) pη(z∣x) 是检索到的文档 z z z 给定查询 x x x 的概率, p θ ( y ∣ x , z ) p_\theta(y \mid x, z) pθ(y∣x,z) 是生成器基于文档 z z z 生成整个序列 y y y 的概率。
2. RAG-Token Model
- 过程:在 RAG-Token 模型中,针对每一个生成的目标 token,模型可以从不同的文档中选择内容。与 RAG-Sequence 不同的是,生成器不使用同一个文档生成整个输出序列,而是在生成每个 token 时可以选择一个不同的文档进行生成。
- 边缘化:每个 token 的生成也会进行边缘化处理,这意味着在每次生成新 token 时,都根据每个文档生成一个分布,并结合这些分布生成下一个 token。具体公式如下: