最近邻算法调研

无论是图像检索、视频检索还是长文本检索,只要涉及到检索,必然需要建立索引。建立索引就是预处理的过程,用空间换时间,而有时空间的节省往往能够降低时间复杂度。磨刀不误砍柴工,就像考试之前好好复习一样,先把知识缓存下来,提取知识的时候才能够更加迅速。

文本倒排索引是索引的一种,这种方式终究无法应对海量数据。

图像检索、视频检索、音频检索所使用的套路非常相近:

  • 对内容提取特征
  • 对特征进行压缩、规整,得到向量,相当于哈希值
  • 查询时,对待查询视频提取特征、计算哈希,去向量库中检索

其中最后一步,拿一个向量去向量库中检索,这个问题名叫最近邻近似搜索(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。

建立索引之后,是否支持动态更新又是另一个问题。

平衡树、红黑树、堆等数据结构也相当于一种索引,它们都实现了增删改查。

参考资料

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

猜你喜欢

转载自www.cnblogs.com/weiyinfu/p/9754701.html