Eu tenho um DataFrame com IDF de determinadas palavras computadas. Por exemplo
(10,[0,1,2,3,4,5],[0.413734499590671,0.4244680552337798,0.4761400657781007, 1.4004620708967006,0.37876590175292424,0.48374466516332])
.... and so on
Agora, faça uma consulta Q, posso calcular o TF-IDF dessa consulta. Como faço para calcular a semelhança de cosseno da consulta com todos os documentos no quadro de dados (há quase um milhão de documentos)
Eu poderia fazê-lo manualmente em um trabalho de redução de mapa usando a multiplicação de vetores
Semelhança de cosseno (Q, documento) = Produto escalar (Q, documento) / || Q || * || documento ||
mas certamente o Spark ML deve suportar nativamente o cálculo da similaridade de cosseno de um texto?
Em outras palavras, com uma consulta de pesquisa, como encontro os cossenos mais próximos do documento TF-IDF do DataFrame?
machine-learning
nlp
apache-spark
cosine-distance
Ganesh Krishnan
fonte
fonte
Respostas:
Há um exemplo relacionado ao seu problema no repositório Spark aqui . A estratégia é representar os documentos como um RowMatrix e, em seguida, usar seu método columnSimilarities (). Isso lhe dará uma matriz de todas as semelhanças de cosseno. Extraia a linha que corresponde ao seu documento de consulta e classifique. Isso fornecerá os índices dos documentos mais semelhantes.
Dependendo da sua aplicação, todo esse trabalho pode ser feito antes da consulta.
fonte