跳到主要内容

RRF Ranker

RRF (互反排名融合) Ranker 是 Zilliz Cloud 混合搜索的一种重排序策略,它根据多个向量搜索路径的排名位置而非原始相似度得分来平衡结果。就像体育锦标赛会考虑选手的排名而非个人统计数据一样,RRF Ranker 根据每个项目在不同搜索路径中的排名高低来合并搜索结果,从而生成一个公平且平衡的最终排名。

何时使用 RRF Ranker

RRF Ranker 专为混合搜索场景而设计,在这些场景中,你可以平衡来自多个向量搜索路径的结果,而无需分配明确的重要性权重。它在以下方面特别有效:

用例示例为什么RRF Ranker 效果良好
同等重要性的多模态搜索图像文本搜索,两种模态同等重要平衡结果,无需进行任意权重分配
集成向量搜索结合不同嵌入模型的结果民主地合并排名,不偏袒任何特定模型的评分分布
跨语言搜索跨多种语言查找文档公平地对结果进行排名,而不考虑特定语言的嵌入特征
专家建议整合多个专家系统的建议当不同系统使用不可比的评分方法时,创建共识排名

如果您的混合搜索应用程序需要在不分配明确权重的情况下民主地平衡多个搜索路径,RRF Ranker 是您的理想选择。

RRF Ranker 工作机制

RRF Ranker 策略的主要工作流程如下:

  1. 收集搜索排名:收集向量搜索各路径结果的排名(rank_1、rank_2)。

  2. 合并排名:根据公式转换每条路径的排名(rank_rrf_1、rank_rrf_2)。

    计算公式涉及 N,表示检索次数。ranki(d)是由第 i 个检索器生成的文档 d 的排名位置。k 是一个平滑参数,通常设置为 60。

  3. 聚合排名:根据组合排名对搜索结果进行重新排序,以生成最终结果。

EcHYw1ZDYhANJObodP2cnElGnXK

RRF Ranker 示例

此示例展示了在稀疏-密集向量上进行的混合搜索(topK=5),并说明了 RRF Ranker 策略如何对两次近似最近邻(ANN)搜索的结果进行重排序。

  • 文本稀疏向量的 ANN 搜索结果(topK=5):

    ID排名(稀疏)
    1011
    2032
    1503
    1984
    1755
  • 文本密集向量的 ANN 搜索结果(topK=5):

    ID排名(密集)
    1981
    1012
    1103
    1754
    2505
  • 使用RRF重新排列两组搜索结果的排名。假设平滑参数k设置为60。

    ID得分(稀疏)得分(密集)最终得分
    101121/(60+1)+1/(60+2) = 0.03252247
    198411/(60+4)+1/(60+1) = 0.03201844
    175541/(60+5)+1/(60+4) = 0.03100962
    2032N/A1/(60+2) = 0.01612903
    1503N/A1/(60+3) = 0.01587302
    110N/A31/(60+3) = 0.01587302
    250N/A51/(60+5) = 0.01538462
  • 重排序后的最终结果(topK=5):

    排名ID最终得分
    11010.03252247
    21980.03201844
    31750.03100962
    42030.01612903
    51500.01587302
    51100.01587302

使用 RRF Ranker

使用 RRF Ranker 策略时,需要配置参数 k。它是一个平滑参数,可以有效改变全文搜索与向量搜索的相对权重。该参数的默认值为 60,可在 (0, 16384) 范围内调整。取值应为浮点数,建议值在 [10, 100] 之间。虽然 k=60 是常见选择,但最优 k 值可能因具体应用和数据集而异。我们建议根据具体用例测试和调整此参数,以实现最佳性能。

创建一个 RRF Ranker

在您的集合设置了多个向量字段后,使用适当的平滑参数创建一个RRF排序器:

python
from pymilvus import Function, FunctionType

rerank = Function(
name="rrf",
input_field_names=[], # Must be an empty list
function_type=FunctionType.RERANK,
params={
"reranker": "rrf",
"k": 100 # Optional
}
)
参数必填?描述值/示例
name此函数的唯一标识符"rrf"
input_field_names要应用该函数的向量字段列表(对于RRF Ranker 而言必须为空)[]
function_type要调用的函数类型;使用 RERANK 来指定重排序策略FunctionType.RERANK
params.reranker指定要使用的重排序方法。
必须设置为rrf才能使用RRF Ranker。
"加权的"
params.k平滑参数,用于控制文档排名的影响;较高的 k 会降低对高排名的敏感度。范围:(0, 16384);默认值:60
详情请参考 RRF排序器的机制
100

RRF Ranker 专为结合多个向量字段的混合搜索操作而设计。以下是在混合搜索中使用它的方法:

python
from pymilvus import MilvusClient, AnnSearchRequest

# Connect to Milvus server
milvus_client = MilvusClient(uri="YOUR_CLUSTER_ENDPOINT")

# Assume you have a collection setup

# Define text vector search request
text_search = AnnSearchRequest(
data=["modern dining table"],
anns_field="text_vector",
param={},
limit=10
)

# Define image vector search request
image_search = AnnSearchRequest(
data=[image_embedding], # Image embedding vector
anns_field="image_vector",
param={},
limit=10
)

# Apply RRF Ranker to product hybrid search
# The smoothing parameter k controls the balance
hybrid_results = milvus_client.hybrid_search(
collection_name,
[text_search, image_search], # Multiple search requests
ranker=rerank, # Apply the RRF ranker
limit=10,
output_fields=["product_name", "price", "category"]
)

有关混合搜索的更多信息,请参阅多向量混合搜索

Ctrl I