Locality-sensitive hashing

A questa voce o sezione va aggiunto il template sinottico {{Algoritmo}}
Puoi aggiungere e riempire il template secondo le istruzioni e poi rimuovere questo avviso. Se non sei in grado di riempirlo in buona parte, non fare nulla; non inserire template vuoti.

Il locality-sensitive hashing (LSH)[1][2] è un metodo per la riduzione della dimensionalità dello spazio vettoriale di un insieme di dati.

Motivazioni

La grossa mole di dati da elaborare, principalmente il calcolo della distanza fra gli oggetti (item) di un insieme di dati, è un grosso vincolo allo sviluppo di applicazioni sistema real-time per soddisfare interrogazioni quali la similarità fra (parti di) immagini o (estratti di) brani musicali.

L'idea principale è applicare una funzione hash agli item in input in modo da far collidere, con alta probabilità, item simili negli stessi contenitori (bucket). Il numero di bucket è molto più ridotto dell'universo dei possibili item in input. L'obiettivo è di arrivare ad un hashing a due livelli:

  • la funzione LSH mappa un item p {\displaystyle p} in un bucket g j ( p ) {\displaystyle g_{j}(p)} ;
  • una funzione hash standard mappa il contenuto di questi bucket in una hash table di lunghezza M . {\displaystyle M.}

La dimensione massima del bucket della seconda hash table verrà chiamato B . {\displaystyle B.}

Assunzioni

Con il metodo LSH si vuole fare in modo di correlare la distanza di due punti p {\displaystyle p} e q {\displaystyle q} alla probabilità di collisione in un bucket. Maggiore è la distanza fra i punti minore sarà la loro probabilità di collisione.

Definizione

  • D ( , ) {\displaystyle D(\cdot ,\cdot )} è la funzione di distanza fra elementi di un insieme S {\displaystyle S} ;
  • B ( p , r ) {\displaystyle B(p,r)} indica, per ogni punto p S {\displaystyle p\in S} , l'insieme di elementi di S {\displaystyle S} che stanno all'interno della distanza r {\displaystyle r} da p {\displaystyle p} .

