Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz

Mening ismim Pavel Parkhomenko, men ML dasturchisiman. Ushbu maqolada men Yandex.Zen xizmatining tuzilishi haqida gapirib bermoqchiman va texnik yaxshilanishlar bilan bo'lishmoqchiman, ularning amalga oshirilishi tavsiyalar sifatini oshirishga imkon berdi. Ushbu postdan siz millionlab hujjatlar orasidan foydalanuvchi uchun eng mosini bir necha millisekundda qanday topishni o'rganasiz; yangi hujjatlar o'nlab daqiqalarda o'z vektorini olishi uchun katta matritsaning (millionlab ustunlar va o'n millionlab qatorlardan iborat) uzluksiz parchalanishini qanday qilish kerak; Video uchun yaxshi vektor tasvirini olish uchun foydalanuvchi-maqola matritsasining parchalanishidan qanday foydalanish kerak.

Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz

Bizning tavsiyalar bazasida turli formatdagi millionlab hujjatlar mavjud: platformamizda yaratilgan va tashqi saytlardan olingan matnli maqolalar, videolar, hikoyalar va qisqa postlar. Bunday xizmatning rivojlanishi ko'plab texnik muammolar bilan bog'liq. Mana ulardan ba'zilari:

  • Hisoblash vazifalarini taqsimlang: barcha og'ir operatsiyalarni oflayn rejimda bajaring va real vaqtda faqat 100-200 ms uchun javobgar bo'lish uchun modellarni tezkor qo'llashni amalga oshiring.
  • Foydalanuvchi harakatlarini tezda hisobga oling. Buning uchun barcha hodisalar darhol tavsiya qiluvchiga etkazilishi va modellar natijalariga ta'sir qilishi kerak.
  • Tasmani yangi foydalanuvchilar uchun ularning xatti-harakatlariga tezda moslashishi uchun yarating. Tizimga endigina qo'shilgan odamlar o'zlarining fikr-mulohazalari tavsiyalarga ta'sir qilishini his qilishlari kerak.
  • Yangi maqolani kimga tavsiya qilishni tezda tushuning.
  • Yangi tarkibning doimiy paydo bo'lishiga tezda javob bering. Har kuni o'n minglab maqolalar nashr etiladi va ularning ko'pchiligining umri cheklangan (aytaylik, yangiliklar). Bu ularni filmlar, musiqa va boshqa uzoq umr ko'radigan va yaratish uchun qimmat kontentdan ajratib turadigan narsa.
  • Bilimlarni bir domen hududidan boshqasiga o'tkazish. Agar tavsiyalar tizimida matnli maqolalar uchun oʻrgatilgan modellar mavjud boʻlsa va biz unga video qoʻshsak, yangi turdagi kontent yaxshiroq oʻrin egallashi uchun mavjud modellardan qayta foydalanishimiz mumkin.

Men sizga bu muammolarni qanday hal qilganimizni aytib beraman.

Nomzodlarni tanlash

Qanday qilib ko'rib chiqilayotgan hujjatlar sonini bir necha millisekundlarda minglab marta qisqartirish mumkin, bunda reyting sifati deyarli yomonlashmaydi?

Aytaylik, biz ko'plab ML modellarini o'rgatganmiz, ular asosida xususiyatlarni yaratdik va foydalanuvchi uchun hujjatlarni tartiblovchi boshqa modelni o'rgatganmiz. Hammasi yaxshi bo'lardi, lekin real vaqtda barcha hujjatlar uchun barcha belgilarni olib, hisoblab bo'lmaydi, agar bu hujjatlar millionlab bo'lsa va tavsiyalar 100-200 milodiyda tuzilishi kerak bo'lsa. Vazifa, foydalanuvchi uchun tartiblangan millionlab ma'lum bir kichik to'plamni tanlashdir. Ushbu bosqich odatda nomzodlarni tanlash deb ataladi. Buning uchun bir nechta talablar mavjud. Birinchidan, tanlov juda tez amalga oshirilishi kerak, shunda reytingning o'ziga imkon qadar ko'proq vaqt qolishi kerak. Ikkinchidan, tartiblash uchun hujjatlar sonini sezilarli darajada qisqartirgan holda, biz foydalanuvchiga tegishli hujjatlarni iloji boricha to'liq saqlashimiz kerak.

Bizning nomzodlarni tanlash tamoyilimiz rivojlandi va hozirda biz ko'p bosqichli sxemaga keldik:

Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz

Birinchidan, barcha hujjatlar guruhlarga bo'linadi va har bir guruhdan eng mashhur hujjatlar olinadi. Guruhlar saytlar, mavzular, klasterlar bo'lishi mumkin. Har bir foydalanuvchi uchun uning tarixidan kelib chiqib, unga eng yaqin guruhlar tanlanadi va ulardan eng yaxshi hujjatlar olinadi. Biz real vaqtda foydalanuvchiga eng yaqin bo'lgan hujjatlarni tanlash uchun kNN indeksidan ham foydalanamiz. KNN indeksini yaratishning bir necha usullari mavjud, bizniki eng yaxshi ishladi HNSW (Ierarxik navigatsiya qilinadigan kichik dunyo grafiklari). Bu ierarxik model bo'lib, bir necha millisekundlarda millionlab ma'lumotlar bazasidan foydalanuvchi uchun eng yaqin N vektorni topish imkonini beradi. Biz birinchi navbatda butun hujjat ma'lumotlar bazasini oflayn rejimda indekslaymiz. Indeksda qidirish juda tez ishlayotganligi sababli, agar bir nechta kuchli o'rnatishlar mavjud bo'lsa, siz bir nechta indekslarni yaratishingiz mumkin (har bir joylashtirish uchun bitta indeks) va ularning har biriga real vaqtda kirishingiz mumkin.

Bizda hali ham har bir foydalanuvchi uchun o'n minglab hujjatlar mavjud. Barcha xususiyatlarni hisoblash uchun bu hali juda ko'p, shuning uchun bu bosqichda biz engil reytingdan foydalanamiz - kamroq xususiyatlarga ega engil vaznli og'ir reyting modeli. Vazifa og'ir modelning yuqori qismida qaysi hujjatlarga ega bo'lishini taxmin qilishdir. Eng yuqori bashoratli hujjatlar og'ir modelda, ya'ni reytingning oxirgi bosqichida qo'llaniladi. Ushbu yondashuv foydalanuvchi uchun ko'rib chiqiladigan hujjatlar ma'lumotlar bazasini o'nlab millisekundlarda milliondan minglabgacha kamaytirish imkonini beradi.

Ish vaqtidagi ALS qadami

Qanday qilib bosgandan so'ng darhol foydalanuvchi fikr-mulohazalarini hisobga olish kerak?

Tavsiyalarning muhim omili - foydalanuvchilarning fikr-mulohazalariga javob berish vaqti. Bu, ayniqsa, yangi foydalanuvchilar uchun juda muhim: odam endigina tavsiyalar tizimidan foydalanishni boshlaganida, u turli mavzulardagi hujjatlarning shaxsiylashtirilmagan tasmasini oladi. U birinchi marta bosgandan so'ng, darhol buni hisobga olishingiz va uning manfaatlariga moslashingiz kerak. Agar siz barcha omillarni oflayn rejimda hisoblasangiz, kechikish tufayli tizimning tezkor javobi imkonsiz bo'ladi. Shunday qilib, real vaqtda foydalanuvchi harakatlarini qayta ishlash kerak. Ushbu maqsadlar uchun biz foydalanuvchining vektor tasvirini yaratish uchun ish vaqtida ALS qadamidan foydalanamiz.

Faraz qilaylik, bizda barcha hujjatlar uchun vektor tasviri bor. Masalan, biz ELMo, BERT yoki boshqa mashinani oʻrganish modellaridan foydalangan holda maqola matni asosida oʻrnatishlarni oflayn rejimda yaratishimiz mumkin. Tizimdagi o'zaro ta'sirlari asosida bir xil fazodagi foydalanuvchilarning vektor tasvirini qanday olishimiz mumkin?

Foydalanuvchi-hujjat matritsasi shakllanishi va parchalanishining umumiy printsipim foydalanuvchi va n ta hujjatga ega bo'lsin. Ba'zi foydalanuvchilar uchun ularning ma'lum hujjatlarga aloqasi ma'lum. Keyin bu ma'lumot m x n matritsa sifatida ifodalanishi mumkin: qatorlar foydalanuvchilarga, ustunlar esa hujjatlarga mos keladi. Shaxs hujjatlarning ko'pini ko'rmaganligi sababli, matritsa hujayralarining aksariyati bo'sh qoladi, boshqalari esa to'ldiriladi. Har bir hodisa uchun (yoqtirish, yoqtirmaslik, bosish) matritsada ma'lum qiymat taqdim etiladi - lekin keling, soddalashtirilgan modelni ko'rib chiqaylik, unda yoqtirish 1 ga, yoqtirmaslik esa -1 ga to'g'ri keladi.

Matritsani ikkiga ajratamiz: P (m x d) va Q (d x n), bu erda d vektor tasvirining o'lchami (odatda kichik son). Keyin har bir ob'ekt d o'lchovli vektorga mos keladi (foydalanuvchi uchun - P matritsadagi qator, hujjat uchun - Q matritsasidagi ustun). Ushbu vektorlar mos keladigan ob'ektlarning joylashuvi bo'ladi. Hujjat foydalanuvchiga yoqadimi yoki yo'qligini bashorat qilish uchun siz shunchaki ularning joylashuvini ko'paytirishingiz mumkin.

Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz
Matritsani parchalashning mumkin bo'lgan usullaridan biri bu ALS (Alternating Least Squares). Biz quyidagi yo'qotish funksiyasini optimallashtiramiz:

Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz

Bu yerda rui - u foydalanuvchining i hujjati bilan o'zaro ta'siri, qi - i hujjat vektori, pu - foydalanuvchi u vektori.

Keyin o'rtacha kvadrat xatosi nuqtai nazaridan optimal foydalanuvchi vektori (qat'iy hujjat vektorlari uchun) tegishli chiziqli regressiyani yechish orqali analitik tarzda topiladi.

Bu "ALS qadami" deb ataladi. Va ALS algoritmining o'zi shundaki, biz navbatma-navbat matritsalardan birini (foydalanuvchilar va maqolalar) tuzatamiz va boshqasini yangilab, optimal echimni topamiz.

Yaxshiyamki, foydalanuvchining vektor ko'rinishini topish juda tez operatsiya bo'lib, uni vektor ko'rsatmalari yordamida ish vaqtida bajarish mumkin. Ushbu hiyla sizga reytingda foydalanuvchilarning fikr-mulohazalarini darhol hisobga olish imkonini beradi. Nomzodlarni tanlashni yaxshilash uchun kNN indeksida bir xil joylashtirishdan foydalanish mumkin.

Tarqalgan hamkorlikdagi filtrlash

Qanday qilib qo'shimcha taqsimlangan matritsani faktorizatsiya qilish va yangi maqolalarning vektor ko'rinishini tezda topish mumkin?

Kontent tavsiya signallarining yagona manbai emas. Yana bir muhim manba - hamkorlikdagi ma'lumotlar. Yaxshi reyting xususiyatlarini an'anaviy ravishda foydalanuvchi-hujjat matritsasining parchalanishidan olish mumkin. Ammo bunday parchalanishni amalga oshirishga harakat qilganda, biz muammolarga duch keldik:

