Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз

Менің атым Павел Пархоменко, мен ML әзірлеушісімін. Бұл мақалада мен Яндекс.Зен қызметінің құрылымы туралы сөйлескім келеді және техникалық жетілдірулермен бөліскім келеді, олардың орындалуы ұсыныстардың сапасын арттыруға мүмкіндік берді. Бұл посттан сіз бірнеше миллисекундта миллиондаған құжаттардың ішінен пайдаланушыға ең қолайлысын қалай табуға болатынын білесіз; үлкен матрицаны (миллиондаған бағандар мен ондаған миллион жолдардан тұратын) үздіксіз декомпозицияны қалай жасауға болады, осылайша жаңа құжаттар ондаған минут ішінде векторын алады; Бейне үшін жақсы векторлық көрініс алу үшін пайдаланушы-мақала матрицасының декомпозициясын қайта пайдалану жолы.

Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз

Біздің ұсыныстар базасында әртүрлі форматтағы миллиондаған құжаттар бар: платформамызда жасалған және сыртқы сайттардан, бейнелерден, әңгімелер мен қысқа жазбалардан алынған мәтіндік мақалалар. Мұндай қызметтің дамуы көптеген техникалық қиындықтармен байланысты. Мұнда олардың кейбіреулері бар:

  • Есептеу тапсырмаларын бөліңіз: барлық ауыр операцияларды офлайн режимінде орындаңыз және нақты уақытта 100-200 мс жауап беру үшін үлгілерді жылдам қолдануды ғана орындаңыз.
  • Пайдаланушы әрекеттерін жылдам ескеріңіз. Ол үшін барлық оқиғалар бірден ұсыныс берушіге жеткізіліп, үлгілердің нәтижелеріне әсер етуі керек.
  • Жаңа пайдаланушылар үшін ол олардың мінез-құлқына тез бейімделетіндей арнаны жасаңыз. Жүйеге жаңадан қосылған адамдар олардың пікірлері ұсыныстарға әсер ететінін сезінуі керек.
  • Жаңа мақаланы кімге ұсыну керектігін тез түсініңіз.
  • Жаңа мазмұнның үнемі пайда болуына тез жауап беріңіз. Күн сайын ондаған мың мақалалар шығады, олардың көпшілігінің өмір сүру мерзімі шектеулі (айталық, жаңалықтар). Бұл оларды фильмдерден, музыкадан және басқа ұзақ өмір сүретін және жасауға қымбат тұратын мазмұннан ерекшелендіреді.
  • Білімді бір домен аймағынан екіншісіне тасымалдау. Ұсыныс жүйесінде мәтіндік мақалалар үшін оқытылған үлгілер болса және біз оған бейне қоссақ, мазмұнның жаңа түрі жақсырақ болу үшін бұрыннан бар үлгілерді қайта пайдалана аламыз.

Мен бұл мәселелерді қалай шешкенімізді айтып беремін.

Үміткерлерді іріктеу

Рейтинг сапасы іс жүзінде нашарламай, бірнеше миллисекундта қаралатын құжаттардың санын мыңдаған есеге қалай азайтуға болады?

Біз көптеген ML үлгілерін оқыттық делік, олардың негізінде мүмкіндіктер жасадық және пайдаланушыға арналған құжаттарды рейтингтейтін басқа үлгіні оқыттық. Барлығы жақсы болар еді, бірақ нақты уақыт режимінде барлық құжаттардың барлық белгілерін алып, есептей алмайсыз, егер бұл құжаттардың миллиондағаны болса және ұсыныстар 100-200 мс ішінде жасалуы керек. Тапсырма - пайдаланушы үшін рейтингі болатын миллиондардың ішінен белгілі бір жиынды таңдау. Бұл кезең әдетте кандидаттарды іріктеу деп аталады. Оған бірнеше талаптар қойылады. Біріншіден, рейтингтің өзіне мүмкіндігінше көп уақыт қалдыру үшін таңдау өте жылдам болуы керек. Екіншіден, рейтинг үшін құжаттардың санын едәуір қысқарта отырып, біз пайдаланушыға қатысты құжаттарды мүмкіндігінше толық сақтауымыз керек.

Біздің кандидаттарды іріктеу принципі дамыды және қазіргі уақытта біз көп сатылы схемаға келдік:

Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз

