Hitung kesamaan cosinus di Apache Spark

9

Saya memiliki DataFrame dengan IDF dari kata-kata tertentu yang dihitung. Sebagai contoh

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



 .... and so on

Sekarang berikan pertanyaan Q, saya bisa menghitung TF-IDF dari permintaan ini. Bagaimana cara menghitung kesamaan cosinus dari kueri dengan semua dokumen dalam kerangka data (ada hampir sejuta dokumen)

Saya bisa melakukannya secara manual dalam pekerjaan mengurangi peta dengan menggunakan perkalian vektor

Kesamaan Cosine (Q, dokumen) = Dot product (Q, dodcument) / || Q || * || dokumen ||

tetapi tentunya Spark ML harus secara alami mendukung penghitungan kesamaan cosinus dari suatu teks?

Dengan kata lain diberi kueri pencarian bagaimana cara menemukan cosinus terdekat dari dokumen TF-IDF dari DataFrame?

Ganesh Krishnan
sumber
3
Anda dapat menggunakan Spark's Normalizer dan, jika Anda tertarik pada "kesamaan semua pasangan", DIMSUM .
Emre

Jawaban:

8

Ada contoh terkait dengan masalah Anda di repo Spark di sini . Strateginya adalah untuk merepresentasikan dokumen sebagai RowMatrix dan kemudian menggunakan metode columnSimilarities (). Itu akan memberi Anda matriks dari semua persamaan cosinus. Ekstrak baris yang sesuai dengan dokumen kueri Anda dan urutkan. Itu akan memberikan indeks dokumen yang paling mirip.

Tergantung pada aplikasi Anda, semua pekerjaan ini dapat dilakukan sebelum permintaan.

Pete
sumber