天天看點

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

阿裡雲 Elasticsearch 目前是公有雲營收增長最快的大資料産品之一。随着客戶數的增長,我們發現随着AI技術的不斷普及,針對向量檢索場景的需求量在逐漸提升。從人臉識别、音/視訊識别到商品智能推薦等場景,技術上都離不開向量檢索的能力作為支撐,而本片文章從構思到實踐為您全面了解阿裡雲 Elasticsearch 的向量檢索能力。

本文字數:1874

閱讀時間:約3~5分鐘

您将獲得

1、阿裡雲 Elasticsearch 向量檢索能力的演變過程

2、如何使用向量檢索

3、未來阿裡雲 Elasticsearch 的探索之路

以下是正文

一、創意的誕生

阿裡雲 Elasticsearch 是目前公有雲營收增長最快的大資料産品之一。随着客戶數的增長,我們發現随着 AI 技術的不斷普及,針對向量檢索場景的需求量在逐漸提升。比如人臉識别、音/視訊識别、商品智能推薦等場景,技術上都離不開向量檢索的能力作為支撐。以某專有雲客戶為例,客戶的場景是視訊安全監控,攝像頭每天會産生500萬幀采樣圖檔,每個月産生TB級的向量資料,業務上需要實時對這些視訊采樣資料進行圖檔比對搜尋。該客戶屬于典型的時序+向量檢索的場景,而時序分析場景剛好是 Elasticsearch 最擅長的部分,那麼我們能否在Elasticsearch現有能力的基礎上補充向量檢索的支援能力呢?基于這個樸素的想法,我們開始了與阿裡巴巴達摩院向量檢索團隊的合作,希望借助達摩院自研的向量檢索引擎補充阿裡雲 Elasticsearch 在向量檢索方面的能力,一站式解決雲上使用者全文檢索、時序分析及向量檢索的需求。

簡單介紹一下阿裡雲 Elasticsearch 使用的 Proxima 向量引擎庫:阿裡巴巴達摩院提供的 Proxima 向量檢索引擎是一個運用于大資料下,實作向量近鄰搜尋的高性能軟體庫,能夠提供業内性能和效果領先的基礎方法子產品,支援圖像搜尋、視訊指紋、人臉識别、語音識别和商品推薦等各種場景。同時,引擎對向量檢索的一些基礎能力,如聚類、距離計算、高并發、Cache 等做了深層次的優化。

目前 Proxima 向量檢索庫在阿裡集團覆寫的生産業務如圖所示:

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

二、優選線上方案

如何将 Proxima 引擎庫內建到阿裡雲 Elasticsearch 生态中,有兩個方向擺在我們眼前:一種是最直覺也是最簡單的離線方案,也是集團内其它兄弟團隊大部分采用的方案,依賴獨立的離線資源做索引全量 Build;另一種是線上方案,也是無縫對接 Elasticsearch 現有能力、易用性最好的方案,但寫入性能和存儲相對會有一些Overhead。兩種方案優劣勢對比如下:

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

考慮到雲上客戶大多數對彈性和穩定性要求比較高,我們最終選擇了易用性、穩定性更好的線上方案。

三、詳解設計方案

在确定線上方案的前提下,如何能滿足 Proxima 向量索引和 Elasticsearch 原生索引無縫內建呢?答案是利用 Lucene的 Codec 擴充機制。Codec 可以了解為 Lucene 索引檔案格式的一種協定,使用者隻要實作對應的寫入/讀取的業務流程,即可自定義正排、倒排、StoreFields 等不同索引的具體實作。在阿裡雲 Elasticsearch 的實作中,我們包裝并擴充了Lucene 的 Latest Codec,當向量資料寫入es的某個字段時,前期流程跟原生的流程一緻,先放入 indexBuffer 中;等内部發起 Refresh 時,調用底層的 Proxima 庫,消費向量資料建構出 Proxima 的向量索引。

查詢的時候,由于向量索引和原生索引一樣都是 Segment 粒度生成,是以我們隻要很輕量的實作向量 Segment 對應的 Weight 和 Scorer即可。具體的,當查詢到了 BuildScorer 階段,我們利用底層 Proxima 庫加載目前 Segment的向量索引檔案,通過 Native 方法查詢出TopN的 id 和 Score 後,通過docID和分數生成目前 Segment 的 Scorer,交給indexSearcher繼續執行上層的求交/求并操作即可。

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

基于 Codec 機制,向量索引已經可以被 Lucene 當成普通索引來管理,這對上層的 Elasticsearch 來說是完全透明的,是以可以實作不修改上層業務的前提下,相容 Elasticsearch 所有上層的分布式檔案操作;所有擴副本、本地 Failover 、阿裡雲快照備份/恢複等功能都與原生普通索引無異。是以大大提高了索引的穩定性,降低了使用者的使用成本。

四、性能與效果評測

以下是阿裡雲Elasticsearch 6.7.0版本環境實測資料,機器配置為資料節點16c64g*2 + 100G ssd雲盤,資料集為Sift128維 Float 向量

(http://corpus-texmex.irisa.fr/)

,資料總量為2千萬。索引配置全部是預設參數。

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

五、使用說明

5.1、建立索引

PUT test
{
  "settings": {
    "index.codec": "proxima",
    "index.vector.algorithm": "hnsw" # 可選值: hnsw/linear
  },
  "mappings": {
    "_doc": {
      "properties": {
        "feature": {
          "type": "proxima_vector", # 向量字段
          "dim": 2 # 向量次元,支援1~2048維
        },
        "id": {
          "type": "keyword"
        }
      }
    }
  }
}           

5.2 添加文檔

​
POST test/_doc
{
  "feature": [1.0, 2.0], # float數組,數組長度必須與mapping指定的dim保持一緻
  "id": 1
}           

5.3 檢索

GET test/_search
{
  "query": {
    "hnsw": {  # 與建立索引時指定的algorithm一緻
      "feature": {
        "vector": [1.5, 2.5], # float數組,數組長度必須與mapping指定的dim保持一緻
        "size": 10 # 指定召回的topN
      }
    }
  }
}           

六、總結展望

阿裡雲 Elasticsearch 始終緻力于為雲上使用者提供一站式的高性能、低成本的大資料檢索分析服務。向量檢索引擎是我們在人工智能領域邁出的第一步,後續的發力點還有很多,比如支援更豐富的近似算法、支援離線訓練、硬體加速等,有很多有意思的方向等待我們一起探索。目前阿裡雲ES向量檢索引擎即将在下一版本上線公有雲,有需求接入的使用者可以提前提工單給我們溝通使用場景,感謝大家的支援。

目前商業版的6.7和7.4版本,可以使用向量檢索

購買執行個體

,請點選

進一步了解産品

加入我們

從業務需求到能力擴充 | 阿裡雲Elasticsearch向量檢索能力的創變

繼續閱讀