检索增强生成:用于知识密集型NLP任务

论文概述

检索增强生成 (Retrieval-Augmented Generation, RAG) 是一个突破性的框架,它结合了预训练的参数化记忆(序列到序列模型)和非参数化记忆(维基百科的密集向量索引),专门用于知识密集型NLP任务。RAG模型使用预训练的神经检索器访问维基百科,然后将检索到的文档作为上下文传递给生成器,产生更具体、更多样化、更符合事实的输出。这项工作在开放域问答任务上达到了最先进水平,并证明了检索增强模型比纯参数化模型产生更可靠和可解释的输出。

论文信息:

  • 发布时间:2020-05-22
  • 作者:Patrick Lewis, Ethan Perez, Aleksandra Piktus等
  • 机构:Facebook AI Research, University College London, New York University
  • 研究方向:提示工程 (Prompt Engineering), 大型语言模型推理 (LLM Reasoning)
  • 核心技术:检索增强生成 (Retrieval Augmented Generation)

研究背景

大型语言模型在各类任务中展现出强大的能力,但在知识密集型任务中仍面临挑战。本研究针对以下问题展开:

现有问题

  • 纯参数化模型容易产生幻觉(生成不准确的事实)
  • 模型内部存储的知识难以更新和追溯
  • 知识密集型任务需要访问大量外部事实知识

研究动机

本研究旨在探索结合检索和生成的混合架构,通过引入非参数化记忆(外部知识库)来增强参数化模型的能力,特别关注检索增强生成 (retrieval-augmented-generation)、RAG、知识密集型任务 (knowledge-intensive) 等关键技术。

核心方法

方法概述

RAG框架由两个关键组件组成:(1) 检索器 - 使用DPR(密集段落检索,Dense Passage Retrieval)作为预训练的双编码器,对问题进行编码并通过MIPS(最大内积搜索)从维基百科索引中检索相关文档;(2) 生成器 - 使用BART-large作为预训练的序列到序列模型,根据问题和检索到的文档生成输出。两种变体:RAG-Sequence在完整输出上对检索文档进行边缘化;RAG-Token在生成每个词元时进行边缘化。两个组件仅使用问答对监督进行端到端训练。

本方法的核心在于通过结合参数化和非参数化记忆,使模型既能利用预训练知识,又能访问最新的外部知识源,提升输出的准确性和可解释性。

关键创新点

创新 1:首次系统性地结合密集检索和神经生成,创建混合参数化/非参数化记忆系统

创新 2:在三个开放域问答基准测试上达到最先进水平,超越纯参数化和特定任务的检索-提取架构

创新 3:生成更具体、更多样化、更符合事实的文本,有效缓解幻觉问题

创新 4:通过检索文档的可追溯来源提供可解释性

创新 5:通过索引更新实现知识更新,无需模型重新训练

技术特点

  • 混合架构设计:结合参数化和非参数化记忆的优势
  • 端到端训练:检索器和生成器联合优化
  • 灵活适应:支持不同的边缘化策略(序列级或词元级)
  • 知识可更新:通过更新检索索引即可获取最新知识
  • 可解释性强:可追溯生成内容的知识来源

实验结果

Benchmark 性能

在以下任务上进行了评估:(1) 开放域问答 - Natural Questions(44.5% vs BART的34.5%)、TriviaQA(56.1% vs 50.1%)、WebQuestions(45.5% vs 37.4%);(2) 知识密集型生成 - MS-MARCO和Jeopardy问题生成显示出显著更好的性能;(3) 生成质量分析 - 人类评估显示事实错误减少30%以上,通过检索不同文档实现更高的多样性,更具体的细节。关键发现:检索增强显著提高事实准确性和可解释性;RAG可以通过索引更新获取最新知识,无需重新训练。

性能分析

实验结果表明,该方法在多个主流基准测试上都取得了显著的性能提升,特别是在需要准确事实知识的问答任务上表现突出。

关键发现

  • 事实准确性提升:检索增强显著减少幻觉和事实错误
  • 生成多样性增加:通过检索不同文档产生更多样化的输出
  • 可解释性改善:可以追溯到具体的知识来源
  • 知识可更新性:无需重新训练即可更新知识库

实际应用

适用场景

  • 开放域问答:回答需要广泛知识的问题
  • 事实验证:验证陈述的真实性
  • 知识密集型对话:需要准确事实信息的对话系统
  • 内容生成:生成基于事实的文章和摘要

实现建议

在实际项目中应用检索增强生成时,建议:

  1. 构建高质量索引:准备准确、全面的知识库索引
  2. 优化检索策略:调整检索数量和相关性阈值
  3. 监控生成质量:定期评估事实准确性和相关性
  4. 保持索引更新:定期更新知识库以确保信息时效性

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# RAG基本流程示例
class RAGModel:
def __init__(self, retriever, generator):
self.retriever = retriever # DPR检索器
self.generator = generator # BART生成器

def forward(self, question):
# 1. 检索相关文档
documents = self.retriever.retrieve(question, k=5)

# 2. 将文档作为上下文传递给生成器
context = self.format_context(question, documents)

# 3. 生成答案
answer = self.generator.generate(context)

return answer, documents # 返回答案和来源

相关资源

  • arXiv 论文arXiv:2005.11401
  • 相关论文:DPR (Dense Passage Retrieval)、BART、T5
© 2025 Generative AI Discovery All Rights Reserved.
Theme by hiero