当前位置: 首页 > news >正文

Google MUVERA: 让多向量检索与单向量检索一样快

 

在检索增强生成(Retrieval-Augmented Generation, RAG)系统中,检索内容过程常常面临一个关键的两难选择:使用传统搜索(例如ElasticSearch),文档表示为1个向量,具有快速检索的优势但准确性不高;而使用向量数据库进行的现代多向量搜索,则将文档表示为数百个向量,能够提供更高的准确性但检索速度极其缓慢。这种权衡在需要同时满足速度和精度的实时应用中尤为突出。Google近期提出的MUVERA(Multi-Vector Retrieval via Fixed Dimensional Encodings)方法旨在解决这一困境,它通过固定维度编码(FDEs)将多向量检索转换为单向量检索,从而实现了多向量检索与单向量搜索相当的速度,同时保持了高准确性。MUVERA的核心创新在于,它设计了一种方法,可以用简单的单向量内积来高度近似复杂的多向量Chamfer相似度,从而将问题转化回我们已经极度擅长解决的MIPS(Max Inner Product Search)问题。

RAG中的检索困境

 

在深入讨论MUVERA之前,我们需要理解RAG系统中检索阶段面临的根本挑战。RAG作为一种结合了检索和生成的技术,通过从文档库中找到相关信息,然后使用大语言模型生成高质量答案,已经成为提升AI系统输出准确性和相关性的关键方法。

RAG系统的基本架构

RAG系统主要由三个核心组件构成:

  1. 嵌入模型(Embedding Model):负责将文本转换为向量表示

  2. 向量数据库(Vector Database):存储和检索向量表示

  3. 大语言模型(LLM):基于检索结果生成最终答案

在RAG的工作流程中,当用户提出查询时,系统首先会将查询和文档库中的文档分别转换为向量表示,然后在向量数据库中检索与查询向量最相似的文档向量,最后将这些相关文档与原始查询一起输入大语言模型,生成最终的回答。

单向量检索与多向量检索的权衡

在RAG系统的检索阶段,面临的核心挑战是如何表示文档向量。这直接影响到检索的速度和准确性:

单向量检索(Single-Vector Retrieval)

  • 表示方法:将整个文档表示为一个单一的向量

  • 优势:检索速度快,实现简单

  • 劣势:无法捕捉文档的多方面语义信息,准确性较低

多向量检索(Multi-Vector Retrieval)

  • 表示方法:将文档分割为多个部分,每个部分生成一个向量

  • 优势:能更全面地捕捉文档的语义信息,准确性更高

  • 劣势:检索速度慢,计算复杂度高

这种权衡在实际应用中尤为明显。例如,在使用向量数据库如Weaviate、Pinecone或Milvus时,单向量检索可以在毫秒级完成,而多向量检索则可能需要几秒钟甚至更长时间,这对于需要实时响应的场景是不可接受的。

MUVERA正是为了解决这一困境而提出,它通过创新的固定维度编码(FDEs)方法,实现了多向量检索的速度与单向量检索相当,同时保持了高准确性。

Chamfer相似度:多向量检索的理论基础

 

要理解MUVERA的创新之处,我们需要先了解Chamfer相似度这一概念,它是多向量检索的核心相似度度量方法。

Chamfer相似度的定义

Chamfer相似度是衡量两个向量集合相似性的指标,其计算公式为:

其中:

  • Q是查询的向量集

  • D是文档的向量集

  • sim(q,d)表示查询向量q与文档向量d之间的相似度

Chamfer相似度计算的是每一个查询向量q与文档集中最匹配的向量d的相似度之和。这种计算方式能够较好地反映查询与文档之间的整体相似度,因为它确保了查询的每个方面都能在文档中找到对应的部分。

Chamfer相似度的非对称性

Chamfer相似度的一个重要特性是其非对称性:Sim(Q,D)≠Sim(D,Q)。

这种非对称性对于RAG系统至关重要,因为它能更好地模拟"查询-文档"的相关性判断。在实际应用中,我们通常更关心查询向量能否在文档集中找到匹配,而不是反过来,因为用户查询通常比文档内容更为具体和聚焦。

例如,如果查询是"人工智能在医疗领域的应用",而文档是关于"医疗领域的人工智能和机器学习",我们希望系统能够识别它们的相关性,即使文档标题中没有完全匹配查询的词语。Chamfer相似度的非对称性设计正好能够捕捉这种方向性的相关性。

Chamfer相似度的计算挑战

尽管Chamfer相似度在理论上能够提供更准确的相关性度量,但在实际应用中,计算Chamfer相似度面临两个主要挑战:

  1. 计算复杂度高:对于每个查询向量q,都需要遍历整个文档向量集D,计算所有可能的相似度并取最大值,这导致了较高的计算复杂度。

  2. 检索速度慢:传统的向量数据库优化技术,如空间索引和局部敏感哈希(LSH),主要针对单向量检索设计,难以直接应用于Chamfer相似度计算。

MUVERA的创新之处在于,它找到了一种方法,能够用简单的单向量内积来高度近似复杂的Chamfer相似度计算,从而将多向量检索问题转化为我们已经极度擅长解决的MIPS问题。

固定维度编码(FDEs):

MUVERA的核心技术

 

固定维度编码(Fixed-Dimensional Encodings, FDEs)是MUVERA的核心技术,它通过将多向量集合转换为单个固定长度的向量,同时保留原始向量集合之间的相似性关系,实现了多向量检索的速度与单向量检索相当。

FDEs的构建过程

FDEs的构建过程是一个精妙的、无需训练的(data-oblivious)随机算法,主要分为三步:

空间随机划分(LSH)

算法的核心是局部敏感哈希(Locality Sensitive Hashing, LSH)。LSH的关键特性是:原本在高维空间中彼此接近的向量,有极高的概率被映射到同一个分区中。这个过程类似于将整个向量空间随机地"切片",形成多个子空间。通过多次随机切片,可以形成一个完整的空间划分结构。

非对称聚合

这是MUVERA最巧妙的设计,它完美地模拟了Chamfer相似度的非对称性。非对称聚合分为两种:

  • 对于查询(Query):将落入同一分区的所有查询向量求和(Sum)。这保留了每个查询向量的独立贡献。

  • 对于文档(Document):将落入同一分区的所有文档向量求平均(Average)。这恰好对应了Chamfer公式中的maxmax操作——通过平均,可以防止分区内某个"明星"向量的权重过高,从而更好地反映该分区对查询向量的整体响应水平。

这种非对称的聚合方法确保了FDE编码能够保留原始向量集合之间的相似性关系,特别是Chamfer相似度的非对称特性。

重复与拼接

上述过程会使用不同的随机种子重复(num_repetitions)多次。每次重复都会产生一套全新的空间划分和聚合结果。最后,将所有重复运行得到的向量拼接起来,形成最终的、维度更高的FDE向量。

这样做极大地增强了算法的鲁棒性,确保了真正相似的向量对能在某一次或几次随机划分中"相遇"。最终,⟨FDE(Q),FDE(D)⟩≈Sim(Q,D)。

FDEs的关键特性

MUVERA的一个关键优势是FDE变换是无数据的。这意味着它不依赖于特定的数据集,使其既能够抵抗数据分布的变化,又适合流式应用。此外,与模型产生的单向量不同,FDE保证在指定的误差范围内近似真实的Chamfer相似度。因此,在重排序阶段之后,MUVERA保证能够找到最相似的多向量表示。

这些特性使得FDE编码不仅能够提高检索速度,还能保证检索的准确性,这对于RAG系统至关重要。

MUVERA的工作原理与优势

 

MUVERA的精髓在于,它设计了一种方法,可以用简单的单向量内积来高度近似复杂的多向量Chamfer相似度,从而将问题转化回我们已经极度擅长解决的MIPS问题。

MUVERA的工作流程

MUVERA的工作流程主要包括以下几个步骤:

  1. 向量编码:将查询向量集合Q和文档向量集合D分别通过FDE编码,得到对应的固定维度编码向量FDE(Q)和FDE(D)。

  2. 内积计算:计算FDE(Q)和FDE(D)之间的内积,作为相似度度量。

  3. 结果排序:根据内积结果对文档进行排序,选择最相关的文档。

  4. 重排序:使用原始的Chamfer相似度对初步检索结果进行重排序,确保准确性。

这种工作流程大大简化了多向量检索的复杂度,使得多向量检索的速度可以与单向量检索相媲美。

MUVERA的核心优势

MUVERA相比传统多向量检索方法具有以下核心优势:

  • 高检索速度

通过将多向量检索问题转化为单向量内积计算问题,MUVERA实现了与单向量检索相当的检索速度。这意味着,使用多向量表示的文档可以在毫秒级时间内完成检索,与传统单向量检索的速度相当。

  • 保持高准确性

尽管简化了检索过程,MUVERA仍然能够保持与原始Chamfer相似度相当的准确性。通过FDE编码和非对称聚合方法,MUVERA确保了检索结果的相关性和全面性。

  • 无数据依赖性

FDE变换是无数据的,不依赖于特定的数据集,这使得MUVERA能够适应不同的数据分布和流式应用场景。这种特性在处理动态更新的数据集时尤为重要。

  • 易于实现和部署

MUVERA的算法实现相对简单,不需要复杂的训练过程,可以轻松集成到现有的向量数据库中。同时,它与现有的索引技术兼容,可以充分利用现有技术的优势。

这些优势使得MUVERA成为解决RAG系统中检索速度与准确性权衡的理想方案,特别是在需要处理大规模数据集和实时响应的应用场景中。

MUVERA在RAG系统中的应用

 

MUVERA在RAG系统中具有广泛的应用前景,它能够显著提升RAG系统的检索效率和准确性,特别是在处理大规模文档库时。

RAG系统中的多向量表示

在RAG系统中,多向量表示通常通过将文档分割为多个段落或句子,并分别为每个段落或句子生成向量表示来实现。这种多向量表示能够更全面地捕捉文档的内容和语义信息,提高检索的准确性。

然而,多向量检索的计算复杂度和速度问题一直是限制其应用的主要障碍。MUVERA通过固定维度编码(FDEs)解决了这一问题,使得多向量检索的速度可以与单向量检索相媲美。

MUVERA提升RAG检索效率

在RAG系统中,MUVERA的应用主要体现在以下几个方面:

  • 快速检索相关文档

通过将文档表示为FDE向量,MUVERA可以在毫秒级时间内完成与查询向量的相似度计算,大大提高了检索速度。这使得RAG系统能够处理更大规模的文档库,而不会影响响应时间。

  • 保持高检索准确性

尽管提高了检索速度,MUVERA仍然能够保持与原始Chamfer相似度相当的准确性。这确保了RAG系统能够检索到最相关的信息,为大语言模型生成准确、全面的回答提供基础。

  • 支持流式数据处理

由于FDE变换是无数据的,MUVERA能够适应流式数据处理场景。这对于处理实时更新的文档库特别有用,例如新闻、社交媒体内容等。

MUVERA与其他RAG优化技术的结合

MUVERA可以与其他RAG优化技术结合使用,进一步提升RAG系统的性能。例如:

  • 与向量数据库优化技术结合

MUVERA生成的固定维度编码向量可以与现有的向量数据库优化技术(如空间索引、LSH等)结合使用,进一步提高检索效率。

  • 与检索后重排序技术结合

在初步检索结果的基础上,可以使用更复杂的相似度度量(如原始的Chamfer相似度)进行重排序,平衡速度和准确性。

  • 与文档分割策略优化结合

优化文档分割策略,如使用固定大小的滑动窗口或基于句法结构的分割方法,可以进一步提高多向量表示的质量,从而提升检索效果。

通过这些结合,MUVERA可以在不同的应用场景中发挥更大作用,为RAG系统提供更强大的检索能力。

实现MUVERA的Python库

 

为了方便开发者使用MUVERA技术,相关的Python库已经出现,这些库封装了MUVERA的核心算法,使得开发者可以轻松将其集成到现有的RAG系统中。

主要Python库介绍

目前,主要的Python库包括:

  1. muvera-python:这是一个专门实现MUVERA算法的库,提供了FDE编码、相似度计算和文档检索等功能。

  2. langchain-muvera:将MUVERA集成到LangChain框架中的库,方便开发者构建基于MUVERA的RAG系统。

  3. pygls-muvera:将MUVERA与Google的LSH库结合的Python实现,提供了高效的向量编码和检索功能。

这些库通常提供了简洁的API,使得开发者可以轻松创建FDE编码器、编码查询和文档向量,并执行高效的相似度搜索。

以下是一个简单的使用示例,展示了如何使用muvera-python库实现基于MUVERA的RAG系统:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
from muvera import FixedDimensionalEncodingimport numpy as np
# 创建FDE编码器fde = FixedDimensionalEncoding(dim=128, num_repetitions=4)
# 假设我们有一个查询向量集合Q和文档向量集合Dquery_vectors = [np.random.randn(768) for _ in range(5)]  # 示例查询向量集合doc_vectors = [np.random.randn(768) for _ in range(1000)]  # 示例文档向量集合
# 编码查询向量集合fde_query = fde.encode_query(query_vectors)
# 编码文档向量集合fde_docs = [fde.encode_document(vec) for vec in doc_vectors]
# 计算相似度并排序similarities = [np.dot(fde_query, fde_doc) for fde_doc in fde_docs]sorted_indices = np.argsort(-similarities)
# 输出最相关的文档索引print("Most relevant documents:", sorted_indices[:10])

<按住屏幕向左滑动,查看更多内容>

性能评估

这些Python库通常提供了良好的性能,能够处理大规模文档库。根据官方测试,使用MUVERA进行多向量检索的速度可以达到传统方法的10-100倍,同时保持相当的准确性。

开发者可以根据具体需求选择合适的库和参数配置,以实现最优的检索性能。

