Je suis une personne visuelle. Voici ce qui fonctionne pour moi comme intuition.
Dites que chacune des choses que vous souhaitez rechercher approximativement sont des objets physiques tels qu'une pomme, un cube, une chaise.
Mon intuition pour un LSH est qu'il est similaire de prendre les ombres de ces objets. Comme si vous prenez l'ombre d'un cube 3D, vous obtenez un carré 2D sur un morceau de papier, ou une sphère 3D vous donnera une ombre en forme de cercle sur un morceau de papier.
Finalement, il y a beaucoup plus de trois dimensions dans un problème de recherche (où chaque mot dans un texte pourrait être une dimension) mais l' ombre analogie de est toujours très utile pour moi.
Maintenant, nous pouvons comparer efficacement des chaînes de bits dans un 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 les ombres des objets éventuellement 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 manière à ce qu'elles aient encore un sens dans la dimension inférieure, par exemple elles ressemblent à l'objet d'origine d'une manière suffisamment bonne pour être reconnues.
Un dessin 2D d'un cube en perspective me dit que c'est 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é pour moi.
La façon dont je présente mon objet à la lumière déterminera si j'obtiens une bonne ombre reconnaissable ou non. Je pense donc à un «bon» LSH comme celui qui fera tourner mes objets devant une lumière de telle sorte que leur ombre soit le mieux reconnaissable comme représentant mon objet.
Donc pour récapituler: je pense aux choses à indexer avec un LSH comme des objets physiques comme un cube, une table ou une chaise, et je projette leurs ombres en 2D et éventuellement le long d'une ligne (une petite chaîne). 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 reconnaissable dans le flatland 2D et plus tard ma chaîne de bits.
Enfin quand je veux chercher si un objet que j'ai est similaire à certains objets que j'ai indexés, je prends les ombres de cet objet "requête" en utilisant de la même manière pour présenter mon objet devant la lumière (finissant finalement par un peu chaîne 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 rechercher mes objets entiers si je trouvais un moyen efficace et reconnaissable de présenter mes objets à ma lumière.