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

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

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

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам