我注意到LSH似乎是查找具有高维属性的类似项目的好方法。
在阅读了论文http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf后,我仍然对这些公式感到困惑。
有没有人知道一个博客或文章解释这个简单的方法?
答案 0 :(得分:242)
我在LSH中看到的最好的教程是书:大规模数据集挖掘。 检查第3章 - 查找类似项目 http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf
另外,我推荐以下幻灯片: http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf。 幻灯片中的示例帮助我理解了余弦相似性的散列。
我从Benjamin Van Durme & Ashwin Lall, ACL2010借了两张幻灯片,试着解释一下LSH家族对余弦距离的直觉。
我在python中有一些示例代码(仅50行),它使用余弦相似性。 https://gist.github.com/94a3d425009be0f94751
答案 1 :(得分:35)
向量空间中的推文可以是高维数据的一个很好的例子。
查看我关于将Locality Sensitive Hashing应用于推文以查找类似内容的博文。
http://micvog.com/2013/09/08/storm-first-story-detection/
因为一张图片是千言万语,请查看下图:
http://micvog.files.wordpress.com/2013/08/lsh1.png
希望它有所帮助。 @mvogiatzis
答案 2 :(得分:21)
这是斯坦福大学的一篇演讲,解释了它。这给我带来了很大的不同。第二部分更多是关于LSH,但第一部分也包括它。
概述图片(幻灯片中还有更多内容):
高维数据中的近邻搜索 - 第1部分: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf
高维数据中的近邻搜索 - 第2部分: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf
答案 3 :(得分:6)
重要的是要强调不同的相似性度量具有不同的LSH实现。
在我的博客中,我试图彻底解释LSH的minHashing(jaccard相似性度量)和simHashing(余弦距离度量)的情况。希望对你有帮助: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/
答案 4 :(得分:2)
我是一个视觉人。这对我来说是一种直觉。
假设您要搜索的每件事物都是物理对象,例如苹果,立方体,椅子。
我对LSH的直觉是它类似于拍摄这些物体的阴影。就像你拍摄3D立方体的阴影一样,你会在一张纸上得到2D方形,或者3D球体会在一张纸上看到一个像圆形的阴影。
最终,搜索问题中存在多个维度(文本中的每个单词可能都是一维),但shadow类比对我来说仍然非常有用。
现在我们可以有效地比较软件中的位串。固定长度的位串有点或多或少,就像单个维度中的线一样。
因此,对于LSH,我最终将对象的阴影投影为单个固定长度的行/位串上的点(0或1)。
整个技巧是拍摄阴影,使它们在较低维度仍然有意义,例如:它们以足够好的方式与原始物体相似,可以被识别。
透视立方体的2D绘图告诉我这是一个立方体。但是我无法在没有视角的情况下轻易区分2D正方形和3D立方体阴影:它们对我来说都看起来像一个正方形。
如何将我的物体呈现在灯光下,将决定我是否获得了一个可识别的阴影。所以我想到了一个好的" LSH是一个将我的物体转向灯光前的物体,这样它们的阴影最能被识别为代表我的物体。
所以回顾一下:我认为用LSH作为物理对象(如立方体,桌子或椅子)进行索引的东西,我将它们的阴影投影在2D中并最终沿着一条线(一个字符串)。一个好的" LSH"功能"我是如何在光线前呈现我的物体,以便在2D平地和后来的比特弦中获得近似可辨别的形状。
最后,当我想搜索我所拥有的对象是否与我索引的某些对象相似时,我会看到这个"查询"对象使用相同的方式在光源前呈现我的对象(最终也以一个字符串结束)。现在,我可以比较一下这个位字符串与我所有其他索引位字符串的相似程度,如果我找到一种很好的,可识别的方式将我的对象呈现给我的光线,那么它就是搜索我整个对象的代理。
答案 5 :(得分:0)
tldr 的答案很简短:
对位置敏感的哈希的示例可能是:首先在要输入的哈希空间中随机设置平面(具有旋转和偏移),然后在该空间中将点放到哈希中,然后针对每个平面测量该点在其上方或下方(例如:0或1),答案是哈希。因此,如果使用前后的余弦距离来测量,相似的空间点将具有相似的哈希值。
您可以使用scikit-learn阅读此示例:https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer