Ich habe einen DataFrame mit IDF bestimmter Wörter berechnet. Zum Beispiel
(10,[0,1,2,3,4,5],[0.413734499590671,0.4244680552337798,0.4761400657781007, 1.4004620708967006,0.37876590175292424,0.48374466516332])
.... and so on
Geben Sie nun eine Abfrage Q, ich kann die TF-IDF dieser Abfrage berechnen. Wie berechne ich die Kosinusähnlichkeit der Abfrage mit allen Dokumenten im Datenrahmen (es gibt fast eine Million Dokumente)?
Ich könnte es manuell in einem Job zur Kartenreduzierung tun, indem ich die Vektormultiplikation verwende
Kosinusähnlichkeit (Q, Dokument) = Punktprodukt (Q, Dokument) / || Q || * || Dokument ||
aber sicherlich muss Spark ML die Berechnung der Kosinusähnlichkeit eines Textes von Haus aus unterstützen?
Mit anderen Worten, wenn ich eine Suchabfrage habe, wie finde ich die nächsten Cosinus des Dokuments TF-IDF aus dem DataFrame?
machine-learning
nlp
apache-spark
cosine-distance
Ganesh Krishnan
quelle
quelle
Antworten:
Es gibt ein ähnliches Beispiel für Ihr Problem in dem Spark - Repo hier . Die Strategie besteht darin, die Dokumente als RowMatrix darzustellen und dann die columnSimilarities () -Methode zu verwenden. Dadurch erhalten Sie eine Matrix aller Kosinusähnlichkeiten. Extrahieren Sie die Zeile, die Ihrem Abfragedokument entspricht, und sortieren Sie sie. Das gibt die Indizes der ähnlichsten Dokumente.
Abhängig von Ihrer Anwendung kann all diese Arbeit vor der Abfrage ausgeführt werden.
quelle