Как понять местность чувствительного хеширования?

Я заметил, что LSH кажется хорошим способом найти похожие объекты с высокоразмерными свойствами.

Прочитав статью http://www.slaney.org/malcolm/yahoo/Slaney2008-LSHTutorial.pdf , я все еще смущен этими формулами.

Кто-нибудь знает блог или статью, объясняющую, что это простой способ?

Лучший учебник, который я видел для LSH, приведен в книге: «Добыча массивных наборов данных». Проверка главы 3 – Поиск похожих предметов http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

Также я рекомендую нижний слайд: http://www.cs.jhu.edu/%7Evandurme/papers/VanDurmeLallACL10-slides.pdf . Пример в слайде помогает мне в понимании hashирования для сходства косинусов.

Я беру два слайда от Benjamin Van Durme & Ashwin Lall, ACL2010 и стараюсь объяснить немного интуиции семейств LSH для косинусного расстояния. введите описание изображения здесь

  • На рисунке имеются два круга с красным и желтым цветом, представляющие две двумерные точки данных. Мы пытаемся найти их подобие косинуса, используя LSH.
  • Серые линии представляют собой некоторые равномерно распределенные случайно плоскости.
  • В зависимости от того, находится ли точка данных выше или ниже серой линии, мы отмечаем это отношение как 0/1.
  • В верхнем левом углу расположены две строки белых / черных квадратов, представляющие собой подпись двух точек данных соответственно. Каждый квадрат соответствует бит 0 (белый) или 1 (черный).
  • Поэтому, когда у вас есть пул самолетов, вы можете кодировать точки данных с их местоположением, соответствующим самолетам. Представьте себе, что когда у нас больше пулов в пуле, угловая разница, закодированная в сигнатуре, ближе к фактической разнице. Поскольку только плоскости, которые находятся между двумя точками, будут иметь два значения бит данных.

введите описание изображения здесь

  • Теперь мы рассмотрим подпись двух точек данных. Как и в примере, мы используем только 6 бит (квадратов) для представления каждого из данных. Это hash LSH для исходных данных, которые у нас есть.
  • Расстояние хамминга между двумя значениями hashирования равно 1, потому что их подписи отличаются только на 1 бит.
  • Рассматривая длину сигнатуры, мы можем вычислить их угловое сходство, как показано на графике.

У меня есть пример кода (всего 50 строк) в python здесь, который использует сходство с косинусом. 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, но часть первая также охватывает ее.

Изображение обзора (в слайдах гораздо больше):

введите описание изображения здесь

Near Neighbor Search in High Dimensional Data – Part1: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

Near Neighbor Search in High Dimensional Data – Part2: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf

  • LSH – это процедура, которая принимает на вход набор документов / изображений / объектов и выводит вид таблицы хешей.
  • Индексы этой таблицы содержат документы, так что документы, которые находятся на одном и том же индексе, считаются схожими, а индексы по разным индексам « несходны ».
  • Где подобное зависит от метрической системы, а также от порогового подобия s, которое действует как глобальный параметр LSH.
  • Это зависит от вас, чтобы определить, каков адекватный порог для вашей проблемы.

введите описание изображения здесь

Важно подчеркнуть, что различные методы сходства имеют разные реализации LSH.

В своем блоге я попытался подробно объяснить LSH для случаев minHashing (мера подобия jaccard) и simHashing (мера косинусного расстояния). Надеюсь, вы сочтете это полезным: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/

Я – визуальный человек. Вот что работает для меня как интуиция.

Скажите, что каждая из вещей, которую вы хотите найти, – это физические объекты, такие как яблоко, куб, стул.

Моя интуиция для LSH заключается в том, что она похожа на тени этих объектов. Например, если вы возьмете тень 3D-куба, вы получите двумерный квадрат на листе бумаги или 3D-сферу вы получите окружную тень на листе бумаги.

В конце концов, существует много более трех измерений в проблеме поиска (где каждое слово в тексте может быть одним измерением), но теневая аналогия по-прежнему очень полезна для меня.

Теперь мы можем эффективно сравнивать строки бит в программном обеспечении. Битовая строка с фиксированной длиной более или менее похожа на строку в одном измерении.

Поэтому с LSH я проектирую тени объектов в конечном итоге как точки (0 или 1) на одной фиксированной длине строки / битовой строки.

Весь трюк заключается в том, чтобы взять тени таким образом, чтобы они все еще имели смысл в нижнем измерении, например, они похожи на оригинальный объект достаточно хорошо, что можно распознать.

2D-чертеж куба в перспективе говорит мне, что это куб. Но я не могу легко отличить 2D-квадрат от тени 3D-куба без перспективы: они оба выглядят как квадрат для меня.

Как я представляю свой объект на свет, определит, получу ли я хорошую узнаваемую тень или нет. Поэтому я думаю о «хорошем» LSH как о том, который превратит мои объекты перед светом, чтобы их тень лучше узнавалась как представляющая мой объект.

Итак, чтобы повторить: я думаю о вещах, которые нужно индексировать с LSH как физические объекты, такие как куб, таблица или стул, и я проецирую их тени в 2D и, в конечном итоге, вдоль строки (бит строки). И «хорошая» LSH «функция» – это то, как я представляю свои объекты перед светом, чтобы получить примерно различимую форму в 2D-плоскости, а затем и мою битовую строку.

Наконец, когда я хочу выполнить поиск, если объект, который у меня есть, похож на некоторые объекты, которые я проиндексировал, я беру тени этого объекта запроса, используя тот же способ, чтобы представить мой объект перед светом (в конечном итоге заканчивая бит строка тоже). И теперь я могу сравнить, насколько подобна эта битовая строка со всеми моими другими индексированными битовыми строками, которые являются прокси для поиска всех моих объектов, если я нашел хороший и узнаваемый способ представить свои объекты на моем свете.

  • Scikit Learn OneHotEncoder подходит и преобразуется Ошибка: ValueError: X имеет другую форму, чем во время установки
  • Дискуссия classового дисбаланса: масштабирование вклада в потери и sgd
  • Неконтролируемый анализ настроений
  • ValueError at / image / Тензор тензора («activation_5 / Softmax: 0», shape = (?, 4), dtype = float32) не является элементом этого графика
  • Как реализовать функцию Softmax в Python
  • Давайте будем гением компьютера.