pymilvus执行多向量搜索

pymilvus执行多向量搜索

从 Milvus 2.4 开始,引入了多向量支持和混合搜索框架,单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用,例如根据图片、语音、指纹等各种属性来识别向量库中最相似的人。

多向量搜索支持在多个向量字段上执行搜索请求,并使用重排名策略(例如RRF和加权评分)组合结果。

客户端pymilvus需要2.4版本。

准备数据

集合hello_milvus有2个向量字段embeddings1、embeddings2

创建多个 AnnSearchRequest 实例

每个AnnSearchRequest代表指定向量字段上的单个搜索请求。

以下示例创建两个AnnSearchRequest实例对两个向量字段执行单独的相似性搜索。

go 复制代码
query_vector1 = [[0.9425935745239258,0.7893211245536804,0.6682707071304321,0.6769697070121765,0.9508556127548218]]

search_param_1 = {
    "data": query_vector1, # Query vector
    "anns_field": "embeddings1", # Vector field name
    "param": {
        "metric_type": "L2", # This parameter value must be identical to the one used in the collection schema
        "params": {"nprobe": 10}
    },
    "limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_1 = AnnSearchRequest(**search_param_1)

query_vector2 = [[0.7958434224128723,0.18576304614543915,0.650543212890625,0.3026141822338104,0.7158203125]]
search_param_2 = {
    "data": query_vector2, # Query vector
    "anns_field": "embeddings2", # Vector field name
    "param": {
        "metric_type": "L2", # This parameter value must be identical to the one used in the collection schema
        "params": {"nprobe": 10}
    },
    "limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_2 = AnnSearchRequest(**search_param_2)

reqs = [request_1, request_2]

配置重排名策略

创建AnnSearchRequest实例后,配置重排名策略以组合结果并重新排名。目前有两个选项:WeightedRanker和RRFRanker。

go 复制代码
from pymilvus import WeightedRanker
rerank = WeightedRanker(0.8, 0.2)

执行混合搜索

使用hybrid_search()方法执行多向量搜索。

go 复制代码
from pymilvus import (
    connections,
    Collection,
    AnnSearchRequest,
    WeightedRanker
)

collection_name = "hello_milvus"
host = "192.168.230.71"
port = 19530
username = ""
password = ""


query_vector1 = [[0.9425935745239258,0.7893211245536804,0.6682707071304321,0.6769697070121765,0.9508556127548218]]

search_param_1 = {
    "data": query_vector1, # Query vector
    "anns_field": "embeddings1", # Vector field name
    "param": {
        "metric_type": "L2", # This parameter value must be identical to the one used in the collection schema
        "params": {"nprobe": 10}
    },
    "limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_1 = AnnSearchRequest(**search_param_1)

query_vector2 = [[0.7958434224128723,0.18576304614543915,0.650543212890625,0.3026141822338104,0.7158203125]]
search_param_2 = {
    "data": query_vector2, # Query vector
    "anns_field": "embeddings2", # Vector field name
    "param": {
        "metric_type": "L2", # This parameter value must be identical to the one used in the collection schema
        "params": {"nprobe": 10}
    },
    "limit": 2 # Number of search results to return in this AnnSearchRequest
}
request_2 = AnnSearchRequest(**search_param_2)

reqs = [request_1, request_2]

rerank = WeightedRanker(0.8, 0.2)

print("start connecting to Milvus")
connections.connect("default", host=host, port=port,user=username,password=password)
coll = Collection(collection_name, consistency_level="Bounded")

res = coll.hybrid_search(
    reqs, # List of AnnSearchRequests created in step 1
    rerank, # Reranking strategy specified in step 2
    output_fields=['pk'],
    limit=2 # Number of final search results to return
)

print(res)

返回结果:

shell 复制代码
['[
"id: 0, distance: 1.0, entity: {'pk': 0}", 
"id: 568, distance: 0.7705678939819336, entity: {'pk': 568}"
]']
相关推荐
小马哥crazymxm几秒前
自动驾驶“跨化身”!Sensor2Sensor用4D高斯泼溅+扩散模型,把网络行车记录仪变成高精度LiDAR真数据
人工智能·机器学习·自动驾驶
Z-D-K5 分钟前
考验AI的“自我”、记忆和逻辑-AI对《红楼梦》后40回的改写(11)
人工智能·ai·aigc·交互·agi
东方佑7 分钟前
可学习破坏策略:实现大语言模型二倍推理加速的统一自洽框架
人工智能·学习·语言模型
专注搞钱8 分钟前
AI大模型在工业领域的落地实践——从概念到生产的真实案例
人工智能·ai·智能制造·工业4.0
碳基硅坊14 分钟前
英伟达RTX Spark:开启个人AI计算机新纪元
人工智能·rtx spark
大模型最新论文速读21 分钟前
UnityMAS-O:专用于多 agent 工作流训练的 RL 框架
论文阅读·人工智能·深度学习·机器学习·自然语言处理
城事漫游Molly24 分钟前
AI赋能质性研究(八): 断言与命题写作,实现从数据到理论跨越的5个高质量 Prompt
人工智能·算法·prompt·ai for science·定性研究
love530love25 分钟前
根治 PyTorch CUDA `pynvml` 弃用警告:直接修改 `torch/cuda/__init__.py` 的实践记录
人工智能·pytorch·windows·python·深度学习·机器学习·pynvml
小雨下雨的雨1 小时前
家庭药品管理系统智能过期预警鸿蒙PC Electron框架技术深度解析
前端·javascript·人工智能·华为·electron·鸿蒙·鸿蒙系统