Агляд сістэмы рэкамендацый і як яе рэалізаваць з нуля

Гэты блог уключае ў сябе агляд рэкамендацыйных сістэм, уключаючы гісторыю, сучаснасць, будучыню, розныя яго катэгорыі і, нарэшце, код для апрацоўкі жартаў.

Фота Эда Нуграха на Unsplash

Мінулае сучаснасць і будучыня:

Калі мы паглядзім на гісторыю сістэмы рэкамендацый, ідэя ўзнікла ў перыяд з 1992 па 1996 год. Да таго, як сістэма рэкамендацый уяўлялася яшчэ да таго, як людзі казалі пра сумесную фільтрацыю, яна была вядомая як персаналізацыя. Але ўсё было ўручную. Напрыклад: Турагент, які ведае, што вы зацікаўлены ў сафары, будзе сачыць за тыпам падарожжа, які вы хацелі б, а не толькі з тым, што хацеў бы зрабіць хто-небудзь. У якасці другога прыкладу: у асабістых пакупнікоў былі некалькі простых баз дадзеных, у якіх яны маглі запускаць профілі людзей, калі з'яўляліся новыя прадукты і атрымлівалі ўяўленне пра тое, каго яны маглі б лічыць, што можа стаць добрым кандыдатам на новы прадукт. У 2007 годзе Netflix абвясціў конкурс у памеры 1 мільён долараў і змяніў курс рэкамендацыйных сістэм. Да ўдзелу ў конкурсе былі прыцягнуты людзі з самых розных слаёў грамадства. Новыя алгарытмы з'явіліся разам з новымі матэматычнымі формуламі. Дарэчы, бібліятэка сюрпрызаў, якую я буду выкарыстоўваць, каб пажартаваць, цалкам распрацавана сістэма рэкамендацый, сочачы за навукова-даследчай працай, апублікаванай камандай-пераможцам узнагароды Netflix. Калі мы з нецярпеннем чакаем, ёсць яшчэ шмат рэчаў, якія мы не ведаем. Праблема часовай рэкамендацыі. Як мне прывесці свае рэкамендацыі не толькі да такіх рэчаў, як сезон, над якім людзі працавалі некаторы час, але і паслядоўнасці, што вы спажывалі далей, улічваючы, што вы ўжо гэта спажывалі. Рэкамендацыі па адукацыі, якія з'яўляюцца адным з напрамкаў, былі вельмі часавымі.

Шырокае падраздзяленне сістэмы рэкамендацый:

У асноўным ёсць дзве катэгорыі рэкамендацыйных сістэм. 1. Фільтрацыя на аснове сумеснай працы. 2. Фільтрацыя на аснове змесціва

Сумеснае фільтраванне: Ключ да сумеснай фільтрацыі заснаваны на здагадцы, што людзі, якія згадзіліся ў мінулым, пагодзяцца ў будучыні і што ім спадабаюцца падобныя прадметы, як ім падабалася ў мінулым. Тры асноўныя катэгорыі сумеснай фільтрацыі: 1. Падабенства паміж карыстальнікам і карыстальнікам 2. Пункт падабенства прадмета 3. На аснове мадэлі

Падабенства карыстальніка карыстальніка і прадмета

Фільтраванне на аснове змесціва: змесціва метадаў фільтрацыі заснавана на апісанні элемента і профілі пераваг карыстальніка. Гэтыя метады лепш за ўсё падыходзяць для сітуацый, калі вядомыя дадзеныя аб элеменце (імя, месцазнаходжанне, апісанне і г.д.), але не пра карыстальніка.

Рэкамендацыя на аснове сумеснага ўтрымання

Абавязковая ўмова

1.Basic Python 2.Basic pandas 3.Eagerness to explorite library 4. Keras (па жаданні)

Калі вы хочаце непасрэдна перайсці на коды, перайдзіце па спасылцы Github і знайдзіце сшытак з юпітэрам.

Я растлумачу ўсе асноўныя этапы, якія я выконваў пры вырашэнні праблемы, але я вельмі веру, калі вы зацікаўлены ў поўным тлумачэнні праблемы і вам цікава даведацца пра выкарыстанне бібліятэкі сюрпрызаў, то вы павінны зірнуць на git repo пасля праходжання праграмы блог.

Давайце пачнем. Некаторыя асноўныя звесткі пра дадзеныя, якія мы збіраемся выкарыстоўваць.

Апісанне дадзеных

Зараз я буду складаць план падыходу да праблемы і павольна рухацца да вырашэння праблемы. Мы будзем праходзіць кожны крок з фрагментамі кода. 1. Збор дадзеных 2. Трэніроўка выпрабаванняў раздзела 3. Простая статыстыка 4. Структура дадзеных у сумяшчальны фармат бібліятэкі здзіўлення 5. Вызначэнне метрыкі памылак 6. Выкарыстанне мадэлі базавай лініі 7. Паспрабуйце розныя мадэлі 8. Вынік

