J'ai un DataFrame avec IDF de certains mots calculés. Par exemple
(10,[0,1,2,3,4,5],[0.413734499590671,0.4244680552337798,0.4761400657781007, 1.4004620708967006,0.37876590175292424,0.48374466516332])
.... and so on
Donnez maintenant une requête Q, je peux calculer le TF-IDF de cette requête. Comment calculer la similitude cosinus de la requête avec tous les documents dans la trame de données (il y a près de millions de documents)
Je pourrais le faire manuellement dans un travail de réduction de carte en utilisant la multiplication vectorielle
Similitude cosinus (Q, document) = Produit scalaire (Q, document) / || Q || * || document ||
mais sûrement Spark ML doit nativement supporter le calcul de la similitude cosinus d'un texte?
En d'autres termes, étant donné une requête de recherche, comment trouver les cosinus les plus proches du document TF-IDF à partir du DataFrame?
machine-learning
nlp
apache-spark
cosine-distance
Ganesh Krishnan
la source
la source
Réponses:
Il y a un exemple lié à votre problème dans le référentiel Spark ici . La stratégie consiste à représenter les documents en tant que RowMatrix , puis à utiliser sa méthode columnSimilarities (). Cela vous donnera une matrice de toutes les similitudes de cosinus. Extrayez la ligne qui correspond à votre document de requête et triez. Cela donnera les indices des documents les plus similaires.
Selon votre application, tout ce travail peut être effectué avant la requête.
la source