kd樹是其下的經典演算法。一般而言,在空間維度比較低時,kd樹的查詢效能還是比較高效的;但當空間維度較高時,該方法會退化為暴力列舉,效能較差,這時一般會採用下面的雜湊方法或者向量量化方法。
lsh(locality-sensitive hashing)是其下的代表演算法。文獻[7]是一篇非常好的lsh入門資料。
對於小資料集和中規模的資料集(幾個million-幾十個million),基於lsh的方法的效果和效能都還不錯。這方面有2個開源工具falconn和nmslib。
向量量化方法,即vector quantization。在向量量化編碼中,關鍵是碼本的建立和碼字搜尋演算法。比如常見的聚類演算法,就是一種向量量化方法。而在相似搜尋中,向量量化方法又以pq方法最為典型。
對於大規模資料集(幾百個million以上),基於向量量化的方法是乙個明智的選擇,可以用用faiss開源工具。
理解 product quantization 演算法
影象檢索:再敘ann search
最近鄰搜尋和近似最近鄰搜尋(NN和ANN)和庫
這樣查詢返回的前k個向量並不一定是最相似的k個向量,衡量ann演算法好不好的乙個依據是召回,每次ann請求返回的k個結果與使用暴力查詢的k個結果去比較,如果完全一致,說明是最好的。因為省了搜尋時間卻沒有影響效果。目前的ann演算法有基於圖 hnswlib 的,基於樹 pysparnn 的,基於雜湊 ...
近似最近鄰搜尋的QALSH方法 閱讀筆記
lsh和它的變體是解決高維歐氏空間下c 近似最近鄰 c ann 搜尋問題的著名索引方法。傳統上,lsh函式在某種意義上是以未知查詢的方式構建,即在任何查詢到達之前劃分桶。然而,距離乙個查詢越近的目標可能被劃分在不同的桶中是令人不快的。由於利用yi遺忘查詢桶劃分,針對外存的最先進的lsh方案,即c2l...
最近鄰查詢最優演算法 k d樹的最近鄰搜尋演算法
在k d tree樹中進行資料的k近鄰搜尋是特徵匹配的重要環節,其目的是檢索在k d tree中與待查詢點距離最近的k個資料點。最近鄰搜尋是k近鄰的特例,也就是1近鄰。將1近鄰改擴充套件到k近鄰非常容易。下面介紹最簡單的k d tree最近鄰搜尋演算法。基本的思路很簡單 首先通過二叉樹搜尋 比較待查...