Использование нескольких взвешенных моделей данных для рекомендателя Mahout

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

Единственный способ, который я могу себе представить, — это объединить их вместе, сместив идентификаторы подписки, чтобы они не конфликтовали с идентификаторами статей. Для взвешивания я решил отказаться от логической настройки предпочтений и ввести оценки предпочтений, где подмножество статей имеет оценку предпочтения 1 (например), а подмножество подписок имеет оценку предпочтения 2.

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

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


person Robert Campbell    schedule 29.03.2013    source источник


Ответы (1)


Я думаю, вы думаете об этом в правильном направлении. Да, вам нужно немного больше выразительности, чем простое существование/не существует для подписок и статей, поскольку они означают несколько разные вещи. Я бы предложил выбирать веса, которые отражают их относительную частоту. Например, если пользователи прочитали 100 000 статей за все время и сделали 10 000 подписок, вы можете выбрать вес подписки равным «10», а вес чтения — «1».

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

Я бы указал вам на алгоритм ALS-WR, который специально разработан для этого типа ввода. Например: Совместная фильтрация наборов данных неявной обратной связи

Это реализовано в Mahout как ParallelALSFactorizationJob в Hadoop. Он прекрасно работает, хотя требует Hadoop. (Я не могу взять на себя ответственность за это, хотя большую часть рекомендательного кода я написал в Mahout.)

Реклама: я работаю над коммерциализацией системы «следующего поколения», созданной на основе моей работы в Mahout, под названием Myrrix. Это реализация ALS-WR, идеально подходящая для вашего типа ввода. Его довольно легко загрузить и запустить, и ему не нужен Hadoop.

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

person Sean Owen    schedule 29.03.2013
comment
Я не вижу поддержки нескольких наборов данных в Myrrix, кроме экспериментального. ПРИМЕР: ОБЪЕДИНЕНИЕ РЕКОМЕНДАТОРОВ - person Hurda; 10.04.2013
comment
Я не имею в виду слияние моделей. Здесь разные наборы данных — это данные о пользовательской статье и пользовательской подписке. Оба могут быть добавлены в одну модель с разным весом. На самом деле не имеет значения, что они собой представляют; они определяются только взвешиванием. - person Sean Owen; 10.04.2013
comment
То есть у нас может быть дублирующаяся запись (одинаковые идентификаторы) с разным весом — и она считается дважды (с учетом веса)? - person Hurda; 10.04.2013
comment
Да, они будут суммированы. Модель представляет собой инкрементный/аддитивный ввод. Но если у двух вещей один и тот же ID, то это одно и то же (для модели). Вы бы не объединили разные типы предметов таким образом, потому что разные типы вещей будут иметь разные идентификаторы. - person Sean Owen; 10.04.2013