Milvus WeightedRanker 对比 RRF 重排机制

省流:优先选择WeightedRanker

以rag为例,优先选择bm25全文检索,其次选择向量检索

Milvus混合搜索中的重排机制

Milvus通过hybrid_search() API启用混合搜索功能,结合复杂的重排策略来优化多个AnnSearchRequest实例的搜索结果。本主题涵盖了重排过程,解释其重要性以及Milvus中不同重排策略的实现。

概述

下图说明了Milvus中混合搜索的执行过程,并强调了重排在这一过程中的作用。

混合搜索中的重排是一个关键步骤,它整合了来自多个向量字段的结果,确保最终输出具有相关性并准确排序。目前,Milvus提供以下重排策略:

  • WeightedRanker:这种方法通过计算不同向量搜索得分(或向量距离)的加权平均值来合并结果。它根据每个向量字段的重要性分配权重。

  • RRFRanker:这种策略基于不同向量列中的排名来合并结果。

加权评分 (WeightedRanker)

WeightedRanker策略根据每个向量字段的重要性为每个向量检索路径的结果分配不同权重。当不同向量字段的重要性各不相同时,应用此重排策略,允许通过分配更高的权重来强调某些向量字段。例如,在多模态搜索中,文本描述可能比图像中的颜色分布更为重要。

WeightedRanker的基本过程如下:

  • 检索期间收集分数:从不同的向量检索路径收集结果及其分数。

  • 分数归一化 :将每个路径的分数归一化到[0,1]范围内,其中接近1的值表示更高的相关性。由于不同度量类型的分数分布不同,这种归一化非常重要。例如,IP的距离范围是[-∞,+∞],而L2的距离范围是[0,+∞]。Milvus使用arctan函数,将值转换到[0,1]范围内,为不同的度量类型提供标准化基础。

  • 权重分配 :为每个向量检索路径分配权重w𝑖。用户指定权重,这些权重反映了数据源的可靠性、准确性或其他相关指标。每个权重范围为[0,1]。

  • 分数融合:计算归一化分数的加权平均值以得出最终分数。然后根据这些从高到低的分数对结果进行排序,生成最终排序结果。

要使用此策略,应用WeightedRanker实例并通过传入多个数值参数来设置权重值。

复制代码
from pymilvus import WeightedRanker
​
# 使用WeightedRanker以指定权重组合结果
rerank = WeightedRanker(0.8, 0.8, 0.7)

请注意:

  • 每个权重值范围从0(最不重要)到1(最重要),影响最终的聚合分数。

  • WeightedRanker中提供的权重值总数应等于您之前创建的AnnSearchRequest实例的数量。

  • 值得注意的是,由于不同度量类型的测量方式不同,我们将召回结果的距离归一化,使其位于[0,1]区间内,其中0表示不同,1表示相似。最终分数将是权重值和距离的总和。

倒数排名融合 (RRFRanker)

RRF是一种数据融合方法,它基于排名的倒数来合并排名列表。当没有明确的重要性优先级时,这是平衡每个向量字段影响的有效方法。当您希望对所有向量字段给予同等考虑,或者当对每个字段的相对重要性存在不确定性时,通常使用这种策略。

RRF的基本过程如下:

  • 检索期间收集排名:多个向量字段的检索器检索并排序结果。

  • 排名融合:RRF算法对每个检索器的排名进行加权和合并。公式如下:

    这里,𝑁表示不同检索路径的数量,rank𝑖(𝑑)是由第𝑖个检索器检索到的文档𝑑的排名位置,𝑘是平滑参数,通常设置为60。

  • 综合排名:基于组合分数对检索到的结果进行重新排序,以生成最终结果。

要使用此策略,应用RRFRanker实例。

复制代码
from pymilvus import RRFRanker
​
# 默认k值为60
ranker = RRFRanker()
​
# 或指定k值
ranker = RRFRanker(k=100)

RRF允许在不指定明确权重的情况下平衡各字段的影响。多个字段一致认可的顶级匹配项将在最终排名中优先考虑。

总结与建议

总结

  1. Milvus混合搜索通过重排策略优化多向量检索的结果,提高搜索质量

  2. 目前支持两种主要重排策略:加权评分(WeightedRanker)和倒数排名融合(RRFRanker)

  3. WeightedRanker适用于明确知道各向量字段重要性的场景,允许用户手动设置权重

  4. RRFRanker适用于各向量字段重要性相近或不确定的场景,无需手动设置具体权重

建议

  1. 对于多模态搜索(如图像+文本),如果知道某一模态更重要,建议使用WeightedRanker

  2. 当不确定各向量字段相对重要性时,RRFRanker是更简单、更稳健的选择

  3. 使用WeightedRanker时,建议进行权重调优实验,找到最适合应用场景的权重组合

  4. 对于高精确度要求的应用,可考虑结合两种重排策略或自定义重排逻辑

  5. 记得考虑不同度量类型(如IP、L2等)的分数分布差异,理解Milvus的归一化处理机制

相关推荐
xiaoxiaoxiaolll16 分钟前
期刊速递 | 《Light Sci. Appl.》超宽带光热电机理研究,推动碳纳米管传感器在制药质控中的实际应用
人工智能·学习
练习两年半的工程师22 分钟前
AWS TechFest 2025: 风险模型的转变、流程设计的转型、生成式 AI 从实验走向实施的三大关键要素、评估生成式 AI 用例的适配度
人工智能·科技·金融·aws
Elastic 中国社区官方博客3 小时前
Elasticsearch:智能搜索的 MCP
大数据·人工智能·elasticsearch·搜索引擎·全文检索
stbomei3 小时前
从“能说话”到“会做事”:AI Agent如何重构日常工作流?
人工智能
yzx9910133 小时前
生活在数字世界:一份人人都能看懂的网络安全生存指南
运维·开发语言·网络·人工智能·自动化
许泽宇的技术分享4 小时前
LangGraph深度解析:构建下一代智能Agent的架构革命——从Pregel到现代AI工作流的技术飞跃
人工智能·架构
乔巴先生244 小时前
LLMCompiler:基于LangGraph的并行化Agent架构高效实现
人工智能·python·langchain·人机交互
张子夜 iiii5 小时前
实战项目-----Python+OpenCV 实现对视频的椒盐噪声注入与实时平滑还原”
开发语言·python·opencv·计算机视觉
静西子6 小时前
LLM大语言模型部署到本地(个人总结)
人工智能·语言模型·自然语言处理
cxr8286 小时前
基于Claude Code的 规范驱动开发(SDD)指南
人工智能·hive·驱动开发·敏捷流程·智能体