Paper:ONNG-论文解读

183 阅读3分钟

Introduction

这是一篇关于向量数据库索引的论文,主要研究基于图的索引结构。
作者介绍了常见的基于哈希、树、量化、图的索引,并且指出,基于图的索引很难进行分析,所以,作者从图的入度和出度出发进行优化。
并依次提出了三种对于度的调整方案:

  1. a static degreeadjustment method for deriving an adjusted graph from the edges and reversed edges of a KNNG to roughly adjust the indegrees and outdegrees.
  2. a degree-adjustment method with constraints for more precisely adjusting the indegrees and outdegrees.
  3. a dynamic degree-adjustment methodfor dynamically determining the optimal outdegree from the required accuracy at the beginning of a search considering that individual users require different levels of accuracy for each search.

Detail

关于算法一

image.png 这个算法其实就是正常的KNN搜索+剪枝。
G是构建好的邻近图,q为查询向量,ep就是搜索半径的弹性范围e_{p}就是搜索半径的弹性范围,S是遍历候选集,R是结果集

  1. 首先在临近图中按特定方法选取出可能的邻近点放入S中,依次遍历
  2. 如果当前遍历的点s在q的近似邻域r*(1+epe_{p})中,按照与向量q的距离远近依次访问其邻居集M
  3. 令当前访问的邻居是n。
  4. 如果n在q的近似邻域内,即d(n,q)<r * (1+epe_p),那么把n放入候选集S。
  5. 如果n在q的精确邻域内,即d(n,q)<r,那么把n放入结果集R。
  6. 将结果集R大小裁剪为k以下。如果恰好为k,则将r更新为R中距离q最远的点对应的距离。

KNNG,BKNNG,TKNNG

BKNNG是KNNG对应的双向邻域图,TKNNG是KNNG的反向图,作者发现这几种邻域图的QPS和precision有明显的区别。

image.png

  • 原因在于KNNG中的点拥有的出度固定,而有很多点的入度为0,或是极少,被访问的概率很低。
  • 而TKNNG作为KNNG的反向图,它的点入度固定,相反获得了更多的出度,这也意味着从一个点出发可以访问更多的邻居
  • BKNNG作为KNNG的双向图,通过度调整方法,可以获得更好的搜索性能

结论:

• High outdegrees that increase query time should be reduced.
• Low indegrees that reduce precision should be increased.

静态度调整

image.png

# 简单用python+伪代码翻译一下
# 对一个邻域图G的度进行调整,将出度和入度调整到预期度e_o和e_i或以下
def ConstructAdjustedGraph( G(V,E) , e_o , e_i):
    VV = V,EE = {} # 一开始不选取任何边
    for v,index in VV: # 遍历每一个点
        s = {v的邻居结点}
        while len(s) > 0 and index <= e_o and index <= e_i:
            n = v的最近邻
            s中去掉n这个点
            if index < e_o:
                EE += <v,n>
            if index < e_i:
                EE += <n,v>
return G(VV,EE)

带约束的静态度调整

静态调整会带来高出度的点?

image.png 这个算法获得G_t时将eoe_o设置为了0,得到一个空图?自相矛盾?

路径调整

image.png 路径调整的思路就是裁剪不必要的边,什么是不必要的边呢?
如上图b,nsndn_s到n_d存在路径nsndn_s \rightarrow n_dnsn3ndn_s \rightarrow n_3 \rightarrow n_d,那么第一条路径就是不必要的。
但是图a中另一条路径长度为3,不可以 删除。

即,对于点a、点b,有直达路径e1e_1和绕行路径s,且len(s)=2,如果s上每一条边的长度都小于e1e_1那么就可以把s删除(图c中的绕行路径就不可以删除,因为e5>e4e_5 > e_4

image.png

建图

image.png

评估

损失函数 image.png

image.png

image.png

image.png

Conclution

就是在原有的ANNG图上加上了度的调整,牺牲了建图的效率换取检索时间。同时论文中还改进了检测点是否被访问过的方法。(怎么说呢,有点水,当然思路还是有一定的参考价值的)

References

Main:Optimization of Indexing Based on k-Nearest Neighbor Graph for Proximity Search in High-dimensional Data (arxiv.org)