17

Tôi đang cố gắng tìm hiểu xem liệu có thể có "đào tạo gia tăng" về dữ liệu bằng MLlib trong Apache Spark hay không.Đào tạo gia tăng mô hình ALS

Nền tảng của tôi là Dự đoán IO, và về cơ bản nó là một trình bao bọc cho Spark (MLlib), HBase, ElasticSearch và một số phần Restful khác.

Trong dữ liệu ứng dụng "sự kiện" được chèn trong thời gian thực, nhưng để nhận kết quả dự đoán được cập nhật, tôi cần "đào tạo pio" và "triển khai pio". Quá trình này mất một chút thời gian và máy chủ sẽ ngoại tuyến trong quá trình triển khai lại.

Tôi đang cố gắng tìm hiểu xem tôi có thể thực hiện đào tạo gia tăng trong giai đoạn "dự đoán" hay không, nhưng không thể tìm thấy câu trả lời.

+0

PIO có hỗ trợ Spark Streaming và tăng thêm kết quả dự đoán hiện có từ StreamRDD không? – javadba

+3

Tôi vừa kiểm tra, đào tạo trực tuyến/gia tăng đã được triển khai cho [hồi quy tuyến tính được truyền trực tiếp] (http://spark.apache.org/docs/latest/mllib-linear-methods.html#streaming-linear-regression) và [được truyền trực tuyến clustering] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-clustering). Rất tiếc, không có bộ lọc cộng tác được truyền trực tiếp (ALS) cũng như các phương pháp phân loại/hồi quy được truyền trực tiếp khác. – mucaho

+0

[Phương tiện truyền trực tuyến] (http://spark.apache.org/docs/latest/mllib-clustering.html#streaming-k-means) –

Trả lời

0

Để cập nhật Mô hình của bạn gần như trực tuyến (tôi viết gần, bởi vì đối mặt với nó, bản cập nhật trực tuyến thật sự là bất khả thi) bằng cách sử dụng gấp trong kỹ thuật, ví dụ: Online-Updating Regularized Kernel Matrix Factorization Models for Large-Scale Recommender Systems.

Ou Bạn có thể nhìn vào mã:

  • MyMediaLite
  • Oryx - khuôn khổ xây dựng với Lambda Kiến trúc mô hình. Và nó cần phải có bản cập nhật với những người dùng/mục mới.

Đó là một phần câu trả lời của tôi cho tương tự question nơi cả hai vấn đề: đào tạo gần trực tuyến và xử lý người dùng/mục mới được trộn lẫn.

2

Tôi tưởng tượng bạn đang sử dụng mô hình ALS của spark MLlib đang thực hiện hệ số ma trận hóa. Kết quả của mô hình là hai ma trận một ma trận có tính năng người dùng và một ma trận tính năng mục.

Giả sử chúng tôi sẽ nhận được luồng dữ liệu với xếp hạng hoặc giao dịch cho trường hợp tiềm ẩn, bản cập nhật trực tuyến thực (100%) của mô hình này sẽ cập nhật cả hai ma trận cho từng thông tin xếp hạng mới. hoàn toàn đào tạo lại mô hình ALS trên toàn bộ dữ liệu + xếp hạng mới. Trong trường hợp này, một hạn chế bởi thực tế là chạy toàn bộ mô hình ALS là tốn kém tính toán và luồng dữ liệu đến có thể thường xuyên, do đó nó sẽ kích hoạt một sự đào tạo lại quá thường xuyên. Vì vậy, khi biết điều này chúng ta có thể tìm kiếm giải pháp thay thế, một xếp hạng duy nhất không nên thay đổi ma trận nhiều cộng với chúng tôi có phương pháp tối ưu hóa được tăng dần, ví dụ SGD. Có một thú vị (vẫn thực nghiệm) thư viện bằng văn bản đối với trường hợp Ratings Explicit mà không cập nhật gia tăng đối với từng lô một DStream:

https://github.com/brkyvz/streaming-matrix-factorization

Ý tưởng của việc sử dụng một cách tiếp cận gia tăng như SGD sau ý tưởng như xa như một di chuyển về phía gradient (vấn đề giảm thiểu) một đảm bảo rằng đang di chuyển về phía tối thiểu của chức năng lỗi. Vì vậy, ngay cả khi chúng tôi cập nhật xếp hạng mới, chỉ cho ma trận đối tượng người dùng cho người dùng cụ thể này và chỉ ma trận mặt hàng cho mục cụ thể này được đánh giá và bản cập nhật hướng tới gradient, chúng tôi đảm bảo rằng chúng tôi di chuyển theo hướng tối thiểu, tất nhiên là gần đúng, nhưng vẫn hướng tới mức tối thiểu.

Vấn đề khác xuất phát từ chính bản thân hệ thống phân phối, lý tưởng là các cập nhật sẽ được thực hiện tuần tự, cho mỗi xếp hạng mới đến, nhưng tia lửa sẽ xử lý luồng đến dưới dạng phân đoạn. các hoạt động được thực hiện để cập nhật sẽ được thực hiện cho toàn bộ lô mà không đảm bảo tính tuần tự.

Để biết thêm chi tiết nếu bạn đang sử dụng Prediction.IO chẳng hạn, bạn có thể thực hiện đào tạo ngoại tuyến, sử dụng chức năng đào tạo và triển khai thường xuyên, nhưng nếu bạn muốn cập nhật trực tuyến, bạn sẽ phải truy cập cả hai ma trận cho mỗi lô luồng và chạy các bản cập nhật bằng SGD, sau đó yêu cầu mô hình mới được triển khai, chức năng này tất nhiên không có trong Prediction.IO bạn sẽ phải tự xây dựng nó.

Thú vị ghi chú cho bản cập nhật SGD:

http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf

+0

Đây là câu trả lời rất hợp lý! +1 – eliasah

0

Trong giấy học tập cộng dồn cho ma trận nhân tử trong hệ thống tư họ đã sử dụng một mặt hình vuông cách tiếp cận ít nhất cho việc học tập gia tăng trong ALS.

http://ieeexplore.ieee.org/document/7840707/

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