Locality-sensitive hashing

metodo per la riduzione della dimensionalità dello spazio vettoriale

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

Motivazioni

modifica

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   in un bucket  ;
  • una funzione hash standard mappa il contenuto di questi bucket in una hash table di lunghezza  

La dimensione massima del bucket della seconda hash table verrà chiamato  

Assunzioni

modifica

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

Definizione

modifica
  •   è la funzione di distanza fra elementi di un insieme  ;
  •   indica, per ogni punto  , l'insieme di elementi di   che stanno all'interno della distanza   da  .

Consideriamo una funzione hash   scelta a caso dalla famiglia LSH di funzioni hash disponibili  . Una famiglia LSH   di funzioni dall'insieme   all'insieme   è detta  -sensitive per   se per ogni coppia di punti   (che è la rappresentazione dell'interrogazione) e   (che è il punto che soddisfa le condizioni sotto riportate) appartenenti all'insieme  :

  • se   allora  
  • se   allora  

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

  •  
  •  

Di solito si considera   con  .

Interpretazione grafica

modifica

In uno spazio a due dimensioni si hanno due cerchi concentrici centrati sulla rappresentazione dell'interrogazione  . Ricordando che   e   rappresentano dei sottoinsiemi dell'insieme di dati  :

  • Il cerchio più interno di raggio   contiene i punti   dell'insieme di dati   che hanno, come precedentemente descritto, una probabilità maggiore della soglia   di subire un hash nello stesso bucket.
  • Il cerchio più esterno di raggio   esclude i punti   dell'insieme di dati   che hanno, come precedentemente descritto, una probabilità minore della soglia   di subire un hash nello stesso bucket.

LSH e distribuzioni stabili

modifica

La funzione hash[3]   manda un vettore di   componenti reali   in un intero non negativo. Ogni funzione hash appartenente alla famiglia viene selezionata scegliendo in modo casuale   e   dove   è un vettore di   componenti reali i cui elementi sono scelti in maniera indipendente da una distribuzione stabile e   è un numero reale scelto secondo una distribuzione continua uniforme nell'intervallo   Fissati   e la funzione hash   si calcola attraverso la relazione   dove   indica il prodotto scalare euclideo tra   e   e   indica la funzione parte intera.

Ricerca dei Nearest Neighbor

modifica

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   l'algoritmo ha due parametri principali:

  • la larghezza  ;
  • il numero di tabelle di hash  .

Cominciamo definendo una nuova famiglia   di funzioni hash  , in cui ogni funzione   si ottiene concatenando   funzioni   da  , cioè

 

La scelta di concatenare   funzioni hash per ottenere   è giustificata dal fatto che si vuole amplificare la differenza tra la alta probabilità   e la bassa probabilità  .

In altre parole, una funzione hash   presa casualmente da   si ottiene concatenando   funzioni hash prese casualmente da  .

Successivamente l'algoritmo costruisce   tabelle di hash, ognuna corrispondente a una diversa funzione hash  .

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

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

  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

modifica