Calcola la somiglianza del coseno in Apache Spark


9

Ho un DataFrame con IDF di determinate parole calcolate. Per esempio

(10,[0,1,2,3,4,5],[0.413734499590671,0.4244680552337798,0.4761400657781007, 1.4004620708967006,0.37876590175292424,0.48374466516332])



 .... and so on

Ora fornisci una query Q, posso calcolare il TF-IDF di questa query. Come posso calcolare la somiglianza del coseno della query con tutti i documenti nel frame di dati (ci sono quasi milioni di documenti)

Potrei farlo manualmente in un lavoro di riduzione della mappa usando la moltiplicazione vettoriale

Somiglianza del coseno (Q, documento) = Prodotto punto (Q, dodcument) / || Q || * || documento ||

ma sicuramente Spark ML deve supportare nativamente il calcolo della somiglianza del coseno di un testo?

In altre parole, una query di ricerca come posso trovare i coseni più vicini del documento TF-IDF dal DataFrame?


3
Puoi utilizzare il Normalizer di Spark e, se sei interessato alla "somiglianza di tutte le coppie", DIMSUM .
Emre,

Risposte:


8

C'è un esempio correlato al tuo problema nel repository Spark qui . La strategia consiste nel rappresentare i documenti come RowMatrix e quindi utilizzare il suo metodo columnSimilarities (). Questo ti darà una matrice di tutte le somiglianze del coseno. Estrarre la riga corrispondente al documento della query e ordinarla. Ciò fornirà gli indici dei documenti più simili.

A seconda dell'applicazione, tutto questo lavoro può essere svolto prima dell'interrogazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.