Я предполагаю, что вы используете модель ALS spark MLlib, которая выполняет матричную факторизацию. Результатом модели являются две матрицы: матрица пользовательских характеристик и матрица характеристик элементов.
Предполагая, что мы собираемся получать поток данных с рейтингами или транзакциями для случая неявного, реальное (100%) онлайн-обновление этой модели будет заключаться в обновлении обеих матриц для каждой новой поступающей рейтинговой информации путем запуска полной переобучения Модель ALS снова на всех данных + новый рейтинг. В этом сценарии каждый ограничен тем фактом, что выполнение всей модели ALS требует больших вычислительных ресурсов, а входящий поток данных может быть частым, что приведет к слишком частому полному повторному обучению.
Итак, зная это, мы можем искать альтернативы, один рейтинг не должен сильно менять матрицы, плюс у нас есть подходы к оптимизации, которые являются инкрементными, например SGD. Существует интересная (все еще экспериментальная) библиотека, написанная для случая Explicit Ratings, которая выполняет добавочные обновления для каждой партии DStream:
https://github.com/brkyvz/streaming-matrix-factorization
Идея использования пошагового подхода, такого как SGD, следует идее о том, что по мере продвижения к градиенту (проблема минимизации) гарантируется, что он движется к минимуму функции ошибок. Таким образом, даже если мы обновим один новый рейтинг, только матрицу характеристик пользователя для этого конкретного пользователя и только матрицу характеристик элемента для этого конкретного оцененного элемента, и обновление будет направлено в сторону градиента, мы гарантируем, что мы переместимся в сторону минимума, конечно как приближение, но все же в сторону минимума.
Другая проблема связана с самой искрой и распределенной системой, в идеале обновления должны выполняться последовательно для каждого нового входящего рейтинга, но искра обрабатывает входящий поток как пакет, который распространяется как RDD, поэтому операции, выполняемые для обновления будет выполняться для всей партии без гарантии последовательности.
Более подробно, например, если вы используете Prediction.IO, вы можете провести автономное обучение, в котором используются обычные встроенные функции обучения и развертывания, но если вы хотите получать онлайн-обновления, вам потребуется доступ к обеим матрицам для каждого пакета. потока и запускать обновления с помощью SGD, а затем запрашивать развертывание новой модели, этой функциональности, конечно, нет в Prediction.IO, вам придется создавать ее самостоятельно.
Интересные примечания к обновлениям SGD:
http://stanford.edu/~rezab/classes/cme323/S15/notes/lec14.pdf
person
Dr VComas
schedule
28.04.2016