最近鄰算法調研

不管是圖像檢索、視頻檢索仍是長文本檢索,只要涉及到檢索,必然須要創建索引。創建索引就是預處理的過程,用空間換時間,而有時空間的節省每每可以下降時間複雜度。磨刀不誤砍柴工,就像考試以前好好複習同樣,先把知識緩存下來,提取知識的時候纔可以更加迅速。html

文本倒排索引是索引的一種,這種方式終究沒法應對海量數據。git

圖像檢索、視頻檢索、音頻檢索所使用的套路很是相近:github

  • 對內容提取特徵
  • 對特徵進行壓縮、規整,獲得向量,至關於哈希值
  • 查詢時,對待查詢視頻提取特徵、計算哈希,去向量庫中檢索

其中最後一步,拿一個向量去向量庫中檢索,這個問題名叫最近鄰近似搜索(Approximate Nearest Neighbor,ANN)。算法

阿里巴巴工程師提出一種很是迅猛的算法:
Fast Approximate Nearest Neighbor Search With The Navigating Spreading-out Graph緩存

搜索最近k個近鄰的,時間複雜度接近於log N。數據結構

Annoy(Spotify開源的ANN庫)的做者Erik Bernhardsson作了一個ANN-benchmarks。.net

創建索引以後,是否支持動態更新又是另外一個問題。rest

平衡樹、紅黑樹、堆等數據結構也至關於一種索引,它們都實現了增刪改查。視頻

袁勇博客,ANN問題綜述:https://yongyuan.name/blog/ann-search.html
袁勇github,使用matlab實現比較各類ANN算法
Annoy源碼解讀:https://blog.csdn.net/KIDGIN7439/article/details/76599027htm

ANN庫官網:http://www.cs.umd.edu/~mount/ANN/

參考資料

https://www.zhihu.com/question/280496610/answer/429491463
https://zhuanlan.zhihu.com/p/37381294
https://zhuanlan.zhihu.com/p/35760535
https://zhuanlan.zhihu.com/p/29282342
https://zhuanlan.zhihu.com/p/43972326
faiss原理:https://zhuanlan.zhihu.com/c_159623040
高維空間最近鄰算法評測:https://zhuanlan.zhihu.com/p/37381294

相關文章
相關標籤/搜索