Articles

Locality Sensitive Hashing (LSH) — una soluzione scalabile per deduplicare i lavori da più fonti

Torna all’argomento-perché la deduplicazione è importante?

Usiamo un corpus massiccio di posti di lavoro da Kalibrr combinato con posti di lavoro estratti da vari annunci di lavoro pubblici per addestrare il nostro modello. Avere più lavori nel nostro corpus contenente descrizioni di lavoro simili sarà dannoso per il modello. Esempio di cui è mostrato nell’immagine qui sotto.

Different jobs with the same descriptions

Duplicate job descriptions associated to varying positions can affect the model’s performance in distinguishing context between different job titles. Poiché l’apprendimento profondo, e in generale l’apprendimento automatico, i modelli sono addestrati per apprendere una funzione che mappa un insieme di funzionalità in categorie o ottimizza un obiettivo, avere input simili ma associati a target diversi avrà sicuramente un impatto sulla fiducia e sulle prestazioni del modello.

Oltre al problema delle prestazioni predittive, la formazione di un modello con un corpus di grandi dimensioni in cui la maggior parte dei dati sono duplicati consumerà risorse computazionali non necessarie.

Questa è un’illustrazione di come la comprensione dei dati possa facilmente influire sulle prestazioni del modello.

Tf-Idf — un semplice algoritmo di deduplicazione

Rilevamento duplicati può essere fatto in una varietà di modi. Rappresentare documenti in semplici rappresentazioni vettoriali come tf-idf può essere un metodo ragionevole per scoprire documenti quasi simili. Questo può essere fatto confrontando metriche di similarità come la somiglianza coseno o euclidea tra vettori di documenti.

Mostriamo nel seguente frammento come possiamo applicare l’algoritmo per identificare testi quasi identici.

Tf-Idf applicato a quasi duplicati testo scoperta.

Mentre questo metodo funziona in piccoli corpora, questo è abbastanza difficile da scalare a causa della dimensionalità risultante dei vettori dopo aver trasformato i documenti. Si noti inoltre che ci sono voluti 319 ms per lo script per eseguire l’intera pipeline. Questa è una delle tante manifestazioni della “maledizione della dimensionalità” — l’alta dimensionalità della trasformazione influisce sia sulla complessità spaziale che temporale dell’analisi.

Locality Sensitive Hashing (LSH) — la tecnica scalabile

Una soluzione a questo problema è Locality Sensitive Hashing (LSH). Il metodo LSH può eseguire analisi di quasi somiglianza su massicci set di dati. Utilizza l’hashing per mappare i documenti in bucket con dimensionalità inferiori di ordini di grandezza rispetto a una trasformazione tf-idf equivalente. Questa proprietà rende LSH comodo da usare in applicazioni su larga scala come il text mining.

LSH utilizza l’algoritmo minhash per calcolare la probabilità di collisione. È stato dimostrato che la probabilità di collisione in LSH usando minhash è equivalente alla metrica di somiglianza di Jaccard. In breve, la somiglianza di Jaccard calcola l’intersezione di due insiemi divisi per l’unione degli elementi in ciascun insieme. La formula di cui è mostrato di seguito.

Il Jaccard somiglianza quantifica la seguente idea — due gruppi di elementi più comuni sono probabilmente simili.

Ecco uno snippet su LSH secondo wikipedia:

L’hashing sensibile alla località (LSH) riduce la dimensionalità dei dati ad alta dimensione. Gli hash LSH inseriscono elementi in modo che elementi simili si associno agli stessi “bucket” con alta probabilità (il numero di bucket è molto più piccolo dell’universo dei possibili elementi di input). LSH differisce dalle funzioni hash convenzionali e crittografiche perché mira a massimizzare la probabilità di una “collisione” per elementi simili. L’hashing sensibile alla località ha molto in comune con il clustering dei dati e la ricerca dei vicini più vicini.

LSH al lavoro

Mostriamo di seguito un’implementazione di LSH, utilizzando questo modulo, applicata allo stesso esempio illustrato sopra.

LSH applicato a quasi duplicati testo scoperta.

I risultati mostrano che l’intera pipeline è circa 4 volte più veloce della versione Tf-Idf. Questa differenza è più drastica una volta utilizzato un set di dati più grande. Abbiamo escluso l’analisi sulle prestazioni della memoria ora, ma scriveremo un benchmark più completo tra i due metodi in un post separato.

Abbiamo applicato LSH al nostro corpus e abbiamo visto che alcuni post di lavoro con contenuti simili appaiono più di 200 volte!

Considerazioni finali

Mentre Tf-Idf è più popolare e un modello più familiare per lavorare con la somiglianza del testo; se si tratta di set di dati in scala, LSH è un modello più conveniente. Anche per i set di dati più piccoli, LSH offre un notevole miglioramento nel tempo computazionale.

Essere in grado di deduplicare correttamente un corpus riduce il rumore nei dati di allenamento, consente di risparmiare risorse computazionali e aiuta a imparare un modello più accurato per il nostro caso d’uso.

Crediamo che ci siano una moltitudine di problemi a cui LSH può essere applicato come:

  • Duplicate image cleanup: applica LSH alle funzionalità dell’immagine e conserva solo un’immagine unica da ogni bin.
  • Chatbots: identificare vicino a input simili e formare un modello per identificare la migliore risposta dalla knowledge base.
  • Motore di raccomandazioni: raggruppa gli elementi con caratteristiche quasi simili e approva gli elementi agli utenti.

Sentitevi liberi di esplorare e provare LSH ai propri problemi! 🙂

Riferimenti su LSH

Questi articoli illustrano abbastanza bene come funziona LSH e mostrano anche esempi.

Ecco un corso sull’estrazione di massicci set di dati che discute LSH.

Seguici!

Pubblichiamo continuamente articoli su Machine Learning, Deep Learning, PNL, programmazione probabilistica e progetti di analisi che facciamo in Kalibrr Research. Seguici per ricevere una notifica sui nostri prossimi post! 🙂