多下标哈希表——Fast Exact Search in Hamming Space with Multi-Index Hashing

来源:互联网 发布:php访客统计 编辑:程序博客网 时间:2024/05/27 20:31

《Fast Exact Search in Hamming Space with Multi-Index Hashing》这篇文章的第一作者是多伦多大学的Mohammad Norouzi,最早发表在CVPR2012,后被PAMI2014收录。中文译名是《基于多下标哈希的汉明空间的快速精确搜索算法》。下文是本人lhaof对文章的部分翻译和解析。

Norouzi考虑在汉明空间的两个相关的搜索问题。给定一个二进制编码串的数据集H。第一个问题是对于一个给定的编码在H内找k个离给定编码最近的编码。这称为汉明空间内的kNN搜索。比如1-NN问题,除了穷举式搜索,没有更好的办法。

第二个问题是对一个查询,在数据库中找距离查询点小于一个固定的汉明距离的所有编码。有时被称为近似查询问题,或者PLEB(point location in equal balls,等球内点定位)问题。一个二进制编码是一个查询码的r邻居,当且仅当它们不同的比特数小于等于r。r邻居搜索问题定义为在H中找到查询g的所有r邻居。

一种解决r邻居搜索问题的方法是用一个哈希表把H中的二进制编码都存起来,然后访问查询g的r距离内的哈希位置内是否有数据点。假设二进制码是q比特的,那么就要查询C(q,0)+C(q,1)+...+C(q,r)共计这么多次,记作L(q,r)。这个关于q和r的函数随r增长得非常快,在实际中并不可行。

多下标哈希(mih)是一种将数据库中的二进制编码分割成m个不相交的子字符串,然后对m个不同的哈希表索引m次,来实现插入的操作。给定一个查询码,若数据库中有一个数据码,它至少有一个子字符串与查询码是相近的,那么这个数据码被称作邻居候选。对于每个邻居候选,用整个的二进制编码串来检测它的合法性,然后移除里面的非r邻居。为了对于大规模的数据集也可行,这些不相交子字符串的选择要使得邻居候选集合小,同时所需内存在合理范围内。同时也要求所有在符合条件的即在r距离内的邻居都要被找到。

mih为二进制编码串的子字符串创建哈希表。每个二进制编码h都包含q比特,然后被分成m个不相交的子字符串,记作h(1),h(2),...,h(m),每个子字符串的长度都是q/m比特。为了方便,假设q能被m整除,并且子字符串包括的都是连续的比特。那么有以下的关键结论:当两个二进制编码串h和g有r或者小于r个对应位置的比特是不同的时候,那么在它们的m个子字符串中,至少有一个子字符串最多有[r/m]个比特是不同的。这一结论可由鸽笼原理得出。

那么,就可以将问题转化为:在每个子字符串i内,在所有h(i)中找二进制编码g(i)的[r/m]邻居候选。这样,对于每个子字符串都得到一个邻居候选的集合,将这m个集合求并得到整个邻居候选集。然后逐一检测这些邻居候选是否与查询编码g的汉明距离小于等于r,最终得到r邻居搜索问题的精确解。由于邻居候选的数目不会很多,而每次检测邻居候选是否合法,即计算邻居候选到查询码g的距离时,只需要O(q)的时间复杂度。所以时间效率得到提高。


0 0
原创粉丝点击