大型语言模型(LLMs)凭借其庞大的参数规模,在多个领域取得了显著成功,成为自然语言处理(NLP)的基础。然而,它们仍面临三大关键问题:
-
幻觉(Hallucination) —— 模型可能生成内容流畅但事实错误的回答;
-
知识更新困难 —— 更新模型内部知识需重新训练或微调,成本高昂;
-
缺乏领域专用知识 —— 通用 LLM 难以满足特定领域的专业需求。
为弥补这些不足,检索增强生成(RAG) 被提出,它通过引入外部知识库来增强 LLM 的能力。本文系统回顾了 RAG 的关键技术,尤其关注其核心模块——**检索器(retriever)与检索融合(retrieval fusion)**方法。
文章内容
-
系统性地介绍了 RAG 的各个组成部分,包括从构建到查询的检索器细节,以及检索融合的技术,并提供了教程代码。
-
展示了不同的 RAG 训练策略,包括带/不带数据存储更新的 RAG。
-
进一步探讨了 RAG 在下游 NLP 任务和实际 NLP 场景中的应用。
-
最后指出了 RAG 值得探索的未来方向以及亟需解决的主要挑战。
检索增强生成(Retrieval-Augmented Generation, RAG)概述
对 RAG 在自然语言处理(NLP)中的整体框架进行介绍。正如图 1 所示,RAG 通常由三个模块组成:检索器(retriever)、生成器(generator) 和 检索融合(retrieval fusions)。

1. 检索器模块(Retriever)
检索器通常包含三个核心组件:
-
编码器(encoder):将输入编码为向量表示(embeddings)。
-
高效索引(efficient indexing):支持近似最近邻搜索(Approximate Nearest Neighbor, ANN)。
-
数据存储(datastore):以键值对(key-value pairs)的形式存储外部知识。
检索器的主要挑战在于检索效率与检索质量之间的平衡:
-
检索效率(retrieval efficiency):指获取相关信息的速度,包括编码加速、索引优化、数据存储中的批量查询等。
-
检索质量(retrieval quality):指检索到信息的相关性,包括切分表示学习(chunk representation learning)、先进的近似最近邻搜索算法等。
2. 检索融合(Retrieval Fusions)
检索融合的目标是利用检索到的信息增强生成效果。主要分为三类:
-
基于查询的融合(query-based fusion):在将输入送入生成器之前,将检索结果拼接或注入到输入中。
-
基于 logits 的融合(logits-based fusion):在生成器输出层(logits)阶段进行融合,将检索结果的 logits 融合进来,使输出更鲁棒。
-
潜在空间融合(latent fusion):将检索结果的表示引入生成器的潜在表示中,从而在隐式层面提升模型性能。
3.生成器模块(Generator Module)
生成器模块可以分为两类:默认生成器(default generators)和检索增强生成器(retrieval-augmented, RA generators)。
默认生成器包括大多数经过预训练或微调的大型语言模型,如 GPT 系列模型、Mistral 模型 以及 Gemini 系列模型。检索增强生成器(RA generators)指的是在预训练或微调过程中包含检索融合模块的生成器,例如 RETRO 和 Enc-Dec 。这些生成器能够生成响应或进行预测。
RAG 的工作流程包括三个步骤:
(1) 根据给定输入,从外部数据库中检索相关信息;
(2) 基于融合技术,将检索到的信息与输入或中间状态进行融合;
(3) 生成器根据输入及相应的检索结果进行预测。
1.检索器(Retriever)
图 2 展示了使用检索器的两个阶段:首先是构建检索器,然后是查询检索器。接下来的章节将详细介绍每个阶段的具体内容。

