找回密码
 立即注册
首页 业界区 业界 如何使用DashVector的多向量检索

如何使用DashVector的多向量检索

别萧玉 6 小时前
本文介绍如何使用DashVector的多向量检索功能。
在某些AI检索的场景,会涉及一个实体对应多个向量,在检索时希望通过多个向量检索来找到最可能的实体,例如:

  • 在自然语言处理中,标题和文档分别抽取为不同的向量特征,需要根据标题向量和文档向量同时做检索。
  • 在商品检索时,商品的图片和文字分别抽取为不同的向量特征,需要根据图片向量和文字向量同时做检索。
为了满足这些需求,DashVector支持了多向量检索。
使用示例

前提条件


  • 已创建Cluster
  • 已获得API-KEY
  • 已安装最新版SDK
创建多向量集合

说明
需要使用您的api-key替换示例中的 YOUR_API_KEY、您的Cluster Endpoint替换示例中的YOUR_CLUSTER_ENDPOINT,代码才能正常运行。
  1. import dashvector
  2. import numpy as np
  3. from dashvector import VectorParam, Doc, WeightedRanker, VectorQuery, RrfRanker
  4. client = dashvector.Client(
  5.     api_key='YOUR_API_KEY',
  6.     endpoint='YOUR_CLUSTER_ENDPOINT'
  7. )
  8. ret = client.create(
  9.     'multi_vector_demo',
  10.     vectors={
  11.         "title": VectorParam(4),
  12.         "content": VectorParam(6, metric="euclidean"),
  13.     },
  14.     fields_schema={
  15.         'author': str,
  16.     }
  17. )
  18. assert ret
复制代码
插入数据

说明
insert/upsert要求至少一个向量字段有值。
  1. collection = client.get(name='multi_vector_demo')
  2. docs = []
  3. for i in range(10):
  4.     docs.append(Doc(id=str(i),
  5.                     vectors={"title": np.random.random(4),
  6.                              "content": np.random.random(6)
  7.                             },
  8.                     )
  9.                 )
  10. ret = collection.insert(docs)
  11. print(ret)
复制代码
执行检索

说明

  • 检索时采用的策略为多个向量分别执行检索后融合排序。
  • VectorQuery 支持的其他参数见 向量检索高级参数。
  1. title_vector = [0.1, 0.2, 0.3, 0.4]
  2. content_vector = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
  3. vectors = {
  4.     "title": VectorQuery(vector=title_vector, num_candidates=10),
  5.     "content": VectorQuery(vector=content_vector),
  6. }
  7. ret = collection.query(
  8.     vector=vectors,
  9.     include_vector=False,
  10.     # 使用RRF融合排序
  11.     # rerank=RrfRanker(rank_constant=100)
  12.     # 使用加权融合排序
  13.     rerank=WeightedRanker(weights={"title": 1.0, "content": 1.0}),
  14.     topk=20
  15. )
  16. assert ret
  17. print(ret.output)
  18. # 使用单个向量执行检索
  19. ret = collection.query(vector={"title": VectorQuery(vector=title_vector)})
  20. assert ret
  21. print(ret.output)
  22. # 使用单个向量执行分组向量检索
  23. ret = collection.query_group_by(title_vector, group_by_field='author', vector_field='title')
  24. assert ret
  25. print(ret)
复制代码
限制说明

重要

  • 当前单个集合最多支持4个向量字段。
  • 随向量字段的个数增加,Cluster中可插入的Doc条数会减少,插入和检索的性能会下降。
  • 检索时允许只对部分向量做检索,集合中包含n个向量字段时,允许使用1-n个向量字段做向量检索,允许使用其中的任意一个向量字段做分组向量检索。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册