Tính toán độ tương tự cosin trong Apache Spark


9

Tôi có một DataFrame với IDF của một số từ nhất định được tính toán. Ví dụ

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



 .... and so on

Bây giờ đưa ra một truy vấn Q, tôi có thể tính TF-IDF của truy vấn này. Làm cách nào để tính toán độ tương tự cosin của truy vấn với tất cả các tài liệu trong khung dữ liệu (có gần triệu tài liệu)

Tôi có thể thực hiện thủ công trong công việc thu nhỏ bản đồ bằng cách sử dụng phép nhân vectơ

Tương tự Cosine (Q, tài liệu) = Sản phẩm chấm (Q, dodcument) / || Q || * || tài liệu | |

nhưng chắc chắn Spark ML phải hỗ trợ tính toán độ tương tự cosin của một văn bản?

Nói cách khác, một tìm kiếm Truy vấn làm cách nào để tìm các cosin gần nhất của tài liệu TF-IDF từ DataFrame?


3
Bạn có thể sử dụng Spark's Normalizer và, nếu bạn quan tâm đến "sự tương tự của tất cả các cặp", DIMSUM .
Emre

Câu trả lời:


8

Có một ví dụ liên quan đến vấn đề của bạn trong Spark repo ở đây . Chiến lược này là biểu diễn các tài liệu dưới dạng RowMatrix và sau đó sử dụng phương thức cộtSimilarities () của nó. Điều đó sẽ giúp bạn có một ma trận của tất cả các điểm tương đồng cosin. Trích xuất hàng tương ứng với tài liệu truy vấn của bạn và sắp xếp. Điều đó sẽ cung cấp cho các chỉ số của các tài liệu tương tự nhất.

Tùy thuộc vào ứng dụng của bạn, tất cả các công việc này có thể được thực hiện trước khi truy vấn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.