RAG (Retrieval-Augmented Generation) 是由 Facebook AI Research (FAIR) 提出的。具体来说,RAG 是在 2020 年的论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 中首次被提出的。
为什么提出 RAG?
在 NLP 中,有很多知识密集型任务(Knowledge-Intensive Tasks),如开放领域问答、知识生成等,这些任务依赖于模型掌握大量的外部知识。然而,传统的预训练生成模型(如 GPT-3、BERT)存在以下问题:
- 知识静态性:模型只能使用训练过程中学到的知识,更新知识需要重新训练。
- 参数限制:模型大小有限,不可能记住所有知识。
- 生成质量的限制:没有外部支持的生成模型可能会生成不准确或不相关的内容。
RAG 的目标 是解决这些问题,通过引入一个外部知识库来增强生成模型的知识能力,同时使得模型更灵活和可扩展。
RAG 的创新
- 检索增强生成:
- 通过引入检索机制,模型在生成答案时可以动态查询外部知识库(如维基百科)。
- 端到端训练:
- 检索模块和生成模块可以端到端地联合训练,从而优化检索和生成的整体性能。
- 结合生成和检索的优点:
- 保留生成模型的语言生成能力,同时利用检索模块动态补充知识,提升生成的准确性和相关性。
RAG 的核心思想
传统生成模型(如 GPT、BERT)在回答问题时依赖于预训练数据的记忆,而 RAG 提供了一种动态查询外部知识库的能力。具体而言:
- 检索(Retrieval):
- 通过检索模型,从外部知识库(如维基百科、企业文档)中找到与输入问题最相关的文档。
- 生成(Generation):
- 将检索到的文档作为上下文输入生成模型,由生成模型(如 BART、GPT)生成答案。
这种设计使 RAG 能够动态获取外部知识,解决生成模型对训练数据依赖的问题。
RAG 的工作流程
-
输入问题:
用户提供一个查询(Query),例如“Who won the Nobel Prize in Physics in 2023?” -
检索阶段(Retrieval):
- 使用基于嵌入的检索模型(如 SentenceTransformer、BM25、Dense Retriever)从知识库中挑选最相关的文档。
- 知识库的内容通常被预处理为嵌入向量,存储在向量数据库(如 FAISS)中。
- 输出是检索到的文档集合(例如 5 个文档)。
-
生成阶段(Generation):
- 将检索到的文档与查询合并,作为上下文输入到生成模型中(如 BART、GPT)。
- 模型基于上下文生成答案。
-
输出答案:
最终生成的答案由生成模型直接输出。