检索增强生成(RAG)概述

检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合了检索和生成的自然语言处理技术,旨在通过利用外部知识数据库来增强大型语言模型(LLMs)的能力,从而解决幻觉问题和知识更新的挑战。

组成部分

检索器(Retriever)检索器是RAG系统的关键组成部分,负责从外部知识库中检索与输入问题或任务相关的信息。这一过程通常涉及查询构建、信息检索和结果筛选等步骤。

检索融合(Retrieval Fusions)检索融合技术是RAG中将检索到的信息与语言模型结合的过程。这一技术可以采取多种方式,例如,将检索结果作为上下文输入到语言模型中,或者通过特定算法将检索结果与模型生成的内容进行融合。

生成器(Generator)生成器是RAG系统中负责生成最终输出的部分。它可以是一个预训练的语言模型,根据检索到的信息和输入问题生成答案或完成特定任务。

RAG训练策略

RAG的训练策略可以根据是否包含数据存储更新而有所不同:

  • 带数据存储更新的RAG:在这种策略中,模型在训练过程中会不断更新其知识库,以保持信息的最新性。
  • 不带数据存储更新的RAG:这种策略下,模型使用固定的知识库进行训练和推理,不进行在线更新。

RAG的应用

RAG技术在多种NLP任务和实际场景中展现出了其强大的应用潜力:

  • 下游NLP任务:如问答系统、摘要生成、文本补全等。
  • 实际NLP场景:包括但不限于客户服务、知识管理、教育辅助等。

教程代码以下是检索融合技术的示例代码,展示了如何将检索到的信息与语言模型的输出进行融合:

python# 示例代码,展示检索融合过程def retrieval_fusion(retrieved_info, model_output): # 融合逻辑 pass 请注意,上述代码仅为示例,实际应用中需要根据具体任务和模型进行调整。
图片

1. 检索器(Retriever)

检索器(Retriever) 是检索增强生成(RAG)中的一个关键组件,其主要作用是从一个外部知识库中检索与输入相关的信息。

使用检索器的两个阶段two-stages

图片
在构建高效的文档检索系统时,我们首先需要对文档进行分块处理,然后对这些块进行编码,并建立索引以支持快速检索。以下是构建阶段的关键步骤:

构建阶段

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)

  • 索引的目的是加速多维查询嵌入的搜索过程,主要关注近似最近邻搜索的效率。

4. 选择相似性度量(Choice of Similarity Metrics)

  • 使用余弦相似度、欧几里得相似度等衡量查询与块嵌入的相关性。

5. 降维(Dimension Reduction on Embeddings)

  • 主成分分析(PCA):转换数据到新坐标系,保留重要特征。
  • 局部敏感哈希(LSH):通过桶映射降低维度,保留相似性。
  • 乘积量化(PQ):划分高维空间为更小的量化子空间。

6. 高级ANN索引(Advanced ANN Indexing)

  • IVFPQ:结合倒排文件和乘积量化,用于ANN搜索。
  • HNSW:使用分层图结构执行ANN搜索。
  • 基于树的索引:如KD-Trees等,组织高维向量。

7. 构建数据存储(Building the Datastore with Key-Value Pairs)

  • 使用LMDB或RocksDB等数据库存储数据,支持检索和数据持久性。
  • 向量数据库如Milvus、FAISS、LlamaIndex等,提供索引和数据存储。

查询阶段

在查询阶段,使用相同的编码器对查询进行编码,并利用预建索引和数据存储进行近似最近邻搜索,以检索相关值。

2. 检索融合(Retrieval Fusions)

  • 探讨如何将检索到的知识整合到生成模型中,提高性能。

RAG中融合方法的类别

  • 这部分内容需要进一步阐述,以展示如何在检索增强生成(RAG)模型中融合不同的方法。 注意:以上内容是对原始文本的结构化重写,确保了条理性和逻辑性。
    图片

检索增强生成(RAG)技术概述

检索融合类型

基于查询的融合(Query-based Fusion)

  • 文本连接:将检索到的文本与查询文本直接连接。
  • 特征连接:检索文本编码为特征向量后与查询特征合并。
  • FID:特征融合方法,将检索文本编码为稀疏或密集表示。

