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

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]范围内,为不同的度量类型提供标准化基础。

    arctan函数

  • 权重分配:为每个向量检索路径分配权重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算法对每个检索器的排名进行加权和合并。公式如下:

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

相关文章:

  • Linux信号的诞生与归宿:内核如何管理信号的生成、阻塞和递达?
  • Mysql-经典实战案例(10):如何用PT-Archiver完成大表的自动归档
  • 英语:基础知识
  • teaming技术
  • vulnhub靶场【billu系列】之billu_b0x2靶机
  • Cell子刊 IF48.8 | 绘制 949 种癌细胞蛋白质组全景图,AI 算法锁定千种潜在药物靶点
  • 【达梦数据库】用户权限
  • 【C++】C++构造函数与析构函数
  • 使用 Ollama 本地部署 DeepSeek 模型及 Chatbox 配置
  • poetry安装与使用
  • IoTDB日志提示Too many open files
  • 华为总部-华为东莞松山湖基地参观游学攻略
  • ragflow 默认端口被占用,更改端口号
  • C# MethodBase 类使用详解
  • 蓝桥每日打卡--区间移位
  • ReentranLock手写
  • Three.js中的加载器与资源管理:构建丰富3D场景的关键
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 RESTful API 设计:从上手到骨折
  • Oracle 常用语法汇总
  • Hinton提出的知识蒸馏(Knowledge Distillation,简称KD):原理解释和代码实现
  • 多个“首次”!上市公司重大资产重组新规落地
  • 上海国际珠宝时尚功能区未来三年如何建设?六大行动将开展
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 英国6月初将公布对华关系的审计报告,外交部:望英方树立正确政策导向
  • 俄媒:俄乌伊斯坦布尔谈判将于北京时间今天17时30分开始
  • 南昌上饶领导干部任前公示:2人拟提名为县(市、区)长候选人