Locality-sensitive Hashing
Cél: Olyan dokumentumok keresése, amelyek Jaccard hasonlósága legalább t
Az LSH általános lényege, hogy olyan algoritmust találjunk, amely ha 2 dokumentum aláírását adjuk meg, akkor megmondja, hogy a 2 dokumentum egy jelölt párt alkot-e vagy sem, azaz hasonlóságuk nagyobb, mint egy t küszöbérték. Ne feledjük, hogy az aláírások hasonlóságát az eredeti dokumentumok közötti Jaccard-hasonlóság helyettesítőjének tekintjük.
Kifejezetten a min-hash aláírásmátrix esetében:
- Az M aláírásmátrix oszlopait több hash függvény segítségével hash-eljük
- Ha 2 dokumentum legalább az egyik hash függvény esetében ugyanabba a vödörbe hash-ozik, akkor a 2 dokumentumot jelölt párnak tekinthetjük
A kérdés most az, hogyan hozzunk létre különböző hash függvényeket. Ehhez sávos particionálást végzünk.
Sávos felosztás
Itt az algoritmus:
- Az aláírásmátrixot b sávra osztjuk, minden sávnak r sora van
- Minden sávhoz, hash-eljük az egyes oszlopok részét egy k vödörből álló hash-táblába
- A jelölt oszloppárok azok, amelyek legalább 1 sávban ugyanabba a vödörbe hash-elnek
- Hangoljuk a b és r értékeket úgy, hogy a legtöbb hasonló, de kevés nem hasonló pár legyen
Ezzel kapcsolatban van néhány szempont. Ideális esetben minden sáv esetében azt akarjuk, hogy k egyenlő legyen az összes lehetséges értékkombinációval, amelyet egy oszlop egy sávon belül felvehet. Ez az azonossági megfeleltetéssel lesz egyenértékű. De így k egy hatalmas szám lesz, ami számítási szempontból kivitelezhetetlen. Például: Ha egy sávban 5 sor van. Ha az aláírás elemei 32 bites egész számok, akkor k ebben az esetben (2³²)⁵ ~ 1.4615016e+48 lesz. Itt láthatjuk, hogy mi a probléma. Általában k-t 1 millió körül szokták venni.
Az elképzelés az, hogy ha 2 dokumentum hasonló, akkor legalább az egyik sávban jelölt párként fognak megjelenni.