近似最近鄰算法查找(ann)--01

Ann, Approximate Nearest Neighbor的縮寫,就是近似最近鄰搜索。

在機器學習領域,語義檢索,圖像識別,推薦系統等方向常涉及到的一個問題是:給定一個向量X=[x1,x2,x3...xn],需要從海量的向量庫中找到最相似的前K個向量。通常這些向量的維度很高,對於在線服務用傳統的方法查找是非常耗時的,容易使得時延上成爲瓶頸,因此業界通用的方式就是將最相似的查找轉換成Ann問題

這樣查找返回的前K個向量並不一定是最相似的K個向量,衡量Ann算法好不好的一個依據是召回,每次Ann請求返回的K個結果與使用暴力查找的K個結果去比較,如果完全一致,說明是最好的。因爲省了搜索時間卻沒有影響效果。

目前的Ann算法有基於圖的,基於樹的,基於哈希等,並且有很多關於Ann算法的實現,開源的很多,如annoy, faiss,nmslib, falconn等。下圖是一些算法及其實現在搜索效率和召回的一個性能評測。

ann-benchmarks

更詳細的一些測試在這個網站有數據 http://ann-benchmarks.com。作者比較了不同的距離度量方式及在不同數據集的效果。

基於圖的算法(hnsw)其實在評測上看起來是最好的, 但是其耗費比較多內存,樹的方法在維度大時會變成暴力搜索,其它方法也有不同的特點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章