Inverted Multi-Index
简介
Inverted Multi-index是Artem Babenko 和 Victor Lempitsky发表的一篇论文,论文起初发表在CVPR2012上,后来又增加了内容,又发表在2014的PAMI上,被引用的次数很高。
论文地址如下所示:
CVPR2012
PAMI 2014
引言
分析整篇文章,总结下来想法还是很直观。首先分析传统的倒排索引,在传统的倒排索引中,我们这样做:
- 首先N个M维的数据,首先进行K-means聚类,会生成K个聚类
- 将原始的每个M维的数据分别和K个聚类中心进行比较,然后找出距离最小的聚类。
- 会生成如下所示的索引结构,方框代表聚类中心,圆代表聚类中同一类的数据。
但是原始的倒排索引是在全维度上进行聚类,qurey时候先计算与聚类中心centroids的距离,然后计算centroids内的database与query的距离,避免了O(n)的搜索规模。然而,如果数据比较分散,没有出现明显的数据簇,直接进行聚类,数据将会非常稀疏。导致在查询的过程中,会只关注centroids内的点,然而忽视了实际很近的数据点。如下图所示:
所以,在论文中作者提出了一种新型的索引结构,将原始的数据进行维度划分,然后在各个维度中进行K-means聚类,将database中的数据映射到各个空间的centroids上,query时通过计算数据与database的centroids距离进行排序,返回K个紧邻。进行这种划分,一个最大的优势就是,采用了更精细的子空间划分,提高了检索的召回率。
Iverted Multi-Index
受到product quantization的思想启发,作者将原始的数据N×M维数据
D={p1,p2,p3,.......pn}
,分别划分为两个N×M/2维的数据。假设
pi=[p1i,p1j]
,其中
pi∈RM
。我们现在讲数据集进行划分为两部分,
p1i∈RM2
,
p1j∈RM2
。所有的数据进行划分以后,原始的N M维的数据集 变为
D1={p11,p12,p13,.......p1n}
和
D2={p21,p22,p23,.......p2n}
。分别对
D1
和
D2
进行K-means生成k个centroids的聚类,分别记为
U={u1,u2,u3,.....uk}
和
V={v1,v2,v3,.....vk}
。聚类中心形成以后,我们将前半部分和后半部分的聚类中心进行拼接以后才能完全代表database中的数据,所以总共存在
k2
个列表。将原始的数据集
pi
的前半部分
p1i
和
D1
的聚类中心进行比较,得到距离最近的聚类,后半部分同理。把
K2
的每一个(如图1的方框)lists写成
Wij
。所以每一个points
[p1i,p2i]
会分到最近的点
[ui,vj]
。
上述的
d(a,b)=d1(a1,b1)+d2(a2,b2)
距离采用欧式距离。
索引表建立以后,来了查询q以后,我们要得到距离q最近的k个邻居,由于
k2
个列表中有可能存在某个
Wij
后面没有数据,我们首先要找到
T(T>k)
个最近的聚类中心。我们首先分别从
U
中和
经过试验发现Multi-D-ADC比Multi-ADC有更高的召回率,Multi-ADC比Multi-D-ADC的计算速度更快。
总结
和Inverted index相比,由于
D
的数量不变,所有两者的索引结构所占用的内存相同,但是由于Inverted Multi-Index的列表长度为
倒排多索引(Inverted Multi-Index)是一种改进的索引结构,源于Artem Babenko和Victor Lempitsky的论文。它通过在不同维度上进行K-means聚类,提高检索召回率,解决了传统倒排索引在数据稀疏时的局限。该方法将数据分为两部分,分别进行聚类,然后使用多序列算法进行查询,以找到最接近的邻居。实验表明,Inverted Multi-Index在召回率上优于传统方法,但计算速度稍慢。
3887





