Как использовать дополнительные действия пользователя с для улучшения рекомендаций с помощью Spark ALS?

Есть ли способ использовать дополнительные действия пользователя, полученные из потока щелчков пользователя, для улучшения рекомендаций при использовании Spark Mllib ALS?

Я рассмотрел пример, основанный на явной и неявной обратной связи, упомянутый здесь: https://spark.apache.org/docs/latest/mllib-collaborative-filtering.html, который использует одинаковые RDD оценок для методов train () и trainImplicit ().

Означает ли это, что мне нужно вызывать trainImplicit () для того же объекта модели с RDD (пользователь, элемент, действие) для каждого действия вторичного пользователя? Или обучить несколько моделей, получить рекомендации, основанные на каждом действии, а затем объединить их линейно?

Для дополнительного контекста, суть вопроса заключается в том, может ли Spark ALS моделировать вторичные действия, такие как задание сходства элементов искры Mahout. Любые указатели помогут.


person neeraj baji    schedule 15.07.2015    source источник


Ответы (1)


Отказ от ответственности: я работаю с Mahout's Spark Item Similarity.

ALS в целом не подходит для множественных действий. Сначала иллюстрация. То, как мы используем несколько действий в ALS, - это взвешивать одно над другим. Например, покупка = 5, просмотр = 3. ALS был разработан в те дни, когда рейтинги казались важными, и их прогнозирование было вопросом. Теперь мы знаем, что рейтинг важнее. В любом случае ALS использует прогнозируемые рейтинги / веса для ранжирования результатов. Это означает, что представление на самом деле ничего не говорит о ALS, поскольку рейтинг 3 означает что? Нравиться? Неприязнь? ALS пытается обойти это, добавляя параметр регуляризации, и это помогает решить, является ли 3 подобным или нет.

Но проблема более фундаментальная, это намерение пользователя. Когда пользователь просматривает продукт (используя приведенный выше пример типа ecom), какое количество «покупательских» намерений задействовано? По моему собственному опыту, может не быть, а может быть много. Товар был новым или имел яркое изображение или другую приманку. Или я делаю покупки и смотрю 10 вещей перед покупкой. Однажды я протестировал это с большим набором данных ecom и не обнаружил комбинации параметра регуляризации (используемого с ALS trainImplicit) и весовых коэффициентов действия, которая могла бы превзойти автономную точность событий «покупки», используемых отдельно.

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

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

Кстати, если вы находите интеграцию Mahout Spark Item Similarity пугающей по сравнению с использованием MLlib ALS, я собираюсь пожертвовать сквозную реализацию в качестве шаблона для прогнозирования .io, все из которых имеет открытый исходный код по лицензии Apache.

person pferrel    schedule 16.07.2015
comment
Спасибо за ответ, Пат. - person neeraj baji; 17.07.2015
comment
Я хотел бы воспользоваться возможностью, чтобы поблагодарить вас за очень информативный блог, посвященный рекомендациям. Я также просмотрел ваше сообщение в блоге о реализации мультимодального универсального рекомендателя, но, как вы уже догадались, меня пугает перспектива интеграции схожести элементов Mahout. Использование Spark Mllib немного облегчает жизнь. Когда вы говорите о сквозной реализации, собираетесь ли вы пожертвовать реализацию, охватывающую всю лямбда-архитектуру? - person neeraj baji; 17.07.2015
comment
да, PredictioIO реализует архитектуру Lambda, рекомендатель - это шаблон, использующий эту архитектуру. В частности, он использует Elasticsearch для обслуживания запросов. Все под лицензией Apache. - person pferrel; 18.07.2015
comment
Великолепно !. Это определенно было бы моей отправной точкой для развертывания mahout в производственной среде. Спасибо еще раз. - person neeraj baji; 20.07.2015
comment
шаблон здесь: templates.prediction.io/PredictionIO/ - person pferrel; 26.07.2015
comment
Спасибо, Пэт. Настройка запроса со смещениями и повышениями очень впечатляет. - person neeraj baji; 28.07.2015