最近邻算法调研

不管是图像检索、视频检索仍是长文本检索,只要涉及到检索,必然须要创建索引。创建索引就是预处理的过程,用空间换时间,而有时空间的节省每每可以下降时间复杂度。磨刀不误砍柴工,就像考试以前好好复习同样,先把知识缓存下来,提取知识的时候才可以更加迅速。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

相关文章
相关标签/搜索