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