【AI论文精读1】RAG原始论文-针对知识密集型NLP任务的检索增强生成

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】


一、简介

一句话简介

该论文是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) 模型的背景、动机和研究贡献:

  1. 背景:大型语言模型(如 GPT、BERT)通过大量数据预训练,能够存储丰富的知识,并在微调后表现出色。然而,这些模型在处理需要外部知识的复杂任务时存在一定局限性,尤其是在访问和操作知识时。它们的知识更新也非常困难。

  2. RAG 模型的提出:为了解决这一问题,RAG 模型结合了两种不同的记忆系统:

    • 参数化记忆:模型内置的预训练语言模型,它已经通过大量数据学习了通用的语言知识。
    • 非参数化记忆:通过检索外部知识库(如维基百科)实时获取的信息,帮助模型生成答案。这样可以扩展模型的知识范围,增强生成效果。
  3. 两种 RAG 模型对比

    • 一种是在整个生成过程中使用相同的检索文档。
    • 另一种是在生成每个词时,可以从不同的文档中获取信息,进一步提升生成的灵活性。
  4. 实验结果:通过对多个知识密集型任务进行微调,实验结果表明 RAG 模型在多个开放领域的问答任务中表现优异,并且在语言生成任务中,生成的回答比传统模型更准确、更丰富。

RAG 模型的创新在于它通过结合内置的语言知识和外部实时检索知识,提升了模型的生成能力和知识灵活性,尤其适合处理复杂和开放性的问题。


三、引言

引言主要介绍了 RAG(Retrieval-Augmented Generation) 模型的背景、现有问题和模型设计和优势,特别是它如何结合预训练语言模型和实时文档检索来提升复杂任务中的性能。

  1. 背景和问题:预训练的语言模型(如 BERT 和 GPT)尽管在自然语言处理任务上取得了很大进展,但它们在处理知识更新、解释生成内容等方面存在局限。生成不真实的答案(称为“幻觉”)是它们的一个常见问题。

  2. RAG 模型的提出:为了解决这些问题,RAG 模型结合了预训练的语言模型和外部的非参数化知识源(如维基百科)进行知识检索。RAG 模型在生成答案时,能够不仅依赖模型自身的知识,还能通过实时检索相关文档来生成更加准确和丰富的答案。

  3. 创新点:与之前的模型相比,RAG 的创新点在于它能够同时使用预训练的参数化记忆(模型内部的知识)和非参数化记忆(外部检索到的文档),使得模型的知识库更加灵活、易于扩展,并能够生成多样且精确的答案。

  4. 实验结果:实验表明,RAG 在多个知识密集型任务中的表现优于传统模型,特别是在开放领域问答和事实校验任务中,RAG 展现了生成更准确、更详细回答的能力。


四、整体架构(用一个例子来阐明)

在这里插入图片描述

这张图展示了 RAG(Retrieval-Augmented Generation) 的整体架构,为了帮助理解这个架构,下面用一个通俗易懂的例子来解释

场景例子:

你想向智能助手提问:“谁是《神曲》的作者?”(这是你输入的问题)。

  1. 查询编码器(Query Encoder)

    • 你的问题先经过查询编码器,模型将这个问题转化为一个向量表示,即图中的 q ( x ) q(x) q(x)。可以把它想象成将自然语言问题转换为计算机能够理解的数字形式。
  2. 检索器(Retriever)

    • 接下来,检索器使用这个向量去搜索一个文档数据库,这个过程通过一种称为最大内积搜索(MIPS)的技术来实现。这个步骤的目的是找到最相关的文档,这些文档中可能包含关于《神曲》的答案。
    • 假设从数据库中找到了 4 个相关的文档 z 1 , z 2 , z 3 , z 4 z_1, z_2, z_3, z_4 z1,z2,z3,z4,每个文档都包含与问题相关的内容。
  3. 生成器(Generator)

    • 对于每个找到的文档,模型使用生成器(在图中表示为 p θ p_\theta pθ)生成一个可能的回答。这是通过“参数化记忆”完成的,即生成模型根据文档和问题生成一个文本回答。
    • 比如,对于文档 z 1 z_1 z1,生成器可能会生成:“《神曲》是但丁写的”,而对于文档 z 2 z_2 z2,生成器可能会产生类似的回答。
  4. 边缘化(Marginalization)

    • 因为检索器找到了多个文档,模型会对所有文档的生成结果进行综合处理,即边缘化。这个过程可以通过对所有文档生成的结果进行加权求和来实现。简单来说,模型会将所有文档的回答综合起来,最终给出一个最优的预测(即“但丁是《神曲》的作者”)。
  5. 最终输出

    • 最终,智能助手输出的回答可能是:“《神曲》是由但丁创作的”,这是结合了多个文档中的信息来生成的。

