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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37767.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PLY格式文件如何转换成3DTiles格式——使用GISBox软件实现高效转换

一、概述 在三维GIS和数字孪生领域,3DTiles格式已成为主流的数据格式之一。它由Cesium团队提出,专为大规模3D数据可视化设计,能够高效地加载和展示海量模型数据。而PLY格式则是一种常见的三维模型文件格式,主要用于存储点云数据或…

Junit在测试过程中的使用方式,具体使用在项目测试中的重点说明

JUnit 是一个广泛使用的 Java 单元测试框架,主要用于编写和运行可重复的测试。以下是 JUnit 在项目测试中的使用方式和重点说明: 1. 基本使用 场景:测试一个简单的 Java 类。 示例: import org.junit.Test; import static org.junit.Assert.*;public class CalculatorTe…

《C++11 基于CAS无锁操作的atomic原子类型》

count; count--; 我们知道,/--操作并不是原子性的,其实对应三条汇编指令来完成的。 读取:从内存中把变量的值读取到寄存器修改:在寄存器里将变量的值1/-1写入:把修改后的值写入到内存 在单线程环境下,这…

网络编程之客户端聊天(服务器加客户端共三种方式)

最终效果&#xff1a; serve.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/select.h>#define MAX_CLIENTS 2 // 只允许两个客户端 #define BUF_SIZE 1024i…

《深度学习》—— 模型部署

文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境&#xff0c;使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…

解码小米714亿资本棋局:雷军“押宝”AI新战场

目录 小米的AI战略&#xff1a;70亿投入背后的逻辑 1. ​AI成为核心战略&#xff0c;聚焦三大方向 2. ​资本开支超100亿&#xff0c;投资AI基础层公司 3. ​自研芯片与大模型突破 小米的资本棋局&#xff1a;从智能硬件到AI生态 1. ​714亿投资布局&#xff0c;构建产业…

如何为在线游戏选择合适的游戏盾?

在当今这个互联网高速发展的时代&#xff0c;在线游戏已经成为许多人日常生活中不可或缺的一部分。然而&#xff0c;随着游戏人数的不断增加&#xff0c;网络安全问题也层出不穷。游戏盾的问世便是为了解决这一系列安全隐患&#xff0c;确保玩家在游戏中能够拥有安全、畅快的体…

自适应柔顺性策略:扩散引导控制中学习近似的柔顺

24年10月来自斯坦福大学和 TRI 的论文“Adaptive Compliance Policy: Learning Approximate Compliance for Diffusion Guided Control”。 柔顺性在操作中起着至关重要的作用&#xff0c;因为它可以在不确定的情况下平衡位置和力的并发控制。然而&#xff0c;当今的视觉运动策…

w264民族婚纱预定系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

栈/堆/static/虚表

在 C 里&#xff0c;栈空间主要用来存放局部变量、函数调用信息等。下面为你介绍栈空间在 C 里的运用方式。 1. 局部变量的使用 在函数内部定义的变量会被存于栈空间&#xff0c;当函数执行结束&#xff0c;这些变量会自动被销毁。 #include <iostream>void exampleFu…

SpringBoot实现异步调用的方法

在Java中使用Spring Boot实现异步请求和异步调用是一个常见的需求&#xff0c;可以提高应用程序的性能和响应能力。以下是实现这两种异步操作的基本方法&#xff1a; 一、异步请求&#xff08;Asynchronous Request&#xff09; 异步请求允许客户端发送请求后立即返回&#x…

基于 Prompt 的实体关系抽取:原理与优势解析

一、信息抽取的现状与挑战 在当今数字化时代&#xff0c;信息抽取作为自然语言处理&#xff08;NLP&#xff09;领域的核心技术&#xff0c;具有不可替代的重要性。从海量的非结构化文本数据中精准提取出有价值的信息&#xff0c;例如实体&#xff08;如人名、组织名&#xff…

SolidWorks使用显卡教程

操作步骤&#xff1a; 打开注册表编辑器 按下键盘上的 Win R 组合键&#xff0c;输入 regedit 并按回车键&#xff0c;打开注册表编辑器。 导航到显卡信息路径 在注册表中依次展开以下路径&#xff1a; plaintext HKEY_CURRENT_USER\Software\SolidWorks\SOLIDWORKS 2021\Per…

spring-tx笔记

编程式事务与声明式事务的理解 补充&#xff1a;什么是事务&#xff1f; 事务是一个重要概念&#xff0c;尤其在数据库管理系统中。事务是指一组操作。&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;确保数据的一致性和完整性 编程式事务 编…

使用excel.EasyExcel实现导出有自定义样式模板的excel数据文件,粘贴即用!!!

客户要求导出的excel文件是有好看格式的&#xff0c;当然本文举例模板文件比较简单&#xff0c;内容丰富的模板可以自行设置&#xff0c;话不多说&#xff0c;第一步设置一个"好看"的excel文件模板 上面要注意的地方是{.变量名} &#xff0c;这里的变量名对应的就是…

AutoGluon快速上手

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲机器学习包 AutoGluon简介&#xff1a; AutoGluon 提供了多种模型来处理不同类型的数据和任务&#xff0c;是由 亚马逊 AWS 团队 开发的一款开源 AutoML 框架&#xff0c;旨在简化机器…

AI风向标《AI与视频制作全攻略:从入门到精通实战课程》

课程信息 AI风向标《AI与视频制作全攻略&#xff1a;从入门到精通实战课程》,夸克网盘和百度网盘课程。 课程介绍 《AI与视频制作全攻略&#xff1a;从入门到精通实战课程》是一套全面融合AI技术与视频制作的实战课程&#xff0c;旨在帮助创作者从基础软件使用到高级视频剪辑…

Docker学习笔记(十)搭建Docker私有仓库

一、环境配置 1、宿主机系统&#xff1a;macOS Sequoia(版本15.2) 2、虚拟机VMware Fusion版本&#xff1a;专业版 13.6.2 (24409261) 3、虚拟机系统&#xff1a;AlmaLinux-9-latest-x86_64-boot.iso 二、安装Harbor开源企业级Docker镜像 Harbor 是一个开源的企业级 Docker…

Linux中基本命令

目录 ls pwd cd touch mkdir rm cp mv cat less head tail find grep ls 其实大部分命令都是可执行的文件&#xff0c;但有一些命令比如Shell内置命令&#xff0c;它没有对应的独立可执行文件&#xff0c;而是由Shell直接解释执行的。 功能&#xff1a;显示当前目…

IDEA导入jar包后提示无法解析jar包中的类,比如无法解析符号 ‘log4j‘

IDEA导入jar包后提示无法解析jar包中的类 问题描述解决方法 问题描述 IDEA导入jar包的Maven坐标后&#xff0c;使用jar中的类比如log4j&#xff0c;仍然提示比如无法解析符号 log4j。 解决方法 在添加了依赖和配置文件后&#xff0c;确保刷新你的IDE项目和任何缓存&#xff…