RAG实际上第一步都是先做Retrieval,关于Retrieval的思路有很多,持续更新:
RetroMAE (论文RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder)
RetraoMAE包括两个模块,其一是一个类似于BERT的编码器,用于生成句向量,其二是一个一层transformer的解码器,用于重建句子。
在解码器部分采用了及其简单的网络结构跟非常激进的mask比例,从而使得解码任务变得极具挑战性,迫使encoder去生成高质量的句向量才能最终准确地完成原文本重建。
Bert解码策略有一种缺陷,就是训练信号只来源于被mask掉的token,而且每个mask掉的token都是基于同一个上下文重建的。于是研究人员提出了一种新的解码方法,Enhanced Decoding,具体做法如下。
- 首先生成两个不同的输入流H1(query)跟H2(context)
- 通过attention机制得到新的输出A,这里的M是一个mask矩阵,第i个token所能看得到的其他token是通过抽样的方式决定的(当然要确保看不到自身token,而且都要看得见第一个token,也就是encoder所产出CLS句向量的信息)
- 最终利用A跟H1去重建原文本,这里重建的目标不仅仅是被mask掉的token,而是全部token。
BGE (论文C-Pack: Packed Resources For General Chinese Embeddings)
这篇和数据相关比较多,核心的训练方法就是RetroMAE
M3-Embedding: Multi-Linguality, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
M3-Embedding联合了3种常用的检索方式,对应三种不同的文本相似度计算方法,具体如下。
-
Dense retrieval: 给定一个文本,获取语言模型最后一层上[CLS]位置的隐状态,经过标准化作为文本的稠密向量表征。通过计算query跟doc的向量表征之间的内积就知道文本之间的稠密检索相似度。这是目前主流text embedding模型用的比较多的一种检索方式,这部分表征更注重文本整体的语义信息。
-
Lexical Retrieval:给定一个文本,获取语言模型最后一层上所有位置的隐状态,每个位置对应原始文本中的一个token,依次将每个位置的隐状态通过一个全连接层+Relu函数得到该token的权重,将所有每个token的隐状态*对应的权重再求和作为文本的稀疏表征(如果文本包含两个以上相同的token,则该token的权重取其中最大的权重值)。很熟悉的感觉吧,很像tfidf,也跟RetroMAE-V2的第二部分特征很相似,这部分特征更在意文本中各个token的信息,重要的token就赋予更高的权重。
-
Multi-Vec Retrieval: 给定一个文本,获取语言模型最后一层上所有位置的隐状态,经过一个全连接矩阵跟标准化后得到文本的多向量表征(文本的多向量表征维度为n*d,其中n是文本长度,d是隐状态维度)。给定query,query上第i个位置跟doc的相似度的计算方式为依次计算query第i个位置的多向量表征跟doc各个位置上的多向量表征之间的内积,取其中最大值作为其得分,将query上所有位置跟doc的相似度平均求和就得到对应的多向量表征相似度。其实这就是稠密检索的一个引申版本。
M3-Embedding的训练损失也相对复杂,包括两部分损失。首先第一部分是对比学习损失,沿用InfoNCE的方式,希望拉近query跟相关文档之间的距离,同时疏远query跟不相关文档之间的距离,但是由于M3-Embedding提供了三种相似度计算方式,所以这里其实是包含了3个对比学习损失的。第二部分蒸馏损失,研究人员将三种不同方式的相似度得分进行加权求和作为teacher分数,然后让三种相似度得分去学习teacher得分的信息,由此得到3个蒸馏损失。模型训练总体损失就是由这2*3个损失通过加权求和得到的。
MemoRAG: Moving Towards Next-Gen RAG via Memory-Inspired Knowledge Discovery
MemoRAG 的核心是一个记忆模块,它能够构建数据库的全局记忆,并生成与上下文相关的线索,从而有效地将知识数据库与准确答案所需的信息联系起来。
MemoRAG 的主要组件包括:
- 记忆模块 (Memory Module): 它通过逐步压缩原始输入标记到一组更小的记忆标记,同时保留重要的语义信息。
- 线索生成 (Clue Generation): 记忆模块根据输入查询生成草稿答案或线索,这些线索揭示了对当前任务潜在的信息需求,并指导检索工具在数据库中定位相关信息。
- 检索 (Retrieval): 基于记忆模块生成的线索,MemoRAG 使用检索工具从数据库中检索最相关的信息。
- 生成 (Generation): LLM的工作了
附录(摘录整理自以下文章):
- 知乎对BGE的解读:
- 对M3的解读: https://zhuanlan.zhihu.com/p/681259219
- BGE登顶MTEB的神器–RetroMAE|一种基于自动编码的检索模型预训练方法: https://mp.weixin.qq.com/s?__biz=Mzk0NzMwNjU5Nw==&mid=2247484913&idx=1&sn=ddf8ecaf8c8ff7dac9acc37acd1dc938&chksm=c379acfbf40e25ed26fa743b9c3e85d748c90e9a097881b323de97efb4372720d7306c86330e&scene=21#wechat_redirect