Збор дадзеных

  1. У дадзеных прадстаўлены 3 ліста Excel. Мы аб'яднаем іх разам і сфармуем камбінаваную DataFrame панду python. У нас ёсць 73421 карыстальнікаў.
Злучыце ўсе дадзеныя

2. Як апісана ў інфармацыі аб дадзеных, рэйтынг 99 азначае, што карыстальнік не ацаніў гэтага жарту. Мы выдалім гэтыя запісы і падрыхтуем дадзеныя ў фармаце ['user_id', 'joke_id', 'rating'].

Падрыхтоўка дадзеных

Тэст цягнікоў раскол

Мы будзем выкарыстоўваць scikit-learn train_test_split і падзяліць дадзеныя як 70–30. 70% дадзеных будуць даступныя для цягніка і 30% для тэставання

Асноўная статыстыка

1. Сярэдняя адзнака на аднаго карыстальніка і на жарт

размеркаванне рэйтынгаў усіх карыстальнікаўразмеркаванне рэйтынгаў усіх жартаў

Структураваць дадзеныя ў сумяшчальны фармат бібліятэкі сюрпрызаў

Мы будзем структураваць дадзеныя ў адпаведнасці з бібліятэкай сюрпрызаў. Ён прымае дадзеныя ў фармаце ў выглядзе "карыстальнік", "жарт", "рэйтынг"]. Калі б у нас узнікла праблема з рэкамендацыямі да фільма, мы б структуравалі дадзеныя як ["карыстальнік", "фільм", "рэйтынг"].

падрыхтаваць дадзеныя ў стылі здзіўлення бібліятэкі

Вызначэнне метрыкі памылкі

мы будзем выкарыстоўваць нармалізаваную сярэднюю абсалютную памылку ў якасці метрыкі памылкі.

Нармалізаваная формула сярэдняй абсалютнай памылкі (NAME)код для вылічэння NMAE

Выкарыстанне базавай мадэлі

Мы створым мадэль базавай лініі з выкарыстаннем мадэлі Baseline, зададзенай бібліятэкай сюрпрызаў. Базавая мадэль дае 0,2033 NMAE. Мы паспрабуем розныя мадэлі сюрпрызу і спалучым усе вынікі, каб атрымаць лепшыя вынікі.

Паспрабуйце розныя мадэлі

  1. Базавая мадэль KNN: Для прагназавання рэйтынгаў карыстальнікаў новых жартаў выкарыстоўваецца методыка, падобная на падабенства. У нашым выпадку памылка NMAE складае 0,196

2. XGBoost на userAverageRating, jokeAverageRating, выснова Baseline і выхад з базавай лініі KNN: Мы аб'ядналі ўвесь выхад папярэдняй мадэлі сюрпрызаў і запусцілі рэгрэсійную мадэль XGB па дадзеных пасля налады гіпер-параметраў. Тут мы атрымліваем крыху лепшы вынік 0,1928 NMAE

3. Мадэль SVD: Для вырашэння праблемы запаўнення матрыцы мадэль SVD выкарыстоўвае матрычную факторизацию і прагназуе рэйтынг.

4. XGBoost на userAverageRating, jokeAverageRating, выснова Baseline, выхад базавай лініі KNN і выхад SVD-мадэлі. Гэтая мадэль дае 0,18 NMAE і з'яўляецца найлепшай дагэтуль.

5. Мадэль з асаблівасцямі: у мяне ёсць дзве простыя функцыі, каб праверыць іх уплыў на мадэль. Адной з асаблівасцей з'яўляецца user_average + joke_avg-global_avg. Гэтая мадэль дае як звычайна NMAE 20.2. Я спрабаваў і іншыя тэхнічныя характарыстыкі. Яны таксама не працавалі добра.

6. Depp Learning models using keras: Паколькі мастацкая інжынерыя не працавала добра, я планую паспрабаваць некалькі простых мадэляў нейроннай сеткі з выкарыстаннем keras. Я паспрабаваў 3 розныя мадэлі. Адзін з усімі асноўнымі функцыямі, такімі як сярэдні карыстач, сярэдні жарт - другі і трэці з усімі функцыямі, але з рознымі архітэктурамі. Адна мадэль мела 14,9% NMAE.

Вынікі

Як мы бачым, мадэль Second_NN працуе лепш за ўсё, бо мае найменшую памылку тэсту.

Фінальныя думкі

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

У якасці другой нататкі я магу сказаць, што сістэмы рэкамендацый растуць ужо некалькі дзён. Бібліятэка сюрпрызаў значна палягчае жыццё распрацоўшчыкаў, даючы ўсім вядомыя мадэлі рэалізацыі. Для стварэння асноўнай сістэмы рэкамендацый гэта сапраўды карысна. Я думаю, што я выканаў сваю мэту напісаць гэты блог і прымусіў распрацоўнікаў ведаць пра бібліятэку сюрпрызаў з невялікім уводам кадавання. Увесь код даступны тут у git.