milvus-stanalone混合索引实际的计算结果不正确 #41945
-
环境
问题描述我的场景是多模态搜索,我的collection有两个向量字段,image_vector和text_vector,分别表示图像,文本embedding。混合搜索的伪代码如下: ranker = WeightedRanker(0.7,0.2)
request_list = [AnnSearchRequest(**search_param_image), AnnSearchRequest(**search_param_text)]
sear_time_start = time.time()
results = self.client.hybrid_search(
collection_name='collection_name'
reqs=request_list,
ranker=ranker,
limit=top_k,
output_fields=['info]
)[0]
image_result = self.client.search(collection_name='collection_name',
data=embedding, anns_field='image_vector', limit=top_k, search_params={
"metric_type": "COSINE",
"params": {}
})[0]
text_result = self.client.search(collection_name='collection_name',
data=embedding, anns_field='text_vector', limit=top_k, search_params={
"metric_type": "COSINE",
"params": {}
})[0] 因为我希望调试一下混合搜索的权重,所以在我的demo里面我在混合搜索之后又分别对image_vector和text_vector进行了搜索,然后按照主键对应分别将图像,文本得分放进混和搜索的结果里面,最后通过前端展示。 但是我发现我发现混合搜索计算的的得分并不是正确的!也就是说:混合搜索得分!=图像搜索得分 * 0.7+文本搜索得分 * 0.2。如下一个是我前端的展示示例: 向量总分:0.668
图片向量分:0.510
文字向量分:0.395 显然:0.510 * 0.7+0.395 * 0.2=0.436!=0.668。请问这是否为milvus-standalone的bug?那这么说我的混合搜索结果并不可信? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
对于不同的metric type计算出的distance,由于range不同,要用一个activate function把distance映射到同一个 [0.0, 1.0]的空间,这样才能使得不同metric type的sub request能在同一空间计算ranker 因此,0.510和0.395先分别被 (1+distance)*0.5 计算,再做weighted ranker 这里有详细解释: #41364 (comment) |
Beta Was this translation helpful? Give feedback.
对于不同的metric type计算出的distance,由于range不同,要用一个activate function把distance映射到同一个 [0.0, 1.0]的空间,这样才能使得不同metric type的sub request能在同一空间计算ranker
因此,0.510和0.395先分别被 (1+distance)*0.5 计算,再做weighted ranker
具体计算是 (1 + 0.510) * 0.5 * 0.7 + (1 + 0.395) * 0.5 * 0.2 = 0.668
这里有详细解释: #41364 (comment)