RAG 全栈技术最新进展全面解析
检索增强生成(Retrieval-Augmented Generation, RAG)的出现,利用外部知识数据库来增强大型语言模型(LLMs),有效弥补了 LLMs 存在的幻觉问题、知识更新滞后等关键缺陷。本文系统地介绍了 RAG 的每个组成部分,特别是检索器和检索融合的重要技术,并展示了不同的 RAG 训练策略及其在下游 NLP 任务和实际场景中的应用。
自然语言处理中检索增强生成的概述
RAG 架构主要由三个核心部分组成:
- 检索器(Retriever):负责从外部知识库中查找相关信息。
- 检索融合(Retrieval Fusions):决定如何将检索到的信息整合到生成过程中。
- 生成器(Generator):基于输入和检索内容生成最终响应。

1. 检索器(Retriever)
检索器是 RAG 中的关键组件,其主要作用是从一个外部知识库中检索与输入相关的信息。使用检索器通常包含两个阶段:构建阶段和查询阶段。
构建阶段
构建阶段涉及将文档分割成小块,对这些块进行编码,并建立索引以支持高效的检索。
1. 分块语料库(Chunking Corpus)
- 固定长度分块:通过设定长度参数顺序地分割文档,简单但可能破坏语义完整性。
- 基于语义的分块:根据语义标志(如句号或新行字符)切割文档,保持句子完整。
- 基于内容的分块:根据文档的结构特征(如电子病历的章节或编程代码的功能块)进行分割,更适合结构化数据。
2. 编码块(Encoding Chunks)
- BERT 及其变体:如 RoBERTa、DistilBERT、ELECTRA,生成密集的语义嵌入。
- Siamese Encoders:设计用于学习输入之间相似性的神经网络,如 DPR、SimCSE。
- LLM-based Encoders:利用大型语言模型的表示能力,如 text-embedding-ada-002、bge-embedding。
- 稀疏编码:如词袋模型(BoW)、TF-IDF,通过高维向量表示文本,其中大部分元素为零。
- 密集编码:使用深度神经网络模型生成向量,每个维度都可以捕捉语义特征。
3. 索引构建(Building the Index)
索引的目的是加速多维查询嵌入的搜索过程,主要关注支持高效的近似最近邻搜索(ANN)。
- 选择相似性度量:余弦相似度、欧几里得相似度、曼哈顿距离、雅卡尔相似度等,用于衡量查询嵌入和块嵌入之间的相关性。
- 降维(Dimension Reduction on Embeddings):
- 主成分分析(PCA):一种统计技术,用于将原始数据转换为新坐标系,同时保留最重要的特征。
- 局部敏感哈希(LSH):通过将数据映射到桶中来显著降低维度,同时保留原始输入数据的相似性。
- 乘积量化(PQ):将高维空间划分为更小的、独立量化的子空间。
- 高级 ANN 索引:
- IVFPQ:结合倒排文件系统和乘积量化,用于高效和可扩展的 ANN 搜索。
- HNSW:使用分层图结构在高维空间中高效执行 ANN 搜索。
- 基于树的索引:如 KD-Trees、Ball Trees 和 VP-Trees,用于组织高维向量。
- 构建数据存储:使用专门的数据库(如 LMDB 或 RocksDB)存储和管理数据,以支持高效的检索和数据持久性。最近的一些工作提出了各种最先进的向量数据库,包括索引和数据存储,例如 Milvus、FAISS、LlamaIndex 等。
查询阶段
查询阶段使用相同的编码器对查询进行编码,然后利用预建索引和数据存储进行近似最近邻搜索,以检索相关值。
- 编码查询:使用与构建检索器时相同的编码器对查询进行编码,确保查询嵌入与检索器的嵌入空间一致。
- 近似最近邻搜索(ANN Search):利用预构建的索引和数据存储执行近似最近邻搜索,找到与查询最相似的数据。搜索过程涉及比较查询嵌入与聚类嵌入,选择候选聚类,然后在每个聚类内执行产品量化,找到最近邻。
- 索引搜索:搜索预构建的索引,找到 k 个最近邻,并返回这些最近邻的唯一标识符。
- 数据存储检索:根据最近邻的唯一标识符从数据存储中获取相应的值。
- 后处理:
- 重排序(Reranking):根据任务特定的目标重新排序检索到的知识,以提高相关性。
- 重要性加权:为检索到的知识分配重要性权重,过滤掉不太相关的上下文。
2. 检索融合(Retrieval Fusions)
深入探讨了如何将检索到的知识整合到生成模型中,以提高性能。RAG 中融合方法主要分为以下几类:
1. 检索融合类型
- 基于查询的融合(Query-based Fusion):将检索到的信息与输入查询直接连接或合并。
- 潜在融合(Latent Fusion):在生成模型的隐藏层中整合检索到的信息。
- 基于对数的融合(Logits-based Fusion):在生成模型的输出层整合检索到的信息。
2. 基于查询的融合技术
- 文本连接(Text Concatenation):将检索到的文本与查询文本直接连接,是最简单的方法。
- 特征连接(Feature Concatenation):将检索到的文本编码成特征向量后与查询特征向量合并。
- FID:一种特征融合方法,将检索到的文本编码为稀疏或密集表示,并将连接的特征作为输入。
3. 潜在融合技术
- 基于注意力的融合(Attention-based Fusion):使用交叉注意力机制将检索到的知识嵌入到模型的隐藏状态中。
- RETRO:一种使用检索增强的预训练语言模型,引入了一个新的交叉注意力模块。
- 加权添加(Weighted Addition):通过学习权重将检索到的知识嵌入以加权的方式添加到模型的隐藏状态中。
4. 基于对数的融合技术
- 集成融合(Ensemble-based Fusion):将检索到的知识的对数与模型输出的对数结合起来,作为集成预测的一部分。
- kNN-LM 和 kNN-MT:利用最近邻模型的对数进行语言模型和机器翻译的增强。
- 校准融合(Calibration-based Fusion):使用检索到的知识的对数对模型的预测进行校准或调整。
3. 生成器(Generator)
讨论了在检索增强生成(RAG)中使用的生成器类型及其特点。
1. 生成器类型
- 默认生成器:包括大多数预训练/微调的大型语言模型,如 GPT 系列、Mistral 模型和 Gemini 系列模型。
- 检索增强生成器(Retrieval-Augmented Generators):这些是包含融合检索信息模块的预训练/微调生成器,例如 RETRO 和 EncDec。
2. 生成器的功能
生成器负责生成响应或进行预测,它们通常基于输入和相应的检索结果来生成文本。
3. 生成器的架构
生成器通常采用或修改基于 Transformer 的架构,专注于解码器模块,包括注意力模块和前馈网络模块。
4. RAG 训练策略
深入讨论了检索增强生成(RAG)模型的训练方法和策略,包括是否更新数据存储的不同模式。
1. RAG 训练分类
- 不更新数据存储的 RAG 训练:只更新 RAG 中每个模块的可训练参数,数据存储中的知识保持不变。
- 更新数据存储的 RAG 训练:先更新数据存储中的知识,然后更新 RAG 中每个模块的参数。
2. 数据存储更新(RAG without Datastore Update)
- 检索器训练:训练检索器编码器并重建索引,通常涉及密集编码方法。根据训练目标,可能需要更换编码器或使用对比学习训练现有编码器。
- 生成器训练:更新生成器的参数或检索融合模块中的参数。采用参数高效的微调技术,如 LoRA,以解决大型语言模型(LLMs)的微调问题。
- 联合训练检索器和生成器:同时训练检索器和生成器以提高下游任务的性能。确保从输入到输出的正向过程中的可微性,以实现端到端优化。
3. 数据存储更新(Datastore Update)
此场景涉及两个阶段:更新知识库,然后训练检索器和生成器。更新知识库有三种情况:用可训练的嵌入更新、用新值更新和用新语料库更新。
- 在第一种情况下,值通常是可训练的嵌入,并且与 RAG 中的参数同时/异步更新。
- 最后两种情况通常指的是用最新信息更新知识库。以问答语料库为例,用新值更新指的是更新现有问题的答案,而用新语料库更新指的是添加新的问答对。
- 要更新现有键的值,首先需要查询现有的键值对,然后执行就地更新。对于新的语料库,数据存储首先需要执行插入操作,然后重建或更新新键的索引。
- 更新数据存储后,训练检索器和生成器类似于没有数据存储更新的 RAG。
5. RAG 的应用场景
RAG 技术在各种自然语言处理(NLP)任务中的应用十分广泛。
1. 语言模型(Language Modeling)
使用 RAG 提高预训练阶段的语言模型能力,通过修改生成器架构或在输入和输出中加入检索信息。
2. 机器翻译(Machine Translation)
利用 RAG 技术通过将外部知识融入翻译过程来提升翻译质量,可以是文本拼接或对数融合。
3. 文本摘要(Text Summarization)
应用 RAG 技术通过检索外部知识和相似文档来增强文本摘要任务,包括提取式和抽象式摘要。
4. 问答系统(Question Answering)
RAG 技术结合信息检索和模型生成,适用于开放域和封闭域的问答系统,提高问题理解和信息检索的准确性。
5. 信息提取(Information Extraction)
使用 RAG 技术提高信息提取任务的性能,包括命名实体识别(NER)、关系提取(RE)等子任务。
6. 文本分类(Text Classification)
利用 RAG 技术增强文本分类任务,如情感分析,通过不同的外部知识融合策略来提升模型性能。
7. 对话系统(Dialogue Systems)
应用 RAG 技术改进对话系统,通过检索历史对话或相关信息来生成更连贯、相关的响应。
6. RAG 技术在实际应用场景中的具体实现
1. LLM-based Autonomous Agents
利用 RAG 为基于大型语言模型的自主智能体提供更广泛的信息访问能力,增强决策和问题解决能力。
- 利用 RAG 从外部记忆检索信息:智能体可以使用 RAG 从自己的外部记忆中检索相关信息,以增强其理解和决策能力。
- 利用 RAG 使用工具搜索网络:智能体可以利用工具搜索网络,获取最新信息,这对于需要最新知识的情境非常有用。
2. 框架(Frameworks)
介绍了如 Langchain 和 LLaMAindex 等框架,它们通过集成复杂的检索机制与生成模型,促进了外部数据在语言生成过程中的整合。这些框架提供了标准化的接口来处理文档加载、分块、向量化和检索流程,大大降低了 RAG 系统的开发门槛。