1. Bizda millionlab hujjatlar va o'n millionlab foydalanuvchilarimiz bor. Matritsa bitta mashinaga to'liq mos kelmaydi va parchalanish juda uzoq vaqt talab etadi.
2. Tizimdagi kontentning ko'pchiligi qisqa muddatga ega: hujjatlar bir necha soat davomida dolzarb bo'lib qoladi. Shuning uchun ularning vektor tasvirini imkon qadar tezroq qurish kerak.
3. Hujjat chop etilgandan so'ng darhol parchalanishni qursangiz, etarli miqdordagi foydalanuvchilar uni baholashga vaqtlari bo'lmaydi. Shuning uchun, uning vektor tasviri, ehtimol, unchalik yaxshi bo'lmaydi.
4. Agar foydalanuvchi yoqtirsa yoki yoqtirmasa, biz buni parchalanishda darhol hisobga olmaymiz.

Ushbu muammolarni hal qilish uchun biz tez-tez qo'shimcha yangilanishlar bilan foydalanuvchi-hujjat matritsasining taqsimlangan parchalanishini amalga oshirdik. U aniq qanday ishlaydi?

Faraz qilaylik, bizda N ta mashinalar klasteri bor (N soni yuzlab) va biz ular ustida bitta mashinaga to'g'ri kelmaydigan matritsaning taqsimlangan parchalanishini amalga oshirmoqchimiz. Savol shundaki, bu parchalanishni qanday amalga oshirish kerak, bir tomondan, har bir mashinada etarli ma'lumotlar mavjud bo'lsa, ikkinchidan, hisob-kitoblar mustaqil bo'lishi uchun?

Tavsiyalarni tanlash sifati va tezligi ustida qanday ishlaymiz

