局所性に敏感なハッシュを理解するには?


156

LSHは、高次元のプロパティを持つ同様のアイテムを見つけるための良い方法のように思えます。

論文http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdfを読んだ後も、これらの式と混同されています。

その簡単な方法を説明するブログや記事を誰か知っていますか?


3
読む・ウルマン第3章- 「関連商品検索」infolab.stanford.edu/~ullman/mmds.html
achini

回答:


250

LSHについて私が見た中で最高のチュートリアルは、本:Mining of Massive Datasetsにあります。第3章を確認してください-同様のアイテムを見つける http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

また、以下のスライドをお勧めします:http : //www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf。スライドの例は、コサイン類似度のハッシュを理解するのに大いに役立ちます。

私は、Benjamin Van DurmeとAsh2010 Lall、ACL2010から2枚のスライドを借りて、コサイン距離のLSHファミリの直感を少し説明しようとしています。 ここに画像の説明を入力してください

  • 図では、黄色の 2つの円があり、2 つの2次元データポイントを表しています。LSHを使用してコサインの類似性を見つけようとしています。
  • 灰色の線は、ランダムに選択されたいくつかの平面です。
  • データポイントが灰色の線の上または下のどちらにあるかに応じて、この関係を0/1としてマークします。
  • 左上隅には、2つのデータポイントのシグネチャをそれぞれ表す、白/黒の正方形の2つの行があります。各正方形は、ビット0(白)または1(黒)に対応しています。
  • したがって、平面のプールを取得したら、平面に対応する位置でデータポイントをエンコードできます。プールに多くの平面がある場合、署名にエンコードされた角度の差が実際の差に近いと想像してください。2つのポイントの間にあるプレーンのみが2つのデータに異なるビット値を与えるからです。

ここに画像の説明を入力してください

  • 次に、2つのデータポイントの署名を確認します。例のように、各データを表すために6ビット(正方形)のみを使用します。これは、元のデータのLSHハッシュです。
  • 2つのハッシュ値の間のハミング距離は1です。これは、それらの署名が1ビットだけ異なるためです。
  • 署名の長さを考慮して、グラフに示すように、それらの角度の類似性を計算できます。

コサイン類似度を使用しているpythonのサンプルコード(わずか50行)があります。 https://gist.github.com/94a3d425009be0f94751


なぜそれが局所性依存と呼ばれるのですか?各ビットの割り当ては各計画に対するデータポイントの局所性に依存するためです?
nawara

21
局所性依存-互いに近くにあるデータポイントは、(同じバケット内の高い確率で)同様のハッシュにマッピングされます。
greeness 2013年

2
申し訳ありませんが、このトピックに遅れましたが、コサインについて質問がありました。プレゼンテーションでは、実際のベクトルと平面ベクトルの間の内積> = 0または0の場合、ビット値は1であると述べています。90度と180度の間の角度も、負の余弦。各平面は2つのベクトルで構成されており、実際のベクトルで作られるより小さな角度をとります。
vkaul11 2013

ありがとうございました。それで、hは角度の差をエンコードし、bは「精度」をエンコードすると言うのは正しいですか?このように、h * PIは放射のシータであり、bは角度の精度です。
user305883 2017年

1
あなたが提供したスライドは非常にきれいです:cs.jhu.edu/~vandurme/papers/VanDurmeLallACL10-slides.pdf-「プーリングトリック」の数学的ロジック、または私が見なければならない線形代数の概念についても説明していただけますかそれを理解するために?
user305883 2017年

35

ベクトル空間でのツイートは、高次元データの良い例です。

Locality Sensitive Hashingをツイートに適用して類似のハッシュを見つけることに関する私のブログ投稿をチェックしてください。

http://micvog.com/2013/09/08/storm-first-story-detection/

また、1つの画像は1000語なので、下の画像を確認してください。

ここに画像の説明を入力してください http://micvog.files.wordpress.com/2013/08/lsh1.png

それが役に立てば幸い。あずきっく


21

これを説明するスタンフォード大学からのプレゼンテーションです。それは私にとって大きな違いをもたらしました。パート2ではLSHについて詳しく説明しますが、パート1ではLSHについても説明します。

概要の写真(スライドにはさらに多くの情報があります):

ここに画像の説明を入力してください

高次元データの近傍検索-パート1:http : //www.stanford.edu/class/cs345a/slides/04-highdim.pdf

高次元データの近傍検索-パート2:http : //www.stanford.edu/class/cs345a/slides/05-LSH.pdf


LSH関数として直接minhashを使用しないのはなぜですか?
Thomas Ahle

1
バケットごとの非重複の数は十分に高いままですが、このような独立したハッシュ関数をm個使用すると、同じバケットへの非近接重複マッピングの確率が大幅に減少すると私は信じています。
Shatu

7
  • LSHは、一連のドキュメント/画像/オブジェクトを入力として受け取り、一種のハッシュテーブルを出力するプロシージャです。
  • このテーブルのインデックスにはドキュメントが含まれているため、同じインデックスにあるドキュメントは類似していると見なされ、異なるインデックスにあるドキュメントは「類似していない」と見なされます。
  • ここで、同様のメトリックシステムに依存し、また、閾値類似性にS LSHのグローバルパラメータのように作用します。
  • 問題に対して適切なしきい値sを定義するのはあなた次第です。

ここに画像の説明を入力してください

LSHの実装は、類似性の測定ごとに異なることを強調することが重要です。

私のブログでは、minHashing(ジャカードの類似性測定)とsimHashing(余弦距離測定)の場合のLSHについて徹底的に説明しようとしました。お役に立てば幸いです。https//aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/


2

私は視覚的な人間です。これが直感として私のために働くものです。

検索したいもののそれぞれが、リンゴ、立方体、椅子などの物理的なオブジェクトであると言います。

LSHに対する私の直感は、それがこれらのオブジェクトの影を取ることと似ているということです。たとえば、3D立方体の影を撮ると、1枚の紙に2Dの正方形のような影ができます。3D球体を使用すると、紙に丸のような影ができます。

最終的に、検索問題には3つを超える次元があります(テキストの各単語が1つの次元になる可能性があります)が、シャドウの類推は依然として非常に役立ちます。

これで、ソフトウェアでビットの文字列を効率的に比較できます。固定長のビット文字列は、多かれ少なかれ、1次元の線のようなものです。

したがって、LSHを使用して、最終的にオブジェクトの影を単一の固定長のライン/ビット文字列上のポイント(0または1)として投影します。

全体のトリックは、影をより低い次元でも意味をなすようにすることです。たとえば、認識できる十分な方法で元のオブジェクトに似ています。

遠近法による立方体の2D描画は、これが立方体であることを教えてくれます。しかし、2Dの正方形と3Dの立方体の影を遠近法なしで簡単に区別することはできません。どちらも私には正方形のように見えます。

オブジェクトをどのように光に当てるかによって、はっきりと認識できる影が得られるかどうかが決まります。したがって、「良い」LSHは、私のオブジェクトをライトの前に向けて、そのシャドウが私のオブジェクトを表すものとして最もよく認識できるようにするものとして考えます。

つまり、LSHを使用して、立方体、テーブル、椅子などの物理オブジェクトとしてインデックスを作成することを考え、それらの影を2Dで投影し、最終的に線(ビット文字列)に沿って投影します。そして、「良い」LSH「機能」は、オブジェクトをライトの前に置いて、2Dフラットランドでほぼ区別できる形状を取得し、後でビット文字列を取得する方法です。

最後に、私が持っているオブジェクトが、インデックスを付けたいくつかのオブジェクトに似ているかどうかを検索したい場合は、この「クエリ」オブジェクトの影を使用して、同じ方法でオブジェクトをライトの前に表示します(最終的には最終的にビットになります)文字列も)。そして今、私はそのビット文字列が他のすべてのインデックス付きビット文字列とどれほど類似しているかを比較できます。これは、オブジェクトを私の光に提示するための良い認識可能な方法を見つけた場合、オブジェクト全体を検索するためのプロキシです。


0

非常に短い、tldrの回答:

局所性に敏感なハッシュの例としては、入力の空間にランダムに(回転とオフセットを使用して)プレーンを設定してハッシュし、次にポイントをドロップして空間にハッシュし、各プレーンについてポイントがその上または下(例:0または1)、答えはハッシュです。したがって、空間内の類似したポイントは、前後の余弦距離で測定した場合、類似したハッシュになります。

scikit-learnを使用してこの例を読むことができます:https : //github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.