Đầu tiên, "mô hình" mà bạn đang đề cập đến từ Mahout không phải là mô hình, mà là danh sách các đề xuất được tính toán trước. Bạn cũng có thể làm điều này với Spark, và tính toán trong các đề xuất hàng loạt cho người dùng và duy trì chúng ở bất cứ đâu bạn thích. Điều này không liên quan gì đến việc tuần tự hóa một mô hình. Nếu bạn không muốn thực hiện cập nhật hoặc ghi điểm trong thời gian thực, bạn có thể dừng ở đó và chỉ sử dụng Spark cho hàng loạt giống như bạn làm Mahout.
Nhưng tôi đồng ý rằng trong nhiều trường hợp bạn muốn gửi mô hình đến một nơi khác và phục vụ. Như bạn thấy, các mô hình khác trong Spark là Serializable
, nhưng không phải là MatrixFactorizationModel
. (Có, mặc dù nó được đánh dấu như vậy, nó sẽ không tuần tự hóa.) Tương tự, có một serialization tiêu chuẩn cho các mô hình dự đoán được gọi là PMML nhưng nó không chứa từ vựng cho một mô hình ma trận.
Lý do thực sự giống nhau. Trong khi nhiều mô hình dự đoán, như mô hình hồi quy SVM hoặc logistic, chỉ là một tập hợp các hệ số nhỏ, một mô hình ma trận nhân tố là rất lớn, chứa hai ma trận với hàng tỷ nguyên tố tiềm tàng. Đó là lý do tại sao tôi nghĩ PMML không có bất kỳ mã hóa hợp lý nào cho nó.
Tương tự như vậy, trong Spark, điều đó có nghĩa là các ma trận thực tế là RDD
s không thể được tuần tự trực tiếp. Bạn có thể duy trì các RDD này để lưu trữ, đọc lại chúng ở nơi khác bằng cách sử dụng Spark, và tạo lại một MatrixFactorizationModel
bằng tay theo cách đó.
Bạn không thể phân phối hoặc cập nhật mô hình bằng cách sử dụng Spark. Đối với điều này bạn đang thực sự nhìn vào viết một số mã để thực hiện cập nhật và tính toán các khuyến nghị trên bay.
Tôi không ngại khi đề xuất ở đây dự án Oryx, vì điểm của nó là quản lý chính xác khía cạnh này, đặc biệt cho đề xuất ALS. Trên thực tế, dự án Oryx 2 dựa trên Spark và mặc dù trong alpha, đã chứa đường dẫn hoàn chỉnh để tuần tự hóa và phục vụ đầu ra của MatrixFactorizationModel
. Tôi không biết nếu nó đáp ứng nhu cầu của bạn, nhưng có thể ít nhất là một điểm tham chiếu thú vị.
Cảm ơn lời giải thích tuyệt vời và chi tiết của bạn! Tôi sẽ thử Oryx :) – shihpeng