隨著大規模圖像檢索、視頻搜索、推薦等場景的數據規模越來越大,對高維空間向量檢索的時延和準確率提出了更高的要求。云搜索服務針對大規模的向量檢索場景提供了具體的解決方案,基于自研的向量搜索引擎,結合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版本的集群支持向量檢索。
- 向量檢索插件涉及較高的內存計算,內存要求比普通索引高,建議集群規格配置為內存優化型的計算規格。