0

我正在阅读有关LSH的调查,特别是引用部分的最后一段2.2.1

为了提高召回率,构建了 L 个哈希表,并将位于 L (L ′ , L ′ < L) 个哈希桶 h_1 (q)、···、h_L (q) 中的项目检索为 q 的附近项目随机 R 近邻搜索(或随机 c 近似 R 近邻搜索)。为了保证精度,L 个哈希码 y_i 中的每一个都需要是一个长码,这意味着桶的总数太大而无法直接索引。因此,通过对散列码 h_l (x) 进行对流散列,仅保留非空桶。

我有3个问题:

  1. 我不清楚粗体字:“诉诸哈希码的传统哈希”是什么意思h_l (x)
  2. 总是关于粗体句子,我不确定我是否得到了问题:我完全理解这h_l(x)可能是一个很长的代码,因此可能的存储桶的数量可能很大。例如,如果h_l(x)是二进制代码并且lengthh_l(x)的长度,那么我们总共L*2^length有可能的桶(因为我们使用L哈希表)......这是正确的吗?
  3. 最后一个问题:一旦我们找到查询向量属于哪个桶q,为了找到最近的邻居,我们必须使用原始向量q和原始距离度量?例如,假设原始向量q为 128 维q=[1,0,12,...,14.3]^T,并且在我们的应用程序中使用欧几里得距离。现在假设我们在 LSH 中使用的散列函数(为简单起见假设 L=1)将该向量映射到 20 维的二进制空间,y=[0100...11]^T以便决定分配q给哪个桶。所以y有相同的 bucket 索引B,并且已经包含 100 个向量。现在,为了找到最近的邻居,我们必须q使用欧几里得距离与所有其他 100 128 维向量进行比较。这个对吗?
4

1 回答 1

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

于 2016-08-01T09:56:05.960 回答