我正在阅读有关LSH的此调查,特别是引用了2.2.1
部分的最后一段:
为了改善召回,构建了L个哈希表和项目 位于L(L',L'< L)散列桶h_1(q),···,h_L(q) 被检索为随机R近邻搜索的q项附近 (或随机c-近似R-近邻搜索)。 为了保证精度,每个L哈希码y_i都需要 是一个长代码,这意味着桶的总数是 太大而无法直接索引。 因此,只有非空的桶 通过使用哈希码h_l的对流散列来保留 (x)的
我有3个问题:
h_l (x)
”的传统哈希是什么意思?h_l(x)
可能是一个长代码,所以可能的桶数量可能很大。例如,如果h_l(x)
是二进制代码且length
的长度为h_l(x)
,那么我们总共有L*2^length
个桶(因为我们使用L
哈希表)......是正确的吗?q
所属的存储区,为了找到最近的邻居,我们必须使用原始向量q
和原始距离度量标准?例如,假设原始向量q
在128维q=[1,0,12,...,14.3]^T
中,它在我们的应用程序中使用欧氏距离。现在假设我们在LSH中使用的散列函数(假设L = 1,为简单起见)将此向量映射到20维y=[0100...11]^T
的二进制空间,以便确定将q
分配给哪个桶。因此y
具有相同的存储桶B
索引,并且已包含100个向量。现在,为了找到最近的邻居,我们必须使用欧氏距离将q
与所有其他100个128维向量进行比较。这是对的吗?答案 0 :(得分:0)
他们正在使用的方法来改进召回构造更多的哈希表,并且基本上为每个参考项目存储ID的多个副本,因此空间成本更大[4]。如果存在大量空桶以增加检索成本,则汉明空间中的双哈希方案或快速搜索算法可用于快速检索哈希桶。我认为在这种情况下,他们使用双哈希函数来检索非空桶。
桶/存储单元的数量[1] [2] [3] - > O(nL)
参考文献:
[1] http://simsearch.yury.name/russir/03nncourse-hand.pdf
[2] http://joyceho.github.io/cs584_s16/slides/lsh-12.pdf
[3] https://users.soe.ucsc.edu/~niejiazhong/slides/kumar.pdf
[4] http://research.microsoft.com/en-us/um/people/jingdw/Pubs%5CLTHSurvey.pdf