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的归一化处理机制

相关推荐
梦想不只是梦与想几秒前
SQLAlchemy:查询与操作 (三)
数据库·python·sqlalchemy
问天_观心1 分钟前
Mistral-7B QLoRA 实战(二):官方权重转换、4-bit NF4 加载与 Base Model 基线测试
人工智能·深度学习·学习·大模型·transformer
倔强的石头1061 分钟前
Gemini架构解析_多模态大模型的设计思路
人工智能·大模型
计算机编程指导师4 分钟前
【大数据毕设】基于Hadoop+Django乳腺癌数据分析与可视化系统选题推荐 源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·乳腺癌
码农小旋风6 分钟前
OpenSpec:轻量级AI工程规范管理框架
人工智能
打工仔折腾 AI7 分钟前
鸿蒙版ToDesk远控实测:蓝牙键鼠、双模式鼠标与跨端剪贴板怎么用
后端·python·华为·性能优化·计算机外设·harmonyos·ai agent 实战
启观川9 分钟前
数据结构与算法 -第 3 章 常用算法-回溯算法
数据结构·笔记·python·算法
拉你进_教堂10 分钟前
小龙虾技能之【Basic Object Detection Skill | 基础目标检测技能】简介
人工智能·目标检测·计算机视觉·多模态大模型·openclaw小龙虾技能
零基础12314 分钟前
LLM4AD:面向算法设计的大语言模型智能体框架
人工智能·算法·语言模型
计算机编程指导师18 分钟前
Python毕设怎么做?基于hadoop的商家优惠券营销效果数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·优惠券