Използване на множество, претеглени модели на данни за препоръчител на 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
Да, те ще бъдат сумирани. Моделът е инкрементален/адитивен вход. Но ако две неща имат еднакъв идентификатор, те са едно и също нещо (за модела). Не бихте комбинирали различни видове артикули по този начин, защото различните видове неща биха имали различни идентификатори. - person Sean Owen; 10.04.2013