Як зрозуміти місцевий чутливий хешинг?


156

Я помітив, що LSH здається хорошим способом пошуку подібних предметів із властивостями високого розміру.

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

Хтось знає блог чи статтю, яка пояснює, що це найпростіший спосіб?


3
Прочитайте Главу 3 Ullman - " ЗНАЙДЕННЯ
ПОДІЛЬНИХ

Відповіді:


250

Найкращий підручник, який я бачив для LSH, знаходиться в книзі: Майнінг масивних наборів даних. Перевірте Розділ 3 - Пошук подібних предметів http://infolab.stanford.edu/~ullman/mmds/ch3a.pdf

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

Я позичаю два слайди від Benjamin Van Durme & Ashwin Lall, ACL2010 і намагаюся трохи пояснити інтуїцію LSH Families для Cosine Distance. введіть тут опис зображення

  • На малюнку є два кола з червоним та жовтим кольором, що представляють дві двовимірні точки даних. Ми намагаємося знайти їхню косинусну схожість за допомогою LSH.
  • Сірі лінії - це кілька рівномірно вибраних літаків.
  • Залежно від того, розташована точка даних над сірою лінією або нижче, ми позначаємо це співвідношення як 0/1.
  • У лівому верхньому куті є два ряди білих / чорних квадратів, що представляють підпис двох точок даних відповідно. Кожному квадрату відповідає біт 0 (білий) або 1 (чорний).
  • Отже, коли у вас є пул літаків, ви можете кодувати точки даних з їх розташуванням відповідно до площин. Уявіть, що коли у нас більше площин у пулі, кутова різниця, закодована у підписі, ближче до фактичної різниці. Тому що лише площини, які знаходяться між двома точками, дадуть двом даним різні значення біта.

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

  • Тепер ми розглянемо підпис двох точок даних. Як і в прикладі, ми використовуємо лише 6 біт (квадратів) для представлення даних. Це хеш LSH для вихідних даних, які ми маємо.
  • Відстань між двома хешованими значеннями дорівнює 1, оскільки їх підписи відрізняються лише на 1 біт.
  • Розглядаючи довжину підпису, ми можемо обчислити їх кутову схожість, як показано на графіку.

У мене тут є зразок коду (всього 50 рядків) у python, який використовує схожість косинуса. https://gist.github.com/94a3d425009be0f94751


чому його називають "чутливістю до локальності", тому що призначення кожного біта залежить від локалізації точки даних щодо кожного плану?
nawara

21
чутливість до місцевості - точки даних, які розташовані близько один до одного, відображаються в аналогічні хеші (в одне відро з великою часткою ймовірності).
зеленість

2
Вибачте, я запізнився на цю тему, але у мене виникло питання про косинус. У презентації йдеться про те, що бітове значення дорівнює одному, якщо крапка добутку між фактичним вектором та площинним вектором> = 0, інакше воно дорівнює 0. Який напрямок площинного вектора, оскільки кути між 90 градусами та 180 градусами також дадуть а косинус, який негативний. Я припускаю, що кожна площина складається з двох векторів, і ми беремо менший кут, який зроблений з фактичним вектором.
vkaul11

Дякую. Отже, чи правильно говорити, що h кодує різницю кутів, а b - "точність"? Так я розумію, що h * PI - тета у випромінюванні, а b - точність кута.
користувач305883

1
Слайд, який ви надали, дуже акуратний: cs.jhu.edu/~vandurme/papers/VanDurmeLallACL10-slides.pdf - чи не могли б ви пояснити математичну логіку "хитрості об'єднання" - або поняття, які мають лінійна алгебра? щоб зрозуміти це?
користувач305883

35

Твіти у векторному просторі можуть бути чудовим прикладом даних з високими розмірами.

Перегляньте мій пост у блозі щодо застосування Locality Sensitive Hashing до твітів, щоб знайти подібні.

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

А оскільки одна картина - це тисяча слів, перевірте малюнок нижче:

введіть тут опис зображення http://micvog.files.wordpress.com/2013/08/lsh1.png

Сподіваюся, це допомагає. @mvogiatzis


21

Ось презентація зі Стенфорда, яка пояснює це. Це мало велике значення для мене. Частина друга - це більше про LSH, але перша частина також охоплює його.

Зображення огляду (на слайдах набагато більше):

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

Пошук поблизу сусідів у високомірних даних - Частина 1: http://www.stanford.edu/class/cs345a/slides/04-highdim.pdf

Пошук поблизу сусідів у даних високих розмірів - Частина 2: http://www.stanford.edu/class/cs345a/slides/05-LSH.pdf


Чому б просто не використовувати minhash безпосередньо як функцію LSH?
Томас Ейл

1
Я вважаю, оскільки кількість не дублікатів на відро залишається досить високою, тоді як якщо ми використовуємо m таких незалежних хеш-функцій, ймовірність відображення недалеких дублікатів на одне відро різко зменшується.
Шату

7
  • LSH - це процедура, яка приймає в якості набору набір документів / зображень / об'єктів і видає своєрідну таблицю хешу.
  • Показники цієї таблиці містять документи таким чином, що документи, що знаходяться в одному індексі, вважаються подібними, а документи, що мають різні індекси, "не відрізняються ".
  • Якщо подібне залежить від метричної системи, а також від порогової схожості s, яка діє як глобальний параметр LSH.
  • Ви самі повинні визначити, який адекватний поріг s для вашої проблеми.

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

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

У своєму блозі я спробував всебічно пояснити LSH для випадків minHashing (міра подібності жакарда) та simHashing (вимірювання відстані косинусу). Сподіваюся, вам це стане в нагоді: https://aerodatablog.wordpress.com/2017/11/29/locality-sensitive-hashing-lsh/


2

Я візуальна людина. Ось що для мене працює як інтуїція.

Скажіть, що кожна з речей, яку ви хочете шукати, - це фізичні предмети, такі як яблуко, кубик, стілець.

Моя інтуїція щодо LSH полягає в тому, що вона схожа на те, щоб сприйняти тіні цих об'єктів. Як якщо б ви взяли тінь 3D-куба, ви отримаєте 2D-подібний квадрат на аркуші паперу, або 3D-сфера отримає вам тінь, схожий на коло на аркуші паперу.

Врешті-решт, у проблемі пошуку є набагато більше трьох аспектів (де кожне слово в тексті може бути одним виміром), але тіньова аналогія для мене все ще дуже корисна.

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

Отже, за допомогою 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.