13

Tôi xây dựng một hệ thống đề xuất đơn giản cho MovieLens DB lấy cảm hứng từ https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html.Làm thế nào để cập nhật Spark MatrixFactorizationModel cho ALS

Tôi cũng gặp vấn đề với đào tạo rõ ràng như sau: Apache Spark ALS collaborative filtering results. They don't make sense Sử dụng đào tạo tiềm ẩn (trên cả dữ liệu rõ ràng và tiềm ẩn) cho tôi kết quả hợp lý, nhưng đào tạo rõ ràng thì không.

Trong khi điều này là ok cho tôi bây giờ, im tò mò về cách cập nhật mô hình. Trong khi giải pháp hiện tại của tôi hoạt động như

  1. có tất cả xếp hạng người dùng
  2. tạo mô hình
  3. nhận đề xuất cho người sử dụng

Tôi muốn có một dòng như thế này:

  1. có cơ sở xếp hạng
  2. tạo mô hình một lần (tùy chọn lưu & tải nó)
  3. nhận được một số xếp hạng bởi một người dùng trên 10 phim ngẫu nhiên (không có trong mô hình!)
  4. nhận đề xuất sử dụng mô hình và xếp hạng người dùng mới

Vì vậy, tôi phải cập nhật mô hình của tôi, mà không hoàn toàn recompute nó. Có cơ hội để làm như vậy không?

Trong khi cách đầu tiên tốt cho xử lý theo lô (như tạo đề xuất theo lô hàng đêm), cách thứ hai sẽ tốt cho việc tạo các đề xuất gần như trực tiếp.

+0

Xem thêm những câu hỏi này tương tự http://stackoverflow.com/questions/28724639/how-to-augment-matrix-factors-in-spark- als-recommender –

+0

Ngoài ra, http://stackoverflow.com/questions/40809876/apache-spark-als-how-to-perform-live-recommendations-fold-in-anonym-user?rq=1 –

Trả lời

0

Dường như bạn muốn làm một số loại online learning. Đó là khái niệm rằng bạn đang thực sự cập nhật mô hình trong khi nhận dữ liệu. Spark MLLib có các tùy chọn học tập trực tuyến giới hạn. Có một số streaming linear regressionstreaming K-Means.

Nhiều vấn đề về máy học chỉ hoạt động tốt với các giải pháp lô, có thể đào tạo lại mô hình vài giờ một lần hoặc vài ngày. Có lẽ các chiến lược để giải quyết vấn đề này.

Một tùy chọn có thể là một mô hình kết hợp trong đó bạn kết hợp các kết quả của ALS với một mô hình khác giúp đưa ra dự đoán về các bộ phim không nhìn thấy.

Nếu bạn mong đợi để xem rất nhiều bộ phim trước đây chưa xem, bộ lọc cộng tác có thể không làm những gì bạn muốn. Nếu những bộ phim mới đó không có trong mô hình, thì không có cách nào để người mẫu biết được những người khác đã xem những gì họ thích.

Một lựa chọn tốt hơn có thể là thực hiện một chiến lược khác và thử một số phân tích ngữ nghĩa tiềm ẩn về phim và mô hình khái niệm về phim (như thể loại, chủ đề, v.v.), theo cách đó các thuộc tính khác nhau và phù hợp với mô hình hiện có và xếp hạng ảnh hưởng đến mức độ tương tác của các thuộc tính đó với nhau.

5

Chỉnh sửa: những điều sau đây phù hợp với tôi vì tôi có xếp hạng phản hồi ngầm và chỉ thú vị khi xếp hạng sản phẩm cho người dùng mới. Chi tiết here


Bạn thực sự có thể nhận các dự đoán cho người dùng mới sử dụng mô hình đào tạo (không cập nhật nó):

Để có được những dự đoán cho một người sử dụng trong mô hình, bạn sử dụng đại diện tiềm ẩn của nó (vector u có kích thước f (số yếu tố)), được nhân với ma trận yếu tố sản phẩm tiềm ẩn (ma trận được tạo thành từ các đại diện tiềm ẩn của tất cả các sản phẩm, một loạt các vectơ có kích thước f) và cung cấp cho bạn điểm số cho mỗi sản phẩm. Đối với người dùng mới, vấn đề là bạn không có quyền truy cập vào biểu diễn tiềm ẩn của họ (bạn chỉ có biểu diễn đầy đủ kích thước M (số lượng sản phẩm khác nhau), nhưng những gì bạn có thể làm là sử dụng chức năng tương tự để tính toán tương tự đại diện cho người dùng mới này bằng cách nhân nó bằng cách chuyển đổi ma trận sản phẩm

tức là nếu bạn sử dụng ma trận tiềm ẩn là u và ma trận tiềm ẩn sản phẩm của bạn là v, đối với người dùng i trong mô hình, bạn nhận điểm bằng cách thực hiện: u_i * v cho người dùng mới, bạn không có đại diện tiềm ẩn, do đó hãy tham gia đại diện đầy đủ full_u và làm: full_u * v^t * v Điều này sẽ ước tính các yếu tố tiềm ẩn cho người dùng mới và nên đưa ra các khuyến nghị hợp lý (nếu mô hình đã đưa ra các khuyến nghị hợp lý cho người dùng hiện tại)

Để trả lời câu hỏi về đào tạo, điều này cho phép bạn tính dự đoán cho người dùng mới mà không phải thực hiện tính toán nặng của mô hình mà giờ đây bạn chỉ có thể thực hiện một lần. Vì vậy, bạn có bạn xử lý hàng loạt vào ban đêm và vẫn có thể đưa ra dự đoán cho người dùng mới trong ngày.

Lưu ý: MLLIB cung cấp cho bạn truy cập vào các ma trận u và v

+0

Tôi đã thêm một bài đăng mới dựa trên điều này: http://stackoverflow.com/questions/41537470/als-model-how-to-generate-full-u-vt-v –

Các vấn đề liên quan