使用大型自然语言语料库来构建一个检索器,该过程包括三个步骤:
-
语料切分(chunking corpus);
-
编码切分块(encoding chunks);
-
构建向量数据库(building the vector database)。
其中,构建向量数据库的过程包括建立 近似最近邻(Approximate Nearest Neighbor, ANN)索引,并以 键值对(key-value pairs) 的形式存储数据。
语料切分(Chunking Corpus):语料切分技术通常指将大型文档划分为较小的文本块(text chunks)
其核心思想包括以下两点:
(1) 用于建立索引的文本或向量表示应当在语义上相对独立,每个块包含一个核心思想,便于模型编码。过短的文本往往语义模糊,例如单词 “apple” 可能指水果,也可能指公司;
(2) 使用基于 Transformer 的模型对长序列进行编码会造成巨大的计算与资源开销,而将文本分成较短的块可以显著加速编码过程并节省内存成本。
因此,语料切分的主要挑战在于如何找到最佳的块大小(chunk size),以在语义完整性与编码效率之间取得平衡。
为解决这一挑战,在确定切分大小时需要考虑以下三个关键因素:
(1) 任务特性(Task’s property):不同任务可能适合不同类型的切分。例如,问答任务通常更适合短语级切分,而摘要任务则更偏好长文档切分。
(2) 编码器特性(Encoder’s property):不同的编码器模型在处理不同长度文本时表现不同。例如,sentence-transformer更适合单句编码,而 text-embedding-ada-002 在处理长文本时表现更优。
(3) 查询特性(Query’s property):用户查询的长度应与切分块的长度相匹配,以便使检索块中的上下文信息量与查询相协调,从而提高检索结果的相关性。例如,用短语构建的检索数据库对长文档查询几乎无效。
总的来说,并不存在统一的“最佳切分规则”,具体的切分策略应根据 RAG 的应用场景而定。
语料切分方法主要分为三类:
-
固定长度切分(Chunking with fixed length):最简单的方法,通过设置一个长度超参数顺序地分割文档。
-
语义切分(Semantic chunking):根据语义边界(如句号、换行符)划分文档,这些标记通常表示句子的结束。主流 NLP 工具包,如 NLTK 和 spaCy ,均提供了便捷的句子切分方法。
-
基于内容的切分(Content-based chunking):根据文档的结构特征进行分块。例如,电子病历可以根据章节划分,程序代码可以按函数块分割。
检索融合(Retrieval Fusions)
检索融合(Retrieval Fusions)是指如何有效地利用已检索到的外部知识来提升生成模型(generator)的性能。
根据融合方式的不同,检索融合大致分为三类:
-
基于查询的融合(Query-based Fusion)
-
基于 logits 的融合(Logits-based Fusion)
-
基于潜在表示的融合(Latent Fusion)
| 融合方式 | 位置 | 优点 | 缺点 | 代表方法 |
|---|---|---|---|---|
| 文本拼接 | 输入层 | 简单直接、可用于黑箱 LLM | 长度限制明显 | GPT-4 + RAG prompt |
| 特征拼接 | 编码层 | 表达力强 | 内存成本高 | FID |
| logits 融合 | 输出层 | 提高鲁棒性与精度 | 需访问 logits,不适用于黑箱 | kNN-LM, kNN-MT |
| 融合类型 | 引入位置 | 特点 | 优点 | 代表方法 |
|---|---|---|---|---|
| Logits 融合 - Ensemble | 输出层 | 固定权重融合 | 简单稳定 | kNN-LM, kNN-MT |
| Logits 融合 - Calibration | 输出层 | 动态置信度调整 | 提升翻译/生成可靠性 | Confidence-enhanced kNN-MT |
| Attention 潜在融合 | 隐层(Cross-Attention) | 结构性强,效果突出 | 高性能、高复杂度 | RETRO, Li [93], Wu [154] |
| Weighted-addition 潜在融合 | 隐层(向量加权) | 轻量高效 | 易扩展、低计算量 | EAE, ReFusion |
生成器(Generators)
本节介绍了典型的生成器(Generators)与检索增强生成器(Retrieval-Augmented Generators, RA Generators)。
这些模型通常都在大规模数据集上进行预训练,是整个 RAG(Retrieval-Augmented Generation)框架的核心部分。
普通生成器(Default Generators)
目前主流的生成器基本上都是基于 Transformer 架构 的大型语言模型(LLMs),通过对 Transformer 结构进行裁剪或改进而形成不同的系列模型。
常见的代表模型包括:
-
LLaMA 系列模型
-
GPT 系列模型
-
Gemini 系列模型
这些模型的共同点是:
它们去掉了 Transformer 的编码器部分(Encoder),
仅保留解码器部分(Decoder),并在其中包含:
-
注意力模块(Attention Module)
-
前馈网络模块(Feed-Forward Network, FFN)
生成器通常主要采用潜在融合(latent fusion)的方式,将检索到的知识融入大型语言模型(LLM)的隐藏状态(hidden states)中。

RAG 训练(RAG Training)**主要讲述了如何训练检索增强生成模型(RAG),并将其分为两大类:
- 不更新数据存储的 RAG 训练(RAG without Datastore Update)
- 更新数据存储的 RAG 训练(RAG with Datastore Update)
3401

被折叠的 条评论
为什么被折叠?