Consideriamo una funzione hash h {\displaystyle h} scelta a caso dalla famiglia LSH di funzioni hash disponibili H {\displaystyle {\mathcal {H}}} . Una famiglia LSH H {\displaystyle {\mathcal {H}}} di funzioni dall'insieme S {\displaystyle S} all'insieme U {\displaystyle U} è detta ( r 1 , r 2 , p 1 , p 2 ) {\displaystyle (r_{1},r_{2},p_{1},p_{2})} -sensitive per D ( , ) {\displaystyle D(\cdot ,\cdot )} se per ogni coppia di punti q {\displaystyle q} (che è la rappresentazione dell'interrogazione) e p {\displaystyle p} (che è il punto che soddisfa le condizioni sotto riportate) appartenenti all'insieme S {\displaystyle S} :

  • se p B ( q , r 1 ) {\displaystyle p\in B(q,r_{1})} allora P r H [ h ( q ) = h ( p ) ] p 1 ; {\displaystyle \mathrm {Pr} _{\mathcal {H}}[h(q)=h(p)]\geq p_{1};}
  • se p B ( q , r 2 ) {\displaystyle p\notin B(q,r_{2})} allora P r H [ h ( q ) = h ( p ) ] p 2 . {\displaystyle \mathrm {Pr} _{\mathcal {H}}[h(q)=h(p)]\leq p_{2}.}

Affinché la famiglia LSH sia utile per gli scopi che ci si è prefissi devono valere le due condizioni:

  • p 1 > p 2 ; {\displaystyle p_{1}>p_{2};}
  • r 1 < r 2 . {\displaystyle r_{1}<r_{2}.}

Di solito si considera r 2 = c r 1 , {\displaystyle r_{2}=cr_{1},} con c > 1 {\displaystyle c>1} .

Interpretazione grafica

In uno spazio a due dimensioni si hanno due cerchi concentrici centrati sulla rappresentazione dell'interrogazione q {\displaystyle q} . Ricordando che B ( q , r 1 ) {\displaystyle B(q,r_{1})} e B ( q , r 2 ) {\displaystyle B(q,r_{2})} rappresentano dei sottoinsiemi dell'insieme di dati S {\displaystyle S} :

  • Il cerchio più interno di raggio r 1 {\displaystyle r_{1}} contiene i punti p {\displaystyle p} dell'insieme di dati B ( q , r 1 ) {\displaystyle B(q,r_{1})} che hanno, come precedentemente descritto, una probabilità maggiore della soglia p 1 {\displaystyle p_{1}} di subire un hash nello stesso bucket.
  • Il cerchio più esterno di raggio r 2 {\displaystyle r_{2}} esclude i punti p {\displaystyle p} dell'insieme di dati B ( q , r 2 ) {\displaystyle B(q,r_{2})} che hanno, come precedentemente descritto, una probabilità minore della soglia p 2 {\displaystyle p_{2}} di subire un hash nello stesso bucket.

LSH e distribuzioni stabili

La funzione hash[3] h a , b : R d N {\displaystyle h_{\mathbf {a} ,b}\colon \mathbb {R} ^{d}\to \mathbb {N} } manda un vettore di d {\displaystyle d} componenti reali v {\displaystyle \mathbf {v} } in un intero non negativo. Ogni funzione hash appartenente alla famiglia viene selezionata scegliendo in modo casuale a {\displaystyle \mathbf {a} } e b {\displaystyle b} dove a {\displaystyle \mathbf {a} } è un vettore di d {\displaystyle d} componenti reali i cui elementi sono scelti in maniera indipendente da una distribuzione stabile e b {\displaystyle b} è un numero reale scelto secondo una distribuzione continua uniforme nell'intervallo [ 0 , r ] . {\displaystyle [0,r].} Fissati a , b {\displaystyle \mathbf {a} ,b} e la funzione hash h a , b {\displaystyle h_{\mathbf {a} ,b}} si calcola attraverso la relazione h a , b ( v ) = a v + b r , {\displaystyle h_{\mathbf {a} ,b}(\mathbf {v} )=\left\lfloor {\frac {\mathbf {a} \cdot \mathbf {v} +b}{r}}\right\rfloor ,} dove a v {\displaystyle \mathbf {a} \cdot \mathbf {v} } indica il prodotto scalare euclideo tra a {\displaystyle \mathbf {a} } e v {\displaystyle \mathbf {v} } e {\displaystyle \lfloor \cdot \rfloor } indica la funzione parte intera.

Ricerca dei Nearest Neighbor

Una delle principali applicazioni di LSH è quella di fornire un algoritmo efficiente per il problema della ricerca del nearest neighbor. Data una qualsiasi famiglia LSH F {\displaystyle {\mathcal {F}}} l'algoritmo ha due parametri principali:

  • la larghezza k {\displaystyle k} ;
  • il numero di tabelle di hash L {\displaystyle L} .

Cominciamo definendo una nuova famiglia G {\displaystyle {\mathcal {G}}} di funzioni hash g {\displaystyle g} , in cui ogni funzione g {\displaystyle g} si ottiene concatenando k {\displaystyle k} funzioni h 1 , , h k {\displaystyle h_{1},\ldots ,h_{k}} da F {\displaystyle {\mathcal {F}}} , cioè

g ( p ) = ( h 1 ( p ) , , h k ( p ) ) . {\displaystyle g(p)={\big (}h_{1}(p),\ldots ,h_{k}(p){\big )}.}

La scelta di concatenare k {\displaystyle k} funzioni hash per ottenere g {\displaystyle g} è giustificata dal fatto che si vuole amplificare la differenza tra la alta probabilità p 1 {\displaystyle p_{1}} e la bassa probabilità p 2 {\displaystyle p_{2}} .

In altre parole, una funzione hash g {\displaystyle g} presa casualmente da G {\displaystyle {\mathcal {G}}} si ottiene concatenando k {\displaystyle k} funzioni hash prese casualmente da H {\displaystyle {\mathcal {H}}} .

Successivamente l'algoritmo costruisce L {\displaystyle L} tabelle di hash, ognuna corrispondente a una diversa funzione hash g {\displaystyle g} .

Nella fase di preprocessing si fa un hash di tutti gli n {\displaystyle n} punti dell'insieme di dati S {\displaystyle S} in ognuna delle L {\displaystyle L} tabelle di hash. Dato che le tabelle di hash risultanti hanno solo n {\displaystyle n} elementi diversi da zero, si può ridurre l'utilizzo di memoria per ogni funzione hash a O ( n ) {\displaystyle O(n)} usando funzioni hash standard.

Considerando l'interrogazione q {\displaystyle q} al sistema così creato, l'algoritmo itera sulle L {\displaystyle L} funzioni hash g {\displaystyle g} . Per ogni g {\displaystyle g} , reperisce i punti dell'insieme di dati che sono stati mappati dall'hash nello stesso bucket in cui è stata mappata q {\displaystyle q} . Il processo si conclude quando viene reperito un punto di distanza c R {\displaystyle cR} da q {\displaystyle q} .

Note

  1. ^ Gionis, A., Indyk, P., Motwani, R., Similarity Search in High Dimensions via Hashing (ps), in Proceedings of the 25th Very Large Database (VLDB) Conference, 1999.
  2. ^ Piotr Indyk, Rajeev Motwani, Approximate Nearest Neighbors: Towards Removing the Curse of Dimensionality. (ps), in Proceedings of 30th Symposium on Theory of Computing, 1998.
  3. ^ Datar, M., Immorlica, N., Indyk, P., Mirrokni, V.S., Locality-Sensitive Hashing Scheme Based on p-Stable Distributions (ps), in Proceedings of the Symposium on Computational Geometry, 2004.

Voci correlate

  • K-nearest neighbors