C 如何理解位置敏感哈希?

C 如何理解位置敏感哈希?,c,machine-learning,hashmap,nearest-neighbor,locality-sensitive-hash,C,Machine Learning,Hashmap,Nearest Neighbor,Locality Sensitive Hash,我注意到,LSH似乎是找到具有高维属性的类似项的好方法 看完论文后,我仍然对那些公式感到困惑 有人知道一篇博客或文章解释了这一简单方法吗?我看过的关于LSH的最好教程是《海量数据集的挖掘》一书。 查看第3章-查找类似项目 此外,我还推荐以下幻灯片: . 幻灯片中的示例在理解余弦相似性的哈希运算方面帮助了我很多 我借用了两张幻灯片,试图解释一下LSH族对于余弦距离的直觉。 图中有两个圆圈,分别为红色和黄色,代表两个二维数据点。我们正试图找到他们使用LSH的原因 灰线是一些均匀随机拾取的平面

我注意到,LSH似乎是找到具有高维属性的类似项的好方法

看完论文后,我仍然对那些公式感到困惑


有人知道一篇博客或文章解释了这一简单方法吗?

我看过的关于LSH的最好教程是《海量数据集的挖掘》一书。 查看第3章-查找类似项目

此外,我还推荐以下幻灯片: . 幻灯片中的示例在理解余弦相似性的哈希运算方面帮助了我很多

我借用了两张幻灯片,试图解释一下LSH族对于余弦距离的直觉。

  • 图中有两个圆圈,分别为红色和黄色,代表两个二维数据点。我们正试图找到他们使用LSH的原因
  • 灰线是一些均匀随机拾取的平面
  • 根据数据点位于灰线上方还是下方,我们将此关系标记为0/1
  • 在左上角,有两行白色/黑色正方形,分别代表两个数据点的签名。每个方块对应于位0(白色)或位1(黑色)
  • 因此,一旦有了一个平面池,就可以使用数据点相对于平面的位置对其进行编码。想象一下,当池中有更多平面时,签名中编码的角度差更接近实际差异。因为只有驻留在两点之间的平面才会为两个数据提供不同的位值

  • 现在我们来看两个数据点的签名。与示例中一样,我们仅使用6位(正方形)来表示每个数据。这是原始数据的LSH哈希
  • 两个散列值之间的汉明距离为1,因为它们的签名仅相差1位
  • 考虑到签名的长度,我们可以计算它们的角度相似性,如图所示
我这里有一些python的示例代码(只有50行),它使用了余弦相似性。
向量空间中的tweet是高维数据的一个很好的例子

查看我的博客文章,关于对tweet应用位置敏感哈希来查找类似的tweet

因为一张图片等于千言万语,所以请检查下面的图片:

希望能有帮助。
@mvogiatzis

这是斯坦福大学的一个演示,解释了这一点。这对我来说有很大的不同。第二部分更多的是关于LSH,但第一部分也涵盖了它

概述图片(幻灯片中还有更多内容):

高维数据中的近邻搜索.第1部分:

高维数据中的近邻搜索.第2部分:
我是一个视觉化的人。以下是我的直觉

假设你要搜索的每件东西都是物理对象,比如苹果、立方体、椅子

我对LSH的直觉是,它类似于拍摄这些物体的阴影。比如,如果你在一张纸上画一个3D立方体的阴影,你会得到一个2D正方形,或者一个3D球体会在一张纸上画一个圆形阴影

最终,一个搜索问题中的维度远不止三个(文本中的每个单词都可能是一个维度),但这个类比对我来说仍然非常有用

现在我们可以在软件中有效地比较位串。固定长度的位字符串或多或少有点像一维中的一条线

因此,使用LSH,我最终将对象的阴影投影为单个固定长度线/位字符串上的点(0或1)

整个技巧是采用阴影,使其在较低维度上仍然有意义,例如,它们以一种可以识别的足够好的方式与原始对象相似

透视图中的二维立方体图形告诉我这是一个立方体。但我无法在没有透视的情况下轻松区分二维正方形和三维立方体阴影:它们在我看来都像一个正方形

我如何将我的物体呈现给光线将决定我是否获得了一个良好的可识别阴影。所以我认为一个“好的”LSH是一个可以在灯光前旋转我的物体,这样它们的阴影就可以最好地识别为代表我的物体

简单地说:我把要用LSH索引的东西想象成立方体、桌子或椅子等物理对象,然后我将它们的阴影投影到2D上,最终沿着一条线(一个小字符串)投影。一个“好的”LSH“函数”是我如何在灯光前呈现我的物体,在2D平面上获得一个大致可分辨的形状,然后是我的位串

最后,当我想搜索我拥有的某个对象是否与我索引的某些对象相似时,我会使用相同的方式将这个“查询”对象的阴影呈现在灯光前(最终也会得到一个位字符串)。现在我可以比较这个位字符串和我所有其他的索引位字符串的相似程度,如果我找到一种好的、可识别的方式来将我的对象呈现给我的灯光,它可以作为搜索整个对象的代理。

  • LSH是一个将一组文档/图像/对象作为输入并输出一种哈希表的过程
  • 此表的索引包含文档,因此相同索引上的文档被视为类似,不同索引上的文档被视为“不同”
  • 其中,相似性取决于度量体系,也取决于阈值相似性s,其作用类似于LSH的全局参数
  • 您可以定义问题的适当阈值s

必须强调的是,不同的相似性度量具有不同的LSH实现

在我的博客中,我试图彻底解释关于minHashing(jaccard相似性度量)案例的LSH