web-dev-qa-db-fra.com

Comment comprendre le hachage sensible à la localisation?

J'ai remarqué que LSH semble être un bon moyen de trouver des articles similaires avec des propriétés de grande dimension.

Après avoir lu le document http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf , je suis toujours confus avec ces formules.

Est-ce que quelqu'un connaît un blog ou un article qui explique cela facilement?

147
MrROY

Le meilleur tutoriel que j'ai vu pour LSH se trouve dans le livre: Mining of Massive Datasets. Consultez le chapitre 3 - Trouver des articles similaires http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

Aussi, je recommande la diapositive ci-dessous: http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf . L'exemple de la diapositive m'aide beaucoup à comprendre le hachage pour la similarité de cosinus.

J'emprunte deux diapositives de Benjamin Van Durme et Ashwin Lall, ACL201 et tente d'expliquer un peu les intuitions de LSH Families pour la distance en cosinus. enter image description here

  • Dans la figure, il y a deux cercles avec w ( rouge et jaune de couleur , représentant deux points de données bidimensionnels. Nous essayons de trouver leur similarité en cosinus en utilisant LSH.
  • Les lignes grises sont des avions choisis de manière uniforme et aléatoire.
  • Selon que le point de données se situe au-dessus ou au-dessous d'une ligne grise, nous marquons cette relation comme étant 0/1.
  • Dans le coin supérieur gauche, il y a deux rangées de carrés blancs/noirs, représentant respectivement la signature des deux points de données. Chaque carré correspond à un bit 0(white) ou 1 (noir).
  • Ainsi, une fois que vous avez un groupe de plans, vous pouvez coder les points de données avec leur emplacement respectif par rapport aux plans. Imaginez que lorsque nous avons plus de plans dans le pool, la différence angular encodée dans la signature) est plus proche de la différence réelle. En effet, seuls les plans situés entre les deux points donneront un bit différent aux deux données. valeur.

enter image description here

  • Maintenant, regardons la signature des deux points de données. Comme dans l'exemple, nous utilisons seulement 6 bits (carrés) pour représenter chaque donnée. Ceci est le hachage LSH pour les données d'origine que nous avons.
  • La distance de Hamming entre les deux valeurs hachées est 1, car leurs signatures ne diffèrent que de 1 bit.
  • Compte tenu de la longueur de la signature, nous pouvons calculer leur similarité angular), comme indiqué dans le graphique.

J'ai quelques exemples de code (seulement 50 lignes) dans python ici, qui utilise la similarité cosinus.) https://Gist.github.com/94a3d425009be0f94751

245
greeness

Les tweets dans un espace vectoriel peuvent constituer un excellent exemple de données de grande dimension.

Consultez mon article de blog sur l’application de Locality Sensitive Hashing aux tweets pour en trouver des similaires.

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

Et parce qu’une image vaut mille mots, regardez l’image ci-dessous:

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

J'espère que ça aide. @mvogiatzis

35
mvogiatzis

Voici une présentation de Stanford qui l'explique. Cela a fait une grande différence pour moi. La deuxième partie est davantage consacrée à LSH, mais la première le couvre également.

Une image de la vue d'ensemble (il y en a beaucoup plus dans les diapositives):

enter image description here

Recherche de proche voisinage dans les données de haute dimension - Partie 1: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

Recherche de proche voisinage dans les données de haute dimension - Partie 2: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf

21
nilsi
  • LSH est une procédure qui prend en entrée un ensemble de documents/images/objets et génère une sorte de table de hachage.
  • Les index de cette table contiennent les documents tels que les documents qui sont sur le même index sont considérés comme similaires et ceux sur des index différents sont " dissemblable ".
  • similaire dépend du système métrique ainsi que d'une similarité de seuil s qui agit comme un paramètre global de LSH.
  • C’est à vous de définir le seuil adéquat s pour votre problème.

enter image description here

Il est important de souligner que différentes mesures de similarité ont des implémentations différentes de LSH.

Dans mon blog, j'ai essayé d'expliquer en détail LSH pour les cas minHashing (mesure de similarité jaccard) et simHashing (mesure de distance cosinus). J'espère que vous le trouverez utile: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/

6
Carlos Teixeira

Je suis une personne visuelle. Voici ce qui fonctionne pour moi comme une intuition.

Disons que chaque objet que vous souhaitez rechercher est approximativement un objet physique tel qu'un Apple, un cube, une chaise.

Mon intuition pour un LSH est qu'il est similaire de prendre les ombres de ces objets. Comme si vous preniez l'ombre d'un cube 3D, vous obtenez un carré 2D sur un morceau de papier, ou une sphère 3D vous obtiendrez une ombre circulaire sur un morceau de papier.

Finalement, il y a beaucoup plus de trois dimensions dans un problème de recherche (où chaque mot d'un texte peut être une dimension) mais l'analogie ombre m'est toujours très utile.

Maintenant, nous pouvons comparer efficacement les chaînes de bits dans le logiciel. Une chaîne de bits de longueur fixe est un peu, plus ou moins, comme une ligne dans une seule dimension.

Donc, avec un LSH, je projette éventuellement les ombres des objets sous forme de points (0 ou 1) sur une seule ligne/chaîne de bits de longueur fixe.

L'astuce consiste à prendre les ombres de telle sorte qu'elles aient encore un sens dans la dimension inférieure, par exemple. ils ressemblent à l’objet d’origine assez bien pour être reconnus.

Un dessin 2D d'un cube en perspective m'indique qu'il s'agit d'un cube. Mais je ne peux pas distinguer facilement un carré 2D d'une ombre de cube 3D sans perspective: ils ressemblent tous les deux à un carré.

La façon dont je présente mon objet à la lumière déterminera si je reçois une bonne ombre reconnaissable ou non. Je pense donc à un "bon" LSH comme celui qui retournera mes objets devant une lumière de telle sorte que leur ombre soit mieux reconnaissable comme représentant mon objet.

Donc, pour résumer: je pense aux choses à indexer avec un LSH en tant qu'objets physiques comme un cube, une table ou une chaise, et je projette leurs ombres en 2D et éventuellement sur une ligne (une chaîne de bits). Et une "bonne" fonction "LSH" est la façon dont je présente mes objets devant une lumière pour obtenir une forme à peu près distincte dans le 2D flatland et plus tard ma chaîne de bits.

Enfin, lorsque je veux rechercher si un objet que je possède est similaire à certains objets que j’ai indexés, je prends les ombres de cet objet "query" de la même manière pour présenter mon objet devant la lumière (pour finir par un peu ficelle aussi). Et maintenant, je peux comparer à quel point cette chaîne de bits est similaire à toutes mes autres chaînes de bits indexées, ce qui est un proxy pour la recherche de tous mes objets si je trouvais un moyen efficace et reconnaissable de présenter mes objets à ma lumière.

2
Philippe Ombredanne

En résumé, tldr répond:

Un exemple de hachage sensible à la localité pourrait être de définir d’abord des plans de manière aléatoire (avec une rotation et un décalage) dans votre espace d’entrées en hachage, puis d’abandonner vos points dans l’espace, et pour chaque plan que vous mesurez si le point est au-dessus ou au-dessous (par exemple: 0 ou 1), et la réponse est le hachage. Ainsi, les points similaires dans l'espace auront un hachage similaire s'ils sont mesurés avec la distance cosinus avant ou après.

Vous pouvez lire cet exemple en utilisant scikit-learn: https://github.com/guillaume-chevalier/SGNN-Self-Governing-Neural-Networks-Projection-Layer

0