milvus-logo
LFAI
首页
  • 概念

重排

Milvus 使用hybrid_search()API 实现了混合搜索功能,并结合了复杂的重排策略,以完善来自多个AnnSearchRequest 实例的搜索结果。本主题涵盖重排过程,解释其意义以及 Milvus 中不同重排策略的实施。

概述

下图展示了在 Milvus 中执行混合搜索的过程,并强调了重排在此过程中的作用。

reranking_process

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

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

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

加权评分(WeightedRanker)

WeightedRanker 策略根据每个向量字段的重要性,为每个向量检索路径的结果分配不同的权重。当每个向量字段的重要性不同时,就会应用这种重排策略,这样就可以通过给某些向量字段分配更高的权重,使其比其他向量字段更受重视。例如,在多模态搜索中,文本描述可能比图像中的颜色分布更重要。

WeightedRanker 的基本流程如下:

  • 在检索过程中收集分数:收集来自不同向量检索路径的结果及其分数。

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

    arctan-function

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

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

weighted-reranker 加权排序器

要使用该策略,请应用WeightedRanker 实例,并通过传递可变数量的数字参数来设置权重值。

from pymilvus import WeightedRanker

# Use WeightedRanker to combine results with specified weights
rerank = WeightedRanker(0.8, 0.8, 0.7) 

请注意

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

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

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

互易等级融合(RRFRanker)

RRF 是一种数据融合方法,它根据排名的倒数来组合排名列表。它是平衡各向量场影响的有效方法,尤其是在没有明确的重要性优先顺序时。这种策略通常用于想要对所有向量场给予同等考虑,或对每个场的相对重要性存在不确定性时。

RRF 的基本流程如下:

  • 检索时收集排名:检索器跨多个向量字段检索并对结果进行排序。

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

    rrf-ranker RRF-ranker

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

  • 综合排名:根据综合得分对检索结果重新排序,得出最终结果。

要使用这一策略,请应用RRFRanker 实例。

from pymilvus import RRFRanker

# Default k value is 60
ranker = RRFRanker()

# Or specify k value
ranker = RRFRanker(k=100)

RRF 允许在不指定明确权重的情况下平衡各领域的影响。在最终排名中,多个字段一致同意的最匹配结果将被优先排序。

翻译自DeepLogo

反馈

此页对您是否有帮助?