Biz yuqorida tavsiflangan ALS parchalanish algoritmidan foydalanamiz. Keling, bitta ALS qadamini taqsimlangan tarzda qanday bajarishni ko'rib chiqaylik - qolgan qadamlar o'xshash bo'ladi. Aytaylik, bizda qat'iy hujjatlar matritsasi bor va biz foydalanuvchilar matritsasini yaratmoqchimiz. Buning uchun biz uni N qismga chiziqlar bo'yicha ajratamiz, har bir qismda taxminan bir xil sonli qatorlar bo'ladi. Biz har bir mashinaga tegishli qatorlarning bo'sh bo'lmagan kataklarini, shuningdek hujjatlarni joylashtirish matritsasi (to'liq) yuboramiz. Uning o'lchami unchalik katta bo'lmaganligi va foydalanuvchi-hujjat matritsasi odatda juda siyrak bo'lganligi sababli, bu ma'lumotlar oddiy mashinaga mos keladi.

Ushbu hiyla bir necha davrlar davomida model birlashmaguncha takrorlanishi mumkin, sobit matritsani birma-bir almashtiradi. Ammo shunga qaramay, matritsaning parchalanishi bir necha soat davom etishi mumkin. Va bu sizga yangi hujjatlarni o'rnatishni tezda qabul qilish va modelni yaratishda kam ma'lumotga ega bo'lgan hujjatlarni joylashtirishni yangilash kerak bo'lgan muammoni hal qilmaydi.

Tez qo'shimcha model yangilanishlarini joriy etish bizga yordam berdi. Aytaylik, bizda hozirda o'qitilgan model bor. Uning treningidan so'ng, bizning foydalanuvchilarimiz o'zaro muloqotda bo'lgan yangi maqolalar, shuningdek, trening davomida o'zaro ta'sir o'tkazmagan maqolalar paydo bo'ldi. Bunday maqolalarning o'rnatilishini tezda olish uchun biz modelni birinchi katta o'qitish jarayonida olingan foydalanuvchi qo'shimchalaridan foydalanamiz va belgilangan foydalanuvchi matritsasi berilgan hujjat matritsasi hisoblash uchun bir ALS qadamini bajaramiz. Bu sizga o'rnatishlarni juda tez qabul qilish imkonini beradi - hujjat nashr etilgandan keyin bir necha daqiqa ichida - va tez-tez so'nggi hujjatlarning o'rnatilishini yangilaydi.

Tavsiyalarni darhol inson xatti-harakatlarini hisobga olish uchun, ish vaqtida biz oflayn rejimda olingan foydalanuvchi qo'shimchalaridan foydalanmaymiz. Buning o'rniga biz ALS qadamini bajaramiz va haqiqiy foydalanuvchi vektorini olamiz.

Boshqa domen hududiga o'tkazing

Videoning vektor tasvirini yaratish uchun matnli maqolalar bo'yicha foydalanuvchi fikr-mulohazalaridan qanday foydalanish kerak?

Dastlab, biz faqat matnli maqolalarni tavsiya qildik, shuning uchun bizning ko'plab algoritmlarimiz ushbu turdagi tarkibga moslashtirilgan. Ammo boshqa turdagi tarkibni qo'shganda, biz modellarni moslashtirish zarurati bilan duch keldik. Video misol yordamida bu muammoni qanday hal qildik? Variantlardan biri barcha modellarni noldan qayta tayyorlashdir. Ammo bu ko'p vaqt talab etadi va ba'zi algoritmlar o'quv namunasi hajmini talab qiladi, bu xizmatda ishlashning dastlabki daqiqalarida yangi turdagi kontent uchun kerakli miqdorda hali mavjud emas.

Biz boshqa yo'ldan bordik va video uchun matn modellarini qayta ishlatdik. Xuddi shu ALS hiylasi bizga videolarning vektor tasvirlarini yaratishga yordam berdi. Biz matnli maqolalar asosida foydalanuvchilarning vektor tasvirini oldik va video ko'rish ma'lumotlaridan foydalangan holda ALS bosqichini amalga oshirdik. Shunday qilib, biz osongina videoning vektor tasvirini oldik. Va ish vaqtida biz matnli maqolalardan olingan foydalanuvchi vektori va video vektor o'rtasidagi yaqinlikni oddiygina hisoblaymiz.

xulosa

Haqiqiy vaqtda tavsiyalar tizimining asosini ishlab chiqish ko'plab muammolarni o'z ichiga oladi. Ushbu ma'lumotlardan samarali foydalanish uchun siz tezda ma'lumotlarni qayta ishlashingiz va ML usullarini qo'llashingiz kerak; minimal vaqt ichida foydalanuvchi signallari va yangi kontent birliklarini qayta ishlashga qodir murakkab taqsimlangan tizimlarni qurish; va boshqa ko'plab vazifalar.

Dizayni men tasvirlab bergan joriy tizimda foydalanuvchi uchun tavsiyalar sifati uning faolligi va xizmatda qolish muddati bilan birga oshib boradi. Lekin, albatta, bu erda asosiy qiyinchilik yotadi: tizimning mazmuni bilan ozgina o'zaro ta'sir qiladigan odamning manfaatlarini darhol tushunish qiyin. Yangi foydalanuvchilar uchun tavsiyalarni yaxshilash bizning asosiy maqsadimizdir. Biz algoritmlarni optimallashtirishda davom etamiz, shunda odamga tegishli bo'lgan kontent uning tasmasiga tezroq kirib boradi va ahamiyatsiz kontent ko'rsatilmaydi.

Manba: www.habr.com

a Izoh qo'shish