【导读】以图搜图、音视频推荐等实用功能背后都依托着向量检索技术。从Faiss到Milvus,对高维向量数据的管理服务越来越成熟。
什么是向量检索?
我们先了解一下向量的定义。计算机中的向量就是一个存放数据的地方,类似于一维数组或链表。向量通常被应用于比较两个数据之间的差异。我们把一个向量所包含的元素数称为这个向量的维度。
向量检索就是在一个向量数据集合中,按照确定的度量方式(如:欧式距离),检索出与查询向量最相近的 K(K≥1) 个向量(K-Nearest Neighbor, KNN)。在实际应用中,通常先使用机器学习技术将如文本、图像和视频这样的非结构化数据嵌入(embedding)为向量的数据形式。之后再利用向量检索技术来实现相似向量的搜索。如今,这一技术已经被广泛应用于推荐系统、计算机视觉和药物发现等领域。
开源向量检索类库Faiss
因为精确查找KNN的算法计算量大效率低,所以我们往往更关注如何高效地找到近似的最近邻(Approximate Nearest Neighbor, ANN)。为此,在向量数据集上建立高效的索引结构成为了向量检索面临的头号问题。
现有的索引算法主要分为基于树、基于图、基于量化以及基于哈希四类,其中每类所包含的算法更是丰富,这些算法大都针对特定的指标(如:效率、准确率等)有专门的优化。为了方便学者研究,也为了方便用户使用,Facebook(现 Meta)在2019年开源了其针对高维空间数据检索的高效类库Faiss,全称Facebook AI Similarity Search。
Faiss涵盖了可以搜索任意大小的向量集的算法,并且还包含了用于评估和调整这些算法的一系列配套函数。此外,Faiss还为一些算法(如:PQ)扩展了GPU版本的实现,充分利用GPU的并行计算性能,进一步提升了效率。为了效率考虑,Faiss由C++编写;为了方便使用,Faiss同时提供了Python的封装。如今,越来越多的主流索引算法被扩展到Faiss中(如:HNSW、Annoy、NSG等),越来越多的向量检索产品以Faiss作为核心运算引擎。
开源向量数据库Milvus
Faiss提供了高效的索引类库,然而有效地对海量的向量数据进行管理同样是一个迫切需求。近年来,越来越多的向量数据库产品被开发出来,走进大众视角,其中开源向量数据库Milvus就是其中之一。
Milvus是为可扩展的相似性搜索构建的向量数据库,开源、且速度极快。
高性能:涵盖如Faiss、Annoy和hnswlib等主流第三方索引库,性能高,支持对海量向量数据进行相似搜索。
高可用、高可靠:Milvus支持使用Kubernetes部署,支持在云上扩展。其容灾能力能够保证服务的高可用。Milvus依照日志及数据的理念,使用如Pulsar、Kafka等消息队列的技术实现组件间的通信,对组件进行解耦,拥抱云原生。
混合查询:Milvus支持在向量检索过程中进行标量字段过滤,实现混合查询。
开发者友好:支持多语言、多工具的Milvus生态。如今Milvus已经支持Python、Java、Go和Node.js,未来可能还会扩展对更多语言的支持。Milvus提供了如Attu等工具,帮助用户简化操作。
摘自Milvus官网
如今,为了更好地扩展Milvus的内核性能,拥抱开源。Milvus将其核心运算引擎Knowhere从Milvus中分离出来。开源开发者可以更方便地将自建索引接入Milvus进行测试、调优及使用。如下图,Knowhere的定位是索引类库与上层调度服务之间的衔接层,它主要承载着索引构建以及近似搜索的任务。并且Knowhere还支持根据硬件环境自动配置,这也是官方对Knowhere的名称定义的来源 "know where" 。
摘自Milvus官网
总结
从早期的向量检索工具Faiss到现在的云服原生向量数据库产品Milvus,向量检索领域正在从简单的索引构建、搜索向规范化的向量数据管理服务过渡。一方面,索引技术的突破会更加精进向量搜索引擎的性能;另一方面,规范化的服务有助于生产。未来,我们会更加关注向量检索领域的动态、向量检索技术的发展,并及时与大家分享,同样欢迎大家与我们交流讨论:-)
参考资料:
[1] Johnson, Jeff et al. “Billion-Scale Similarity Search with GPUs.” IEEE Transactions on Big Data 7 (2021): 535-547.
[2] Wang, Jianguo et al. “Milvus: A Purpose-Built Vector Data Management System.” Proceedings of the 2021 International Conference on Management of Data (2021): n. pag.
[3] Guo, Rentong et al. “Manu: A Cloud Native Vector Database Management System.” Proc. VLDB Endow. 15 (2022): 3548-3561.
向量检索实验室
微信号:VectorSearch
扫码关注 了解更多