Біріншіден, барлық құжаттар топтарға бөлініп, әр топтан ең танымал құжаттар алынады. Топтар сайттар, тақырыптар, кластерлер болуы мүмкін. Әрбір пайдаланушы үшін оның тарихына сүйене отырып, оған ең жақын топтар таңдалып, олардан ең жақсы құжаттар алынады. Біз сондай-ақ kNN индексін нақты уақытта пайдаланушыға ең жақын құжаттарды таңдау үшін қолданамыз. kNN индексін құрудың бірнеше әдісі бар, біздікі ең жақсы жұмыс істеді HNSW (Иерархиялық навигациялық шағын әлем графиктері). Бұл бірнеше миллисекундта миллиондаған дерекқордан пайдаланушыға ең жақын N векторды табуға мүмкіндік беретін иерархиялық модель. Біз алдымен құжат дерекқорымызды офлайн режимінде индекстейміз. Индексте іздеу өте жылдам жұмыс істейтіндіктен, бірнеше күшті ендірілген болса, бірнеше индекстерді (әрбір ендіру үшін бір индекс) жасап, олардың әрқайсысына нақты уақытта қол жеткізуге болады.

Бізде әлі күнге дейін әрбір пайдаланушы үшін он мыңдаған құжаттар бар. Бұл барлық мүмкіндіктерді санау үшін әлі де көп, сондықтан осы кезеңде біз жеңіл рейтингті қолданамыз - мүмкіндіктері аз жеңіл, ауыр рейтинг үлгісі. Тапсырма - ауыр модельдің жоғарғы жағында қандай құжаттар болатынын болжау. Ауыр үлгіде, яғни рейтингтің соңғы сатысында болжағышы ең жоғары құжаттар пайдаланылады. Бұл тәсіл пайдаланушы үшін қарастырылатын құжаттардың дерекқорын ондаған миллисекундтарда миллионнан мыңға дейін азайтуға мүмкіндік береді.

Орындау уақытындағы ALS қадамы

Басқаннан кейін пайдаланушының пікірін қалай есепке алуға болады?

Ұсыныстардағы маңызды фактор - пайдаланушы пікіріне жауап беру уақыты. Бұл әсіресе жаңа пайдаланушылар үшін маңызды: адам ұсыныс жүйесін енді ғана пайдалана бастағанда, ол әртүрлі тақырыптардағы құжаттардың жекелендірілмеген арнасын алады. Ол бірінші рет шерткен бойда, сіз мұны дереу ескеріп, оның мүдделеріне бейімделуіңіз керек. Барлық факторларды желіден тыс есептесеңіз, кідіріс салдарынан жүйенің жылдам жауабы мүмкін болмайды. Сондықтан нақты уақытта пайдаланушы әрекеттерін өңдеу қажет. Осы мақсаттар үшін пайдаланушының векторлық көрінісін құру үшін орындау уақытында ALS қадамын қолданамыз.

Бізде барлық құжаттардың векторлық көрінісі бар делік. Мысалы, біз ELMo, BERT немесе басқа машиналық оқыту үлгілерін пайдаланып мақала мәтіні негізінде ендірілген офлайн жасай аламыз. Жүйедегі өзара әрекеттесу негізінде бір кеңістіктегі пайдаланушылардың векторлық көрінісін қалай алуға болады?

Қолданушы-құжат матрицасын құрудың және декомпозициясының жалпы принципіm пайдаланушы және n құжат болсын. Кейбір пайдаланушылар үшін олардың белгілі бір құжаттармен байланысы белгілі. Сонда бұл ақпаратты mxn матрицасы ретінде көрсетуге болады: жолдар пайдаланушыларға, ал бағандар құжаттарға сәйкес келеді. Адам құжаттардың көпшілігін көрмегендіктен, матрицалық ұяшықтардың көпшілігі бос қалады, ал басқалары толтырылады. Әрбір оқиға үшін (ұнату, ұнатпау, басу) матрицада кейбір мән беріледі - бірақ ұнату 1-ге, ал ұнатпау -1-ге сәйкес келетін жеңілдетілген үлгіні қарастырайық.

