Подтвердить что ты не робот

Как обновить Spark MatrixFactorizationModel для ALS

Я создаю простую систему рекомендаций для БД MovieLens, вдохновленную https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html.

У меня также есть проблемы с явным обучением, как здесь: Результаты совместной фильтрации Apache Spark ALS. Они не имеют смысла Использование неявного обучения (как по явным, так и неявным данным) дает мне разумные результаты, но явное обучение не делает.

Пока это нормально для меня, мне любопытно, как обновить модель. Хотя мое текущее решение работает как

  • со всеми оценками пользователей
  • создать модель
  • Получить рекомендации для пользователя

Я хочу иметь такой поток:

  • с базой оценок
  • создать модель один раз (дополнительно сохранить и загрузить ее)
  • получить некоторые оценки от одного пользователя в 10 случайных фильмах (не в модели!)
  • получить рекомендации с использованием модели и новых оценок пользователей

Поэтому я должен обновить свою модель, не полностью перепродав ее. Есть ли шанс сделать это?

В то время как первый способ хорош для пакетной обработки (например, генерации рекомендаций в ночных партиях), второй способ был бы хорош для почти живых выработки рекомендаций.

4b9b3361

Ответ 1

Изменить: следующее работало для меня, потому что у меня были неявные оценки отзывов и было интересно только ранжировать продукты для нового пользователя. Подробнее здесь


Фактически вы можете получать прогнозы для новых пользователей с использованием обученной модели (без обновления):

Чтобы получить прогнозы для пользователя в модели, вы используете его скрытое представление (вектор u размера f (количество факторов)), который умножается на матрицу скрытых факторов продукта (матрица, сделанная из скрытых представлений всех продуктов, кучу векторов размера f) и дает вам оценку для каждого продукта. Для новых пользователей проблема заключается в том, что у вас нет доступа к их скрытому представлению (у вас есть только полное представление размера M (количество разных продуктов), но то, что вы можете сделать, это использовать функцию подобия для вычисления аналогичного скрытого представление для этого нового пользователя путем умножения его на транспонирование матрицы продукта.

то есть. если у вас латентная матрица пользователя u, а ваша латентная матрица вашего продукта равна v, для пользователя я в модели вы получаете баллы: u_i * v для нового пользователя у вас нет скрытого представления, поэтому возьмите полное представление full_u и выполните: full_u * v ^ t * v Это приблизит скрытые факторы для новых пользователей и даст разумные рекомендации (если модель уже дает разумные рекомендации для существующих пользователей)

Чтобы ответить на вопрос о обучении, это позволяет вам вычислять прогнозы для новых пользователей без необходимости выполнять тяжелые вычисления модели, которые вы теперь можете делать только раз в то время. Таким образом, у вас есть пакетная обработка в ночное время и вы можете сделать прогноз для нового пользователя в течение дня.

Примечание: MLLIB дает вам доступ к матрице u и v

Ответ 2

Похоже, вы хотите сделать что-то вроде онлайн-обучения. Это означает, что вы фактически обновляете модель при получении данных. Spark MLLib имеет ограниченные возможности для обучения потоковым машинам. Там потоковая линейная регрессия и потоковое K-Means.

Многие проблемы с машинным обучением отлично справляются с пакетными решениями, возможно, переучивая модель каждые несколько часов или дней. Вероятно, есть стратегии для решения этого вопроса.

Один вариант может быть ансамблевой моделью, в которой вы комбинируете результаты своей ALS с другой моделью, которая помогает делать прогнозы о невидимых фильмах.

Если вы ожидаете увидеть много ранее невидимых фильмов, совместная фильтрация, вероятно, не сделает то, что вы хотите. Если эти новые фильмы вообще не входят в модель, нет никакой возможности для модели узнать, что другие люди, которые смотрели понравившиеся.

Лучшим вариантом может быть принятие другой стратегии и попытка какого-то скрытого семантического анализа фильмов и модельных концепций того, что такое фильм (например, жанр, темы и т.д.), таким образом, новые фильмы с различными свойства и вписываются в существующую модель, а оценки влияют на то, насколько сильно эти свойства взаимодействуют вместе.