随着大规模图像检索、视频搜索、推荐等场景的数据规模越来越大,对高维空间向量检索的时延和准确率提出了更高的要求。云搜索服务针对大规模的向量检索场景提供了具体的解决方案,基于自研的向量搜索引擎,结合Elasticsearch的插件机制,高效集成了向量检索能力。
原理
向量检索从本质上讲,其思维框架和传统的检索方法没有区别。为了提升向量检索的性能,通常需要解决以下两个问题:
- 减少候选向量集
和传统的文本检索类似,向量检索也需要某种索引结构来避免在全量的数据上做匹配,传统文本检索是通过倒排索引来过滤掉无关文档,而向量检索是通过对向量建立索引结构来绕过不相关的向量,减小需要考察的范围。
- 降低单个向量计算的复杂度
向量检索支持漏斗模型,先对所有向量进行量化和近似计算,筛选出一定量接近检索目标的数据集,然后基于筛选的数据集进行精细的计算和排序。本方法不需要对所有向量都进行复杂的计算,可以有效提高检索效率。
向量检索即在一个给定的向量数据集中,按照某种度量方式,检索出与查询向量相近的K个向量(K-Nearest Neighbor,KNN),但由于KNN计算量过大,通常只关注近似近邻(Approximate Nearest Neighbor,ANN)问题。
功能
自研向量检索引擎集成了暴力检索、图索引(HNSW)、乘积量化、IVF-HNSW等多种向量索引,支持欧式、内积、余弦、汉明等多种相似度计算方式,召回率和检索性能均优于开源引擎。能够满足高性能、高精度、低成本、多模态等多种应用场景及需求。
向量检索支持原生Elasticsearch的所有能力,包括分布式、多副本、错误恢复、快照、权限控制等;兼容所有原生Elasticsearch生态,包括集群监测工具cerebro,可视化工具kibana,实时数据采集工具logstash等;提供Python/Java/Go/C++等多种客户端语言支持。
约束限制
- 仅7.6.2版本的集群支持向量检索。
- 向量检索插件涉及较高的内存计算,内存要求比普通索引高,建议集群规格配置为内存优化型的计算规格。