核心点:

  • 参数化记忆(Parametric Memory):模型通过预训练的权重来生成回答,这种权重是通过大量数据学习到的,这些权重参数已经存储了模型学到的大量事实知识。
  • 非参数化记忆(Non-Parametric Memory):模型依赖外部文档库(非参数化的存储方式)来辅助生成更准确的回答,而不是完全依赖模型内部的权重。

五、方法 (架构各部分详解)

注意:如果看不懂复杂的数学公式部分,可直接跳过,后面就有通俗易懂的例子解释

5.1 模型

下面为数学公式部分,看不懂可跳过

RAG 有两种不同模型:RAG-Sequence ModelRAG-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(yx)ztop-k(p(x))pη(zx)pθ(yx,z)
    其中, p η ( z ∣ x ) p_\eta(z \mid x) pη(zx) 是检索到的文档 z z z 给定查询 x x x 的概率, p θ ( y ∣ x , z ) p_\theta(y \mid x, z) pθ(yx,z) 是生成器基于文档 z z z 生成整个序列 y y y 的概率。

2. RAG-Token Model

  • 过程:在 RAG-Token 模型中,针对每一个生成的目标 token,模型可以从不同的文档中选择内容。与 RAG-Sequence 不同的是,生成器不使用同一个文档生成整个输出序列,而是在生成每个 token 时可以选择一个不同的文档进行生成。
  • 边缘化:每个 token 的生成也会进行边缘化处理,这意味着在每次生成新 token 时,都根据每个文档生成一个分布,并结合这些分布生成下一个 token。具体公式如下:
### RAG新框架的理解与实现 RAG(Retrieval-Augmented Generation)是一种结合检索生成能力的技术架构,旨在提升自然语言处理任务的效果。以下是关于如何理解、实现以及验证RAG新框架的关键点。 #### 1. **核心概念** RAG的核心在于将检索模块引入到生成过程中,从而增强模型对特定领域知识的学习能力和泛化效果。这种设计使得系统能够更好地利用外部数据源来补充预训练模型的知识不足[^2]。 #### 2. **主要组成部分** - **检索模块**: 负责从大规模文档集合中提取相关信息片段。该部分通常依赖于向量数据库或其他高效索引结构完成近似最近邻搜索操作[^4]。 - **生成模块**: 借助大型语言模型(LLMs),基于检索得到的结果生成高质量回复或摘要等内容形式输出[^3]。 #### 3. **具体实施步骤概述** 虽然不采用逐步描述方式,但仍需提及几个重要方面: - 数据准备阶段涉及构建适合当前应用场景需求特征表示形式的数据集; - 构建适配器网络连接不同子系统之间交互逻辑关系; - 设计评估指标体系用于衡量整个流程有效性及稳定性表现情况; 下面给出一段简单的Python伪代码展示基本思路: ```python from transformers import RagTokenizer, RagTokenForGeneration def initialize_rag_model(): tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") model = RagTokenForGeneration.from_pretrained("facebook/rag-token-nq") return tokenizer, model tokenizer, model = initialize_rag_model() context_input_ids = tokenizer.batch_encode_plus( ["some context"], max_length=100, return_tensors="pt" )["input_ids"] question_encoder_last_hidden_state = model.question_encoder(context_input_ids)[0] retrieved_doc_embeds = ... # Assume this is retrieved from a database. generated_text = model.generate( context_input_ids=context_input_ids, retrieved_doc_embeds=retrieved_doc_embeds ) print(tokenizer.decode(generated_text.squeeze(), skip_special_tokens=True)) ``` 此段代码展示了初始化RAG模型的过程,并演示了如何使用它生成文本[^1]。 #### 4. **验证与校对策略** 为了确保所开发的RAG系统达到预期目标,在部署前应进行全面测试。包括但不限于以下几个维度: - 准确度检验:对比实际结果同标准答案之间的差异程度; - 效率考量:分析响应时间长短及其资源消耗状况; - 可靠性保障:模拟多种异常场景下的行为模式观察其鲁棒特性;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值