RAG 讨论与研究 (5)- RAG 关键步骤(下)

今天我们继续来认识 RAG 中的关键步骤:

• 用户意图理解

• 知识源与解析

• 知识嵌入

• 知识索引

• 知识检索

• 知识整合

5 知识检索( Knowledge Retrieval)

在RAG系统中,知识检索是一个关键步骤,决定了生成模型能够获取到哪些外部知识。知识检索的目标是从大规模的外部知识库中快速、准确地找到与用户查询最相关的信息。为了实现这一目标,RAG系统通常依赖于高效的检索算法和索引结构。

知识检索是基于给定查询从向量数据库中识别并检索相关知识的过程。包括检索策略和搜索方法。检索策略关注如何识别相关知识,而搜索方法则定义了用于快速定位最相关信息的算法。

5.1 检索策略

检索的目标是根据输入查询识别并提取最相关的知识。通过使用相似性函数检索最相关的 top-k 个知识块。根据不同的相似性函数,检索策略可以分为三种类型:稀疏检索、稠密检索和混合检索。

稀疏检索

稀疏检索策略通过词语分析和匹配利用稀疏向量检索文档或知识块。传统的稀疏检索策略使用术语匹配指标,如 BM25、TF-IDF 和查询似然,通过计算词语出现频率和逆文档频率来估计文档与查询的相关性。

稠密检索

稠密检索策略将查询和文档编码到低维向量空间中,通过向量表示的点积或余弦相似度来衡量相关性。稠密检索器,如 DPR 和 ANCE,基于 BERT 架构的预训练语言模型,并在无监督数据上进行微调,以生成高质量的查询和文档表示。

最近,大语言模型(LLMs)在语义理解和表示能力方面表现出色。基于 LLMs 的强大能力,研究者们尝试使用 LLMs 生成判别性文本嵌入。例如,Llama2Vec 是一种轻量级方法,通过两个无监督预训练任务(EBAE 和 EBAR)将 LLMs 用于稠密检索。RepLLaMA 微调 LLaMA 作为稠密检索器,利用其整体表示长文档的能力进行高效文本检索。

混合检索

混合检索策略结合了稀疏和稠密检索技术,旨在通过利用每种方法的优势来优化性能。例如,RAP-Gen 和 BlendedRAG 将传统的关键词匹配与深度语义理解相结合,使系统既能从稀疏检索的效率中受益,又能通过稠密表示捕获更深层次的上下文。BASHEXPLAINER 采用两阶段训练策略,首先使用稠密检索器捕获语义信息,然后使用稀疏检索器获取词汇信息,从而实现性能优异的自动代码注释生成。这种双重策略解决了每种方法的局限性;例如,稀疏策略可能在语义细微差别上表现不佳,而稠密策略则可能计算密集。通过结合两者的优势,混合模型提高了各种任务中的检索准确性和相关性。

5.2 搜索方法

搜索方法是指为给定查询向量从向量数据库中高效识别相似向量的算法。搜索方法可以分为两种类型:最近邻搜索(NNS)和近似最近邻搜索(ANNS)。

最近邻搜索

NNS 的暴力算法是一种简单的算法,穷举扫描数据库中的所有向量,计算与查询向量的距离以识别最接近的向量。然而,这种方法计算成本高,在大规模数据集上不切实际。

引入了基于树的方法来提高搜索效率。例如,Bentley 提出了一种基于 k-d 树的方法,该方法将 k 维空间递归划分为超矩形区域,从而提高了数据组织和搜索速度。其他基于树的结构,如 Ball-tree、R-tree和 M-tree,也通过将数据划分为超球体、矩形或度量空间等结构来增强最近邻搜索,从而提高了搜索性能,特别是在高维和复杂数据集中。

近似最近邻搜索

ANNS 在准确性、速度和内存效率之间取得了平衡,使其特别适用于大规模和高维数据。这包括基于哈希的方法、基于树的方法、基于图的方法和基于量化的方法。

  • 基于哈希的方法,将高维向量转换为二进制代码,优化内存使用并加速搜索操作。例如,深度哈希使用深度神经网络学习哈希函数,将高维向量映射为二进制代码,同时保留相似数据之间的语义关系。

  • 基于树的 ANNS 方法,包括 K-means 树和 ANNOY,通过层次化组织数据,通过高效遍历树结构来减少搜索空间。这些方法将数据集划分为分区或簇,使得在搜索过程中仅探索相关区域。

  • 基于图的方法,如分层可导航小世界(HNSW),通过反映数据点之间接近度的边连接数据点,从而通过导航图快速进行最近邻搜索。

  • 基于量化的方法,如乘积量化,旨在通过将向量量化为较小的码本来压缩数据,从而在保持搜索速度和准确性之间良好平衡的同时减少内存需求。

多样化的 ANNS 方法为大规模、高维数据集中的快速高效最近邻搜索提供了强大的解决方案,每种方法在准确性、速度和内存使用方面都有其自身的权衡。

6 知识整合

知识整合是指将检索到的外部知识与生成模型的内部知识相结合,以提高输出的准确性和连贯性。基本上,知识整合可以分为三种类型:输入层整合、中间层整合和输出层整合。

6.1 输入层整合

输入层整合是指在输入层将检索到的信息与原始查询直接整合,旨在增强生成过程中的上下文信息。根据整合方法的不同,输入层整合可以分为两种类型:文本级整合和特征级整合。

文本级整合

将检索到的 top-k 文档直接与查询拼接。为了减少低质量信息的影响并更好地利用大语言模型(LLMs)的上下文学习能力,一些方法对知识块进行重新排序,优先处理最相关的内容,而另一些方法则应用加权过滤从检索内容中去除不相关信息。由于 LLMs 的输入长度限制,对上下文进行压缩,使模型能够在有限的输入大小内学习更多信息。

特征级整合

特征级整合侧重于在特征级别将检索内容的编码形式与原始输入整合。与简单地拼接原始文本不同,将输入查询和检索到的文档转换为特征表示(如稠密或稀疏向量),然后再输入到模型中。通过在特征表示而非原始文本上操作,特征级整合允许对输入数据进行更灵活的操纵。

6.2 中间层整合

中间层整合是指将外部知识整合到生成器的隐藏层中。基于注意力的方法 是中间层整合中常见的方法之一。

  • RETRO 模型:引入了一种新颖的交叉注意力模块,将检索到的信息与模型的中间表示相结合。

  • TOME:引入了 提及记忆 机制,通过存储和检索实体提及表示,将外部知识整合到 Transformer 中。

  • LongMem框架:使用自适应残差网络进行记忆检索,结合注意力机制高效访问和检索相关的长期记忆。

6.3 输出层整合

输出层整合是指在生成器的输出层整合检索到的知识。这种方法通常将检索知识的 logits 与模型的输出 logits 结合,从而实现增强生成。输出层整合可以分为两个主要分支:

  • 基于集成的整合 聚合来自检索的 logits,例如在 kNN-LM中,最近邻的概率与模型的预测进行插值,以提高泛化能力和鲁棒性。

  • 基于校准的整合 则使用检索 logits 来优化模型的预测置信度,如置信度增强的 kNN-MT。

下期预告

在下篇,我们将继续介绍 RAG 中其他的关键步骤:

• 回答生成

• 知识引用