Матрицаны екіге бөлейік: P (mxd) және Q (dxn), мұндағы d - векторлық бейнелеудің өлшемі (әдетте аз сан). Сонда әрбір объект d өлшемді векторға сәйкес болады (пайдаланушы үшін – Р матрицасындағы жол, құжат үшін – Q матрицасындағы баған). Бұл векторлар сәйкес объектілердің кірістірулері болады. Пайдаланушыға құжат ұнайтынын болжау үшін олардың ендірілуін көбейтуге болады.

Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз
Матрицаны ыдыратудың мүмкін әдістерінің бірі - ALS (Ауыспалы ең кіші квадраттар). Біз келесі жоғалту функциясын оңтайландырамыз:

Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз

Мұнда rui – u пайдаланушының i құжатымен әрекеттесуі, qi – i құжатының векторы, pu – u пайдаланушының векторы.

Содан кейін орташа квадраттық қателік тұрғысынан оңтайлы пайдаланушы векторы (тұрақты құжат векторлары үшін) сәйкес сызықтық регрессияны шешу арқылы аналитикалық жолмен табылады.

Бұл «ALS қадамы» деп аталады. Ал ALS алгоритмінің өзі – біз кезекпен матрицалардың бірін түзетеміз (пайдаланушылар мен мақалалар) және екіншісін жаңартып, оңтайлы шешімді табамыз.

Бақытымызға орай, пайдаланушының векторлық көрінісін табу өте жылдам операция болып табылады, оны векторлық нұсқауларды қолдану арқылы орындау уақытында жасауға болады. Бұл трюк рейтингте пайдаланушының пікірін бірден есепке алуға мүмкіндік береді. Үміткерлерді таңдауды жақсарту үшін kNN индексінде бірдей ендіруді пайдалануға болады.

Бөлінген бірлескен сүзгілеу

Үлестірмелі матрицалық факторизацияны қалай жасауға және жаңа мақалалардың векторлық көріністерін жылдам табуға болады?

Мазмұн ұсыныс сигналдарының жалғыз көзі емес. Тағы бір маңызды дереккөз - бірлескен ақпарат. Жақсы рейтинг мүмкіндіктерін дәстүрлі түрде пайдаланушы-құжат матрицасының ыдырауынан алуға болады. Бірақ мұндай ыдырауды жасауға тырысқанда, біз проблемаларға тап болдық:

1. Бізде миллиондаған құжаттар және ондаған миллион пайдаланушылар бар. Матрица бір машинаға толығымен сыймайды, ал ыдырау өте ұзақ уақытты алады.
2. Жүйедегі мазмұнның көпшілігінің қызмет ету мерзімі қысқа: құжаттар бірнеше сағатқа ғана өзекті болып қалады. Сондықтан олардың векторлық бейнесін мүмкіндігінше тез құру қажет.
3. Құжат жарияланғаннан кейін декомпозицияны құрастырсаңыз, пайдаланушылардың жеткілікті санының оны бағалауға уақыты болмайды. Сондықтан оның векторлық көрінісі өте жақсы болмайды.
4. Егер пайдаланушы ұнатса немесе ұнатпаса, біз оны бөлшектеуде бірден есепке ала алмаймыз.

Бұл мәселелерді шешу үшін біз жиі қосымша жаңартулары бар пайдаланушы-құжат матрицасының бөлінген декомпозициясын жүзеге асырдық. Ол нақты қалай жұмыс істейді?

Бізде N машинаның кластері бар делік (N - жүздеген) және біз оларға бір машинаға сыймайтын матрицаның бөлінген ыдырауын жасағымыз келеді. Мәселе мынада, бұл ыдырауды, бір жағынан, әрбір машинада жеткілікті деректер болуы үшін, ал екінші жағынан, есептеулер тәуелсіз болу үшін қалай орындау керек?

Ұсыныстарды таңдау сапасы мен жылдамдығымен қалай жұмыс істейміз

Біз жоғарыда сипатталған ALS декомпозиция алгоритмін қолданамыз. Бір ALS қадамын үлестірілген түрде қалай орындау керектігін қарастырайық - қалған қадамдар ұқсас болады. Бізде құжаттардың бекітілген матрицасы бар делік және біз пайдаланушылардың матрицасын құрғымыз келеді. Ол үшін оны N бөлікке сызықтар бойынша бөлеміз, әрбір бөлікте шамамен бірдей жолдар болады. Біз әрбір машинаға сәйкес жолдардың бос емес ұяшықтарын, сондай-ақ құжатты енгізу матрицасын (толығымен) жібереміз. Оның өлшемі өте үлкен емес және пайдаланушы-құжат матрицасы әдетте өте сирек болғандықтан, бұл деректер кәдімгі машинаға сәйкес келеді.

