
在做 #RAG 的开发者一定要看看 Google 这篇信息检索领域的新#论文,介绍了一种名为 #MUVERA 的先进检索#算法。该算法能将复杂的多向量检索问题,巧妙地简化为单向量的最大内积搜索,从而在保持高精度的同时,实现与单向量搜索相媲美的速度。
可以关注公众号 #极客开源 👆获取最新一手 #AI大模型 #开源项目 信息,如果这篇文章对你有用,可以点个“推荐”,听说会影响公众号的#推荐算法。
背景:从单向量到多向量
神经嵌入模型是现代信息检索(IR)的基石。无论是搜索引擎还是推荐系统,其核心任务都是根据用户的查询(例如”珠穆朗玛峰有多高?”),从海量数据中找到最相关的信息。嵌入模型能将每个数据点(如文档、图片)转换为一个数值向量,即”嵌入”,并确保语义相近的数据点在数学上也相互靠近。
传统的做法是为每个数据点生成一个单一的#向量嵌入。通过计算向量间的内积相似度,系统可以利用高效的最大内积搜索(MIPS)算法,快速找到匹配结果。然而,近年来以 ColBERT 为代表的多向量模型展现了更优越的性能。这类模型为每个数据点生成一组向量,而非单个向量,并采用更复杂的相似度函数(如 Chamfer 相似度)来捕捉更丰富、更细腻的语义关系。虽然多向量方法提升了准确率,但也带来了巨大的计算开销,使得检索过程变得异常昂贵。
多向量检索的挑战
多向量表示虽然在可解释性和泛化能力上表现出色,但其检索过程面临着严峻的挑战:
因此,一个文档可能因为某个词元与查询高度相关而被关注,但整体上却并非最佳匹配。这要求必须采用更复杂且计算密集的检索方法。
MUVERA 的解决方案:固定维度编码(FDE)
为了解决上述问题,论文《MUVERA: Multi-Vector Retrieval via Fixed Dimensional Encodings》提出了一种创新的多向量检索算法。其核心思想是,通过一种巧妙的数学变换,将一组多向量压缩成一个固定维度的单一向量,即固定维度编码(Fixed Dimensional Encoding, FDE)。
这种变换的关键在于,经过压缩后,两个 FDE 向量之间的内积能够高度近似原始多向量集合之间的 Chamfer 相似度。这样一来,复杂的多向量检索问题就被成功地简化为了单向量的最大内积搜索(MIPS)问题。
MUVERA 的工作流程可以分解为以下三步
MUVERA 的一个显著优势是其 FDE 变换过程与具体数据集无关,这使得它对数据分布的变化具有很强的鲁棒性,也非常适合流式数据处理的应用场景。更重要的是,FDE 能够保证在特定误差范围内近似真实的 Chamfer 相似度。因此,经过重排后,MUVERA 能够确保找到最匹配的多向量表示。

查询 FDE 构建示意图:图示中,每个词元(token)被映射到一个高维向量。高维空间通过超平面被随机切割成不同区域。输出的 FDE 向量中,每个坐标块对应一个区域,其值等于所有落入该区域的查询向量的坐标之和。

文档 FDE 构建示意图:文档 FDE 的构建过程与查询类似,区别在于落入同一区域的向量坐标是进行平均化处理,而非求和。这种不对称的设计能够更准确地捕捉 Chamfer 相似度的特性。
理论基础
该方法的理论灵感来源于概率树嵌入,这是几何算法理论中的一个强大工具,并针对内积和 Chamfer 相似度进行了适配。
FDE 生成的核心在于对嵌入空间进行随机划分。如果查询和文档中的相似向量恰好落入同一个划分区域,它们的相似度就可以被高效地近似计算。通过随机化的划分方案,可以从概率上保证整体的近似效果。论文中提供了严格的理论证明,证实了 FDE 对 Chamfer 相似度的近似能力,为使用单向量代理进行多向量检索提供了坚实的理论基础。
实验结果
在 BEIR 基准测试的多个信息检索数据集上,MUVERA 的表现非常出色。实验表明,相较于之前的顶尖方法(如 PLAID),MUVERA 在显著降低延迟的同时,获得了更高的检索召回率。
主要发现包括:


此外,实验还发现 MUVERA 的 FDE 可以通过乘积量化技术进行有效压缩,在对检索质量影响极小的情况下,将内存占用减少 32 倍。
结论
MUVERA 是一种新颖、高效的多向量检索算法,其近似质量和实际性能都得到了理论和实验的验证。通过将多向量搜索简化为单向量 MIPS,它充分利用了现有的优化搜索技术,以极高的效率实现了最先进的性能。
这项工作为高效的多向量检索开辟了新的道路,对于#搜索引擎、#推荐系统、#RAG 等应用都至关重要。
相关资源
想要系统学习 RAG 应用开发,推荐去看这本《RAG极简入门》新书,本书全面解析 RAG 技术,涵盖了数据构建与检索、响应生成与评估,还结合动态 RAG、Graph RAG 等前沿技术,手把手带你完成实战项目。
说回来,MUVERA 这个新方法能有效地提升 RAG 检索阶段的效率,现阶段连 Python 库都有了,需要的同学可以试试。