web-dev-qa-db-ja.com

Locality Sensitive Hashingを理解する方法は?

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

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

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

147
MrROY

私がLSHについて見た中で最高のチュートリアルは、「Massing 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&Ashwin Lall、ACL201 から2枚のスライドを借りて、余弦距離に対するLSHファミリーの直感を少し説明しようとします。 enter image description here

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

enter image description here

  • 次に、2つのデータポイントのシグネチャを見てみましょう。例のように、6ビット(正方形)のみを使用して各データを表します。これは、元のデータのLSHハッシュです。
  • 2つのハッシュ値の間のハミング距離は1です。これは、署名の違いが1ビットのみであるためです。
  • 署名の長さを考慮して、グラフに示すように、angularの類似性を計算できます。

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

245
greeness

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

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

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

そして、1枚の写真は1000語なので、以下の写真を確認してください。

enter image description here http://micvog.files.wordpress.com/2013/08/lsh1.png

それが役に立てば幸い。しゅう

35
mvogiatzis

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

概要の写真(スライドには他にもたくさんあります):

enter image description here

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

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

21
nilsi
  • LSHは、ドキュメント/イメージ/オブジェクトのセットを入力として受け取り、一種のハッシュテーブルを出力するプロシージャです。
  • このテーブルのインデックスには、同じインデックスにあるドキュメントがsimilarと見なされ、異なるインデックスにあるドキュメントが「dissimilar」。
  • ここで、similarはメートル法としきい値の類似性にも依存しますs LSHのグローバルパラメータのように機能します。
  • 問題に対する適切なしきい値sを定義するのはユーザー次第です。

enter image description here

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

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

6
Carlos Teixeira

私は視覚的な人です。これが私にとって直観として機能するものです。

おおよその検索対象は、アップル、キューブ、椅子などの物理的なオブジェクトだとしましょう。

LSHに対する私の直感は、これらのオブジェクトの影を取ることに似ているということです。 3Dキューブの影をとると、紙の上に2Dの正方形のようなものができます。または、3D球体は紙の上に円のような影ができます。

最終的に、検索問題には3つ以上のディメンションがあります(テキスト内の各Wordは1つのディメンションになる可能性があります)が、 shadow の類推は今でも非常に便利です。

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

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

全体の秘Theは、影をより低い次元で依然として意味のあるものにすることです。認識できるほど十分に元のオブジェクトに似ています。

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

オブジェクトを光に提示する方法によって、認識可能な影が得られるかどうかが決まります。だから私は、「良い」LSHを、私のオブジェクトを表すものとして影が最も認識できるように、光の前で私のオブジェクトを回転させるものと考えています。

要約すると、LSHを使用して、キューブ、テーブル、椅子などの物理オブジェクトとしてインデックスを作成することを考え、その影を2Dで、最終的には線(ビット文字列)に沿って投影します。そして、「良い」LSH「機能」とは、2D平地で後で区別できる形状を得るためにライトの前でオブジェクトを提示し、後でビットストリングをどのように表示するかです。

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

2

非常に短い、tldr答え:

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

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

0