Бұл трюк бекітілген матрицаны бір-бірден ауыстыра отырып, модель жинақталғанға дейін бірнеше дәуірде қайталануы мүмкін. Бірақ сонда да матрицаның ыдырауы бірнеше сағатқа созылуы мүмкін. Бұл жаңа құжаттардың ендірілгендерін жылдам алу және модельді құру кезінде аз ақпарат болғандардың ендірілгендерін жаңарту қажет мәселені шешпейді.

Жылдам қосымша үлгі жаңартуларын енгізу бізге көмектесті. Бізде қазір дайындалған модель бар делік. Оның тренингінен бері біздің пайдаланушылар өзара әрекеттесетін жаңа мақалалар, сондай-ақ жаттығу кезінде өзара әрекеттеспеген мақалалар пайда болды. Мұндай мақалалардың ендірілуін жылдам алу үшін, біз модельдің бірінші үлкен оқыту кезінде алынған пайдаланушы ендірулерін пайдаланамыз және тіркелген пайдаланушы матрицасы берілген құжат матрицасын есептеу үшін бір ALS қадамын жасаймыз. Бұл құжат жарияланғаннан кейін бірнеше минут ішінде ендірілгендерді тез алуға және соңғы құжаттардың ендірілгендерін жиі жаңартуға мүмкіндік береді.

Ұсыныстарды бірден адамның әрекеттерін ескеру үшін орындау уақытында біз офлайн режимінде алынған пайдаланушы ендірулерін пайдаланбаймыз. Оның орнына біз ALS қадамын жасаймыз және нақты пайдаланушы векторын аламыз.

Басқа домен аймағына тасымалдау

Бейненің векторлық көрінісін құру үшін мәтіндік мақалалар бойынша пайдаланушы пікірін қалай пайдалануға болады?

Бастапқыда біз тек мәтіндік мақалаларды ұсындық, сондықтан көптеген алгоритмдеріміз мазмұнның осы түріне бейімделген. Бірақ басқа мазмұн түрлерін қосқанда біз үлгілерді бейімдеу қажеттілігіне тап болдық. Бұл мәселені бейне мысал арқылы қалай шештік? Бір нұсқа - барлық үлгілерді нөлден қайта даярлау. Бірақ бұл көп уақытты қажет етеді және кейбір алгоритмдер қызметте өмірінің алғашқы сәтінде жаңа мазмұн түрі үшін қажетті мөлшерде әлі қол жетімді емес оқыту үлгісінің өлшемін талап етеді.

Біз басқа жолмен жүріп, бейнеге мәтіндік үлгілерді қайта қолдандық. Сол ALS трюкі бейнелердің векторлық кескіндерін жасауға көмектесті. Біз мәтіндік мақалалар негізінде пайдаланушылардың векторлық көрінісін алдық және бейне көру ақпаратын пайдаланып ALS қадамын жасадық. Осылайша біз бейненің векторлық көрінісін оңай алдық. Ал орындалу уақытында біз мәтіндік мақалалардан алынған пайдаланушы векторы мен бейне вектор арасындағы жақындықты есептейміз.

қорытынды

Нақты уақыттағы ұсыныстар жүйесінің негізін жасау көптеген қиындықтарды қамтиды. Бұл деректерді тиімді пайдалану үшін деректерді жылдам өңдеу және ML әдістерін қолдану қажет; ең аз уақыт ішінде пайдаланушы сигналдарын және жаңа мазмұн бірліктерін өңдеуге қабілетті күрделі бөлінген жүйелерді құру; және басқа да көптеген тапсырмалар.

Мен дизайнын сипаттаған қазіргі жүйеде пайдаланушыға арналған ұсыныстардың сапасы оның белсенділігі мен қызметте болу ұзақтығымен бірге өседі. Бірақ, әрине, негізгі қиындық осында жатыр: жүйенің мазмұнымен аз әрекеттесетін адамның мүдделерін бірден түсінуі қиын. Жаңа пайдаланушылар үшін ұсыныстарды жақсарту – біздің басты мақсатымыз. Біз алгоритмдерді оңтайландыруды жалғастырамыз, сонда адамға қатысты мазмұн оның арнасына тезірек түсіп, маңызды емес мазмұн көрсетілмейді.

Ақпарат көзі: www.habr.com

пікір қалдыру