VLDB'22-(多层PQ图战胜HNSW)HVS: Hierar

2022-12-03  本文已影响0人  Caucher

标题:HVS:基于泰森图的层次化图结构解决近似最近邻搜索
作者来自日本名古屋大学,大阪大学和北海道大学

编者的总结

  1. 本文的核心思路是把HNSW的上层替换掉,做一个收敛到query neighborhood速度更快,质量更好的起始位点,以达到更好的查询速度。
  2. 多层PQ图的这个思想很有趣,某些voroni cell中包含的数据点很密就到下一层用基数更大的Voroni cell细分,这实际上是解决了PQ中的一些数据倾斜的问题,采取的是自适应PQ分段的思想,最终达成的效果就是基于数据密度做分区。

编者的思考

  1. 之前有研究(https://www.jianshu.com/p/580609371bed)提出HNSW的上层结构提供的快速导航不是查询bottleneck,因此用处不大;而本文的核心提升就在快速导航阶段以及入口点的选择,在某种程度上是不是一种冲突?或者是否可以理解为,只要导航最终得到的入口点足够好,仍然能有效提升查询性能?
  2. 如果上层的收敛质量足够好,那么在底层的查询将只是在query neighborhood的局部进行查找,这时使用局部性质更好的KNN图会不会效果更好?
  3. 这个工作一个弱点是没有理论保障,不能确定找到的enter point和query point的距离是不是足够近(比如前1%近的点)。复杂度的分析也建立在了错误的基础上(HNSW的搜索复杂度是O(logn)的说法是经不起推敲的),构建的复杂度也没有分析。
    ps: 尽管如此,这份工作的质量已经足够高了
  4. 实验仍有不少疑点;
  5. 另外一个感受是,partition-based的方法,比如PQ,也能够快速达到local neighborhood,本文的一个深层思想,其实就是先用partition的策略快速到达高质量的local neighborhood,再用图结构完成高精度搜索。

ABSTRACT

快速接近query neighborhood以提升搜索性能

3 THE CONSTRUCTION OF HVS

3.1 Basic ideas

如下图,HVS的主要结构分成三部分:

从top layer到base layer,从上往下会有一些跨层的边,只有这些边能负责跨层的路由。第一部分和第二部分在查询时负责找base layer的入口点,HVS的核心竞争优势就是有一个更好的入口点。


image.png

上面提到,第一部分和第二部分的图中node不是数据集中的点,具体来说:

image.png

上面一直在讲各层的node和图,那么数据集本身的点是如何索引的?

3.2 Multi-level quantization technique

本节主要讲上层的node是怎么选出来的。

  1. 首先在第T层 (bottom layer) 做一下PCA-OPQ,结果需要保留一个旋转矩阵,和2^T个codebooks。
  2. 自底向上选择上层的nodes。具体来说,每次要对下层的codebooks两两配对准备合并(即,向量的两个小段合并成一个大段),假设每个codebook有L个codewords,一对codebook就可能有L^2种可能的codewords,我们还需要从中选出来L个。
    接下来我们针对这两个问题给出答案

如何两两配对codebook?

如下式,作者使用互信息来评价一对codebook,其中f_C(x)代表y在C上的密度,定义为数据集中点落在y的cell里的比例,比例越高密度越大。

image.png

如何选择L个codewords?

上面提到,合并两个codebooks需要从L^2个codewords中选择L个最合适的。作者将这L^2个codewords做了个带权K-means,然后把聚类中心移动到最近的codewords即可。如果有重复,就再用一个“重要性采样技术”去生成剩下的几个。
(编者注:感觉怎么选可能也不是很重要)

实现细节

3.4 Density-based data allocation strategy

这一节讲如何逐层对HVS赋予数据点。首先要明确的是,base layer包含全部数据点,top layer不包含任何数据点;second layer包含全部数据点(文中未明说)。我们接下来讲的是从3-rd layer开始,逐层筛选数据子集的过程。

什么样的数据点会继续进入到下一层,接受更严格的PQ空间分区呢?答案是那些在当前层的voroni cell密度过大的点,如果一个voroni cell挤进去太多数据点,实际上数据分割和近似效果就会差一些。具体来说,本文使用的评价指标是knn的密度估计乘量化误差。密度估计如下式,是从一本书中学来的一个方法,有一定道理但也有强假设。

image.png
有了指标之后,每次会选择指标最大的那一批数据点进入下层,每次选1/\delta的数据量进入下层,整体就会是指数衰退的。

4 THE SEARCHING IN HVS

6 EXPERIMENTS

Intel(R) Xeon(R) Gold 6262V CPU@1.90Ghz with 200GB memory, running in Ubuntu 18.04.
C++编写

6.2 Memory cost

6.3 Indexing time and training time

6.4 Search performance

6.4.1 The efficiency of multiple levels.

6.4.2 The comparison study

上一篇 下一篇

猜你喜欢

热点阅读