潜在融合(Latent Fusion)

  • 基于注意力的融合:使用交叉注意力机制嵌入检索知识。
  • RETRO:引入新交叉注意力模块的检索增强预训练语言模型。
  • 加权添加:通过学习权重将检索知识以加权方式添加。

基于对数的融合(Logits-based Fusion)

  • 集成融合:结合检索知识对数与模型输出对数。
  • kNN-LM 和 kNN-MT:利用最近邻模型对数增强语言模型和机器翻译。
  • 校准融合:使用检索知识对数校准模型预测。

生成器(Generator)

生成器类型

  • 默认生成器:如GPT系列、Mistral、Gemini等大型语言模型。
  • 检索增强生成器:包含融合检索信息模块的预训练/微调生成器。

生成器的功能生成器基于输入和检索结果生成文本。

生成器的架构通常采用或修改基于Transformer的架构,专注于解码器模块。

RAG训练策略

RAG的不同训练策略

  • 包括/不包括数据存储更新

注意事项

  • 内容需有条理性、结构性。
  • 使用Markdown格式。
  • 特定字段替换为’aaaaaaa’。 以上内容为检索增强生成(RAG)技术的简要概述,涵盖了融合类型、生成器类型及其特点和功能,以及RAG模型的训练策略。
    图片

RAG 训练分类与数据存储更新

RAG 训练类型

  • 不更新数据存储的RAG训练:此类型训练专注于更新RAG模型中各个模块的可训练参数,而数据存储中的知识保持原样。
  • 更新数据存储的RAG训练:首先更新数据存储中的知识,然后对RAG模型中的参数进行更新。

数据存储更新(RAG without Datastore Update)

检索器训练(Training Retriever)

  • 训练检索器编码器并重建索引,通常采用密集编码方法。
  • 根据训练目标,可能需要更换编码器或使用对比学习来训练现有编码器。

生成器训练(Training Generator)

  • 更新生成器的参数或检索融合模块中的参数。
  • 采用参数高效的微调技术,例如LoRA,以解决大型语言模型(LLMs)的微调问题。

联合训练检索器和生成器(Jointly Training Retriever and Generator)

  • 同时训练检索器和生成器以提升下游任务的性能。
  • 确保从输入到输出的正向过程中的可微性,实现端到端优化。

数据存储更新(Datastore Update)

  • 涉及两个阶段:先更新知识库,然后训练检索器和生成器。更新知识库有三种情况:用可训练的嵌入更新、用新值更新和用新语料库更新。
  • 第一种情况中,值通常是可训练的嵌入,并且与RAG中的参数同时或异步更新。最后两种情况通常指的是用最新信息更新知识库。
  • 以问答语料库为例,用新值更新指的是更新现有问题的答案,而用新语料库更新指的是添加新的问答对。更新现有键的值需要先查询现有的键值对,然后执行就地更新。对于新的语料库,数据存储需要先执行插入操作,然后重建或更新新键的索引。更新数据存储后,训练检索器和生成器的过程与没有数据存储更新的RAG相似。

RAG的应用场景

RAG技术在NLP任务中的应用

LLM-based Autonomous Agents

  • 利用RAG技术为基于大型语言模型的自主智能体提供更广泛的信息访问能力,增强其决策和问题解决能力。
  • 智能体可以使用RAG从自己的外部记忆中检索相关信息,以增强其理解和决策能力。
  • 智能体还可以利用工具搜索网络,获取最新信息,这对于需要最新知识的情境非常有用。

框架(Frameworks)

  • 介绍了如Langchain和LLaMAindex等框架,它们通过集成复杂的检索机制与生成模型,促进了外部数据在语言生成过程中的整合。
https://arxiv.org/pdf/2407.13193

推荐阅读材料

以下是为您精心挑选的几篇关于RAG(Retrieval-Augmented Generation)技术及其应用的深度文章,这些文章深入浅出地探讨了RAG技术的原理、应用案例以及实现方法。

RAG高效应用指南系列

关注我们,获取更多AI技术动态和深度解析。

👆👆👆欢迎关注👆👆👆

互动环节

  • 分享:将这些有价值的内容分享给需要的朋友。
  • 点赞:如果你觉得这些材料对你有帮助,别忘了点赞支持。
  • 在看:持续关注,获取更多更新。 你最好看!👇