放大位置敏感的哈希值

时间:2015-01-21 10:32:17

标签: machine-learning data-mining cosine-similarity locality-sensitive-hash

我正在尝试构建余弦位置敏感哈希,因此我可以找到候选项类似的项目对,而无需比较每个可能的对。我有它基本上工作,但我的数据中的大多数对似乎在-0.2到+0.2范围内具有余弦相似性所以我试图非常精细地切割它并选择具有0.1及以上余弦相似度的东西。

我一直在阅读Mining Massive Datasets chapter 3。这涉及通过放大地方敏感家庭来提高候选对选择的准确性。我想我只是理解数学解释,但我很难看到我实际上是如何实现它的。

到目前为止我所拥有的内容如下

  1. 我说有1000部电影,每部电影都有1M级用户的评分。每部电影都由稀疏的用户分数向量表示(行号=用户ID,值=用户的分数)
  2. 我构建了N个随机向量。矢量长度与电影矢量的长度(即用户数)相匹配。矢量值为+1或-1。我实际上将这些向量编码为二进制以节省空间,其中+1映射为1,-1映射为0
  3. 我通过拍摄电影的点积和N个随机向量中的每一个来构建每个电影的草图向量(或者更确切地说,如果我通过水平放置N个随机向量并将它们叠加在一起来创建矩阵R然后电影m的草图是R * m),然后在结果向量中取每个元素的符号,所以我以+ 1s和-1s的每个电影结束草图向量,我再次编码为二进制。每个向量的长度为N位。
  4. 接下来,我通过执行以下操作来查找类似的草图
    1. 我将草图矢量分成r个b波段
    2. 每个r比特带都是一个数字。我将该数字与乐队编号组合在一起,并将电影添加到该编号下的哈希桶中。每部电影都可以添加到多个存储桶中。
    3. 然后我看看每个桶。同一个桶中的任何电影都是候选对。
  5. 将此与mm.3的3.6.3进行比较,我的步骤是当我查看r位的波段时 - 如果r位具有相同的值,则一对电影通过AND步骤。我的OR步骤发生在桶中:如果电影都在任何桶中,则电影是候选对。

    这本书建议我可以通过添加更多的AND和OR步骤来“放大”我的结果,但是我实际上不知道如何做到这一点,因为对于更多层的构造过程的解释是在成对检查方面平等,而不是提出桶数。

    任何人都可以帮我理解如何做到这一点吗?

0 个答案:

没有答案