MUVERA作为一种创新的多向量检索方法,通过固定维度编码(FDEs)实现了多向量检索与单向量搜索相当的速度,同时保持了高准确性。这为解决RAG系统中检索速度与准确性之间的权衡提供了新的思路和工具。

MUVERA的主要贡献

MUVERA的主要贡献可以总结为以下几个方面:

  • 理论贡献

MUVERA提出了固定维度编码(FDEs)的概念,这是一种能够保留多向量集合相似性关系的单向量表示方法。它通过非对称聚合和随机空间划分,实现了对Chamfer相似度的有效近似,为多向量检索提供了新的理论基础。

  • 技术创新

MUVERA设计了一种高效、无需训练的算法,能够将多向量检索问题转化为单向量内积计算问题。这大大简化了多向量检索的复杂度,使得多向量检索的速度可以与单向量检索相媲美。

  • 实用价值

MUVERA的算法实现简单、易于部署,且与现有技术兼容。相关的Python库已经出现,方便开发者将其集成到现有的RAG系统中。这对于需要处理大规模文档库和实时响应的应用场景特别有用。

未来研究方向

尽管MUVERA在解决多向量检索的速度问题上取得了显著进展,但仍有一些值得进一步研究的方向:

  • 参数优化

MUVERA涉及多个参数,如空间划分的维度、重复次数等,这些参数的选择会影响编码质量和检索性能。未来的研究可以探索这些参数的最优配置方法。

  • 与其他相似度度量的结合

除了Chamfer相似度,还有其他多向量相似度度量方法,如Earth Mover’s Distance、Hausdorff距离等。未来的研究可以探索如何将这些相似度度量与MUVERA框架结合,提供更灵活的相似度计算选择。

  • 在不同应用场景中的适应性

MUVERA在不同领域的文档库中可能表现出不同的性能。未来的研究可以探索如何根据特定领域的特点,优化MUVERA的参数配置和实现方法,以获得最佳性能。

  • 结合大语言模型的优化

MUVERA与大语言模型的结合也是一个值得探索的方向。例如,可以研究如何根据大语言模型的特点,优化FDE编码方法,以获得更好的检索效果。

MUVERA代表了检索增强生成(RAG)技术的一个重要进展,它通过创新的固定维度编码方法,实现了多向量检索与单向量搜索相当的速度,同时保持了高准确性。这为构建更高效、更准确的RAG系统提供了新的工具和思路。

随着相关Python库的出现,MUVERA已经可以被开发者轻松集成到现有的AI系统中。我们期待看到MUVERA在更多实际应用中的表现,以及它与其他AI技术的结合,为检索增强生成带来更多的创新和发展。

本文素材来源官方媒体/网络资源,如有侵权请联系删除

【AI时代下,互联网从业者能力跃迁,实战特训营】

构建核心技能:AI智能编码开发全流程+AI Agent产品开发所有内容

 

 

http://www.dtcms.com/a/275920.html

相关文章:

  • 2025Stockapi股票数据接口,股票实时数据,技术指标macd,kdj,cci技术指标算法,集合竞价数据,龙虎榜数据接口
  • TensorFlow2 study notes[2]
  • 启动Haproxy失败,如何排查问题
  • TCP与UDP协议详解:网络世界的可靠信使与高速快递
  • 参数化类型有哪些?自动化脚本如何实现数据参数化?
  • houdini vat 学习笔记
  • 滤波电路Multisim电路仿真实验汇总——硬件工程师笔记
  • Spring Security 安全认证深度解析与实战指南
  • 深入解析Java的G1收集器:原理、实战与优缺点
  • Pytest 跳过测试技巧:灵活控制哪些测试该跑、哪些该跳过
  • MCP调研及实践
  • JAVA线程池详解+学习笔记
  • 车载诊断架构 --- 诊断功能开发流程
  • 解决npm ERR! code ERR_SOCKET_TIMEOUT 问题
  • 光影证件照!支持一键换底和排版使用,内置多种模板,完全免费无广告
  • wedo稻草人-----第32节(免费分享图纸)
  • 数字孪生技术为UI前端注入新活力:实现产品设计的沉浸式体验
  • LeetCode题解---<485.最大连续1的个数>
  • 线程属性设置全攻略
  • 【C++11】右值引用详解
  • 同步、异步、阻塞、非阻塞之间联系与区别
  • 小皮面板搭建pikachu靶场并bp使用爆破模块破解
  • 传感器WSNs TheDataLinkLayer——X-MAC
  • vue3+vit+vue-router路由,侧边栏菜单,面包屑导航设置层级结构
  • Redis事件机制
  • 嵌入式领域编码合集(为什么中文会乱码)
  • Java开发八股文之基础篇
  • qt 正则表达式
  • [面试] 手写题-二分查找
  • linux学习第30天(线程同步和锁)