Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma

Mani sauc Pāvels Parkhomenko, es esmu ML izstrādātājs. Å ajā rakstā es vēlos runāt par Yandex.Zen pakalpojuma struktÅ«ru un dalÄ«ties ar tehniskajiem uzlabojumiem, kuru ievieÅ”ana ir ļāvusi paaugstināt ieteikumu kvalitāti. No Ŕī ieraksta jÅ«s uzzināsit, kā tikai dažu milisekundēs atrast lietotājam atbilstoŔākos starp miljoniem dokumentu; kā veikt lielas matricas (kas sastāv no miljoniem kolonnu un desmitiem miljonu rindu) nepārtrauktu sadalÄ«Å”anu, lai jaunie dokumenti saņemtu savu vektoru desmitiem minÅ«Å”u laikā; kā atkārtoti izmantot lietotāja rakstu matricas sadalÄ«Å”anu, lai iegÅ«tu labu video vektora attēlojumu.

Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma

Mūsu ieteikumu datubāzē ir miljoniem dažādu formātu dokumentu: teksta raksti, kas izveidoti mūsu platformā un ņemti no ārējām vietnēm, video, stāsti un īsas ziņas. Šāda pakalpojuma izstrāde ir saistīta ar lielu skaitu tehnisku izaicinājumu. Šeit ir daži no tiem:

  • Sadaliet skaitļoÅ”anas uzdevumus: veiciet visas smagās darbÄ«bas bezsaistē un reāllaikā veiciet tikai ātru modeļu piemēroÅ”anu, lai bÅ«tu atbildÄ«gs par 100-200 ms.
  • Ātri ņem vērā lietotāja darbÄ«bas. Lai to izdarÄ«tu, ir nepiecieÅ”ams, lai visi notikumi uzreiz tiktu nodoti ieteicējam un ietekmētu modeļu rezultātus.
  • Izveidojiet plÅ«smu tā, lai jaunajiem lietotājiem tā ātri pielāgotos viņu uzvedÄ«bai. Cilvēkiem, kuri tikko pievienojuÅ”ies sistēmai, jājÅ«t, ka viņu atsauksmes ietekmē ieteikumus.
  • Ātri saproti, kam ieteikt jaunu rakstu.
  • Ātri reaģējiet uz nepārtrauktu jauna satura parādÄ«Å”anos. Katru dienu tiek publicēti desmitiem tÅ«kstoÅ”u rakstu, un daudziem no tiem ir ierobežots kalpoÅ”anas laiks (teiksim, ziņas). Tas tos atŔķir no filmām, mÅ«zikas un cita ilgstoÅ”a un dārga satura radÄ«Å”anas.
  • Pārnesiet zināŔanas no viena domēna jomas uz citu. Ja ieteikumu sistēmai ir apmācÄ«ti teksta rakstu modeļi un mēs tai pievienojam video, mēs varam atkārtoti izmantot esoÅ”os modeļus, lai jaunais satura veids bÅ«tu labāks.

Es jums pastāstÄ«Å”u, kā mēs Ŕīs problēmas atrisinājām.

Kandidātu atlase

Kā dažās milisekundēs samazināt izskatāmo dokumentu skaitu tÅ«kstoÅ”iem reižu, praktiski nepasliktinot ranžēŔanas kvalitāti?

Pieņemsim, ka mēs apmācÄ«jām daudzus ML modeļus, Ä£enerējām lÄ«dzekļus, pamatojoties uz tiem, un apmācām citu modeli, kas sarindo dokumentus lietotāja vajadzÄ«bām. Viss bÅ«tu kārtÄ«bā, bet nevar vienkārÅ”i paņemt un aprēķināt visas zÄ«mes visiem dokumentiem reāllaikā, ja Å”o dokumentu ir miljoniem, un ieteikumi ir jāsagatavo 100-200 ms. Uzdevums ir no miljoniem atlasÄ«t noteiktu apakÅ”kopu, kas lietotājam tiks sarindota. Å o posmu parasti sauc par kandidātu atlasi. Tam ir vairākas prasÄ«bas. Pirmkārt, atlasei jānotiek ļoti ātri, lai pēc iespējas vairāk laika paliktu paÅ”am reitingam. Otrkārt, ievērojami samazinot ranžējamo dokumentu skaitu, mums pēc iespējas pilnÄ«gāk jāsaglabā lietotājam svarÄ«gie dokumenti.

MÅ«su kandidātu atlases princips ir attÄ«stÄ«jies, un Å”obrÄ«d esam nonākuÅ”i pie daudzpakāpju shēmas:

Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma

Pirmkārt, visi dokumenti tiek sadalÄ«ti grupās, un no katras grupas tiek ņemti populārākie dokumenti. Grupas var bÅ«t vietnes, tēmas, kopas. Katram lietotājam, pamatojoties uz viņa vēsturi, tiek atlasÄ«tas viņam tuvākās grupas un no tām tiek ņemti labākie dokumenti. Mēs arÄ« izmantojam kNN indeksu, lai atlasÄ«tu dokumentus, kas ir vistuvāk lietotājam reāllaikā. Ir vairākas metodes kNN indeksa izveidoÅ”anai; mÅ«su darbojās vislabāk HNSW (Hierarhiski navigējami mazās pasaules grafiki). Å is ir hierarhisks modelis, kas ļauj dažu milisekundēs atrast lietotājam N tuvākos vektorus no miljonu datu bāzes. Vispirms mēs indeksējam visu mÅ«su dokumentu datubāzi bezsaistē. Tā kā meklÄ“Å”ana indeksā darbojas diezgan ātri, ja ir vairākas spēcÄ«gas iegulÅ”anas, varat izveidot vairākus indeksus (katrai iegulÅ”anai vienu indeksu) un piekļūt katram no tiem reāllaikā.

Mums joprojām ir desmitiem tÅ«kstoÅ”u dokumentu katram lietotājam. Tas joprojām ir daudz, lai uzskaitÄ«tu visas funkcijas, tāpēc Å”ajā posmā mēs izmantojam vieglo klasifikāciju ā€” vieglu, smagsvara modeli ar mazākām funkcijām. Uzdevums ir paredzēt, kuri dokumenti smagajam modelim bÅ«s topā. Dokumenti ar augstāko prognozētāju tiks izmantoti smagajā modelÄ«, tas ir, pēdējā ranžēŔanas posmā. Å Ä« pieeja ļauj samazināt lietotājam paredzēto dokumentu datubāzi no miljoniem lÄ«dz tÅ«kstoÅ”iem desmitos milisekundēs.

ALS solis izpildlaikā

Kā ņemt vērā lietotāju atsauksmes uzreiz pēc klikŔķa?

SvarÄ«gs faktors ieteikumos ir reakcijas laiks uz lietotāju atsauksmēm. ÄŖpaÅ”i svarÄ«gi tas ir jaunajiem lietotājiem: kad cilvēks tikko sāk lietot ieteikumu sistēmu, viņŔ saņem nepersonalizētu dažādu tēmu dokumentu plÅ«smu. TiklÄ«dz viņŔ veic pirmo klikŔķi, jums tas nekavējoties jāņem vērā un jāpielāgojas viņa interesēm. Ja visus faktorus aprēķināsiet bezsaistē, ātra sistēmas reakcija kļūs neiespējama kavÄ“Å”anās dēļ. Tāpēc lietotāja darbÄ«bas ir jāapstrādā reāllaikā. Å iem nolÅ«kiem mēs izmantojam ALS darbÄ«bu izpildlaikā, lai izveidotu lietotāja vektora attēlojumu.

Pieņemsim, ka mums ir vektora attēlojums visiem dokumentiem. Piemēram, mēs varam izveidot iegulÅ”anu bezsaistē, pamatojoties uz raksta tekstu, izmantojot ELMo, BERT vai citus maŔīnmācÄ«Å”anās modeļus. Kā mēs varam iegÅ«t vektora attēlojumu lietotājiem tajā paŔā telpā, pamatojoties uz viņu mijiedarbÄ«bu sistēmā?

Lietotāja-dokumenta matricas veidoÅ”anas un sadalÄ«Å”anas vispārÄ«gais principsÄ»aujiet mums bÅ«t m lietotāju un n dokumentu. Dažiem lietotājiem ir zināma viņu saistÄ«ba ar noteiktiem dokumentiem. Tad Å”o informāciju var attēlot kā mxn matricu: rindas atbilst lietotājiem, bet kolonnas atbilst dokumentiem. Tā kā persona nav redzējusi lielāko daļu dokumentu, lielākā daļa matricas Ŕūnu paliks tukÅ”as, bet citas tiks aizpildÄ«tas. Katram notikumam (patÄ«k, nepatÄ«k, klikŔķi) matricā ir norādÄ«ta kāda vērtÄ«ba, taču apskatÄ«sim vienkārÅ”otu modeli, kurā atzÄ«me PatÄ«k atbilst 1, bet NepatÄ«k atbilst -1.

SadalÄ«sim matricu divās daļās: P (mxd) un Q (dxn), kur d ir vektora attēlojuma dimensija (parasti neliels skaitlis). Tad katrs objekts atbildÄ«s d-dimensijas vektoram (lietotājam - rinda matricā P, dokumentam - kolonna matricā Q). Å ie vektori bÅ«s atbilstoÅ”o objektu ieguljumi. Lai paredzētu, vai lietotājam patiks dokuments, varat vienkārÅ”i pavairot to iegulÅ”anu.

Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma
Viens no iespējamiem matricas sadalÄ«Å”anas veidiem ir ALS (AlternatÄ«vie mazākie kvadrāti). Mēs optimizēsim Ŕādu zaudējumu funkciju:

Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma

Šeit rui ir lietotāja u mijiedarbība ar dokumentu i, qi ir dokumenta i vektors, pu ir lietotāja u vektors.

Tad analÄ«tiski tiek atrasts optimālais lietotāja vektors no vidējās kvadrātiskās kļūdas viedokļa (fiksētiem dokumentu vektoriem), risinot atbilstoÅ”o lineāro regresiju.

To sauc par "ALS soli". Un pats ALS algoritms ir tāds, ka mēs pārmaiņus labojam vienu no matricām (lietotājus un rakstus) un atjaunojam otru, atrodot optimālo risinājumu.

Par laimi, lietotāja vektora attēlojuma atraÅ”ana ir diezgan ātra darbÄ«ba, ko var veikt izpildes laikā, izmantojot vektora instrukcijas. Å is triks ļauj nekavējoties ņemt vērā lietotāju atsauksmes ranžēŔanā. To paÅ”u iegulÅ”anu var izmantot kNN indeksā, lai uzlabotu kandidātu atlasi.

Izkliedētā sadarbÄ«bas filtrÄ“Å”ana

Kā veikt pakāpenisku sadalītu matricu faktorizāciju un ātri atrast jaunu rakstu vektora attēlus?

Saturs nav vienÄ«gais ieteikumu signālu avots. Vēl viens svarÄ«gs avots ir sadarbÄ«bas informācija. Labas ranžēŔanas pazÄ«mes tradicionāli var iegÅ«t, sadalot lietotāja-dokumenta matricu. Bet, mēģinot veikt Ŕādu sadalÄ«Å”anu, mēs saskārāmies ar problēmām:

1. Mums ir miljoniem dokumentu un desmitiem miljonu lietotāju. Matrica pilnībā neiederas vienā maŔīnā, un sadalīŔanās prasīs ļoti ilgu laiku.
2. Lielākajai daļai sistēmas satura ir Ä«ss kalpoÅ”anas laiks: dokumenti paliek aktuāli tikai dažas stundas. Tāpēc ir nepiecieÅ”ams pēc iespējas ātrāk izveidot to vektora attēlojumu.
3. Ja dekompozÄ«cija tiks izveidota uzreiz pēc dokumenta publicÄ“Å”anas, pietiekamam skaitam lietotāju nebÅ«s laika to novērtēt. Tāpēc tā vektora attēlojums, visticamāk, nebÅ«s ļoti labs.
4. Ja lietotājam patīk vai nepatīk, mēs nevarēsim to uzreiz ņemt vērā sadalē.

Lai atrisinātu Ŕīs problēmas, mēs ieviesām izplatÄ«tu lietotāja dokumenta matricas sadalÄ«Å”anu ar biežiem pakāpeniskiem atjauninājumiem. Kā tieÅ”i tas darbojas?

Pieņemsim, ka mums ir N maŔīnu klasteris (N ir simtos) un mēs vēlamies uz tām veikt sadalÄ«tu matricas sadalÄ«Å”anu, kas neietilpst vienā maŔīnā. Jautājums ir, kā veikt Å”o sadalÄ«Å”anu, lai, no vienas puses, bÅ«tu pietiekami daudz datu par katru maŔīnu un, no otras puses, lai aprēķini bÅ«tu neatkarÄ«gi?

Kā mēs strādājam pie ieteikumu atlases kvalitātes un ātruma

Mēs izmantosim iepriekÅ” aprakstÄ«to ALS sadalÄ«Å”anas algoritmu. ApskatÄ«sim, kā veikt vienu ALS soli sadalÄ«tā veidā - pārējās darbÄ«bas bÅ«s lÄ«dzÄ«gas. Pieņemsim, ka mums ir fiksēta dokumentu matrica un mēs vēlamies izveidot lietotāju matricu. Lai to izdarÄ«tu, mēs to sadalÄ«sim N daļās pa rindām, katrā daļā bÅ«s aptuveni vienāds rindu skaits. Katrai maŔīnai nosÅ«tÄ«sim atbilstoÅ”o rindu netukÅ”as Ŕūnas, kā arÄ« dokumentu iegulÅ”anas matricu (pilnÄ«bā). Tā kā tā izmērs nav ļoti liels un lietotāja dokumentu matrica parasti ir ļoti reta, Å”ie dati iederēsies parastajā maŔīnā.

Å o triku var atkārtot vairākos laikmetos, lÄ«dz modelis saplÅ«st, mainot fiksēto matricu pa vienam. Bet pat tad matricas sadalÄ«Å”anās var ilgt vairākas stundas. Un tas neatrisina problēmu, ka jums ātri jāsaņem jaunu dokumentu ieguljumi un jāatjaunina to ieguljumi, par kuriem, veidojot modeli, bija maz informācijas.

Mums palÄ«dzēja ātru pakāpenisku modeļu atjauninājumu ievieÅ”ana. Pieņemsim, ka mums ir paÅ”laik apmācÄ«ts modelis. KopÅ” viņas apmācÄ«bas ir bijuÅ”i jauni raksti, ar kuriem mÅ«su lietotāji ir mijiedarbojuÅ”ies, kā arÄ« raksti, ar kuriem apmācÄ«bas laikā bija maz mijiedarbÄ«bas. Lai ātri iegÅ«tu Ŕādu rakstu iegulÅ”anas, mēs izmantojam lietotāja iegulÅ”anas, kas iegÅ«tas modeļa pirmajā lielajā apmācÄ«bā, un veicam vienu ALS soli, lai aprēķinātu dokumenta matricu ar fiksētu lietotāja matricu. Tas ļauj diezgan ātri saņemt iegulumus ā€” dažu minÅ«Å”u laikā pēc dokumenta publicÄ“Å”anas ā€” un bieži atjaunināt neseno dokumentu iegulumus.

Lai sniegtu ieteikumus, nekavējoties jāņem vērā cilvēku darbÄ«bas, izpildlaikā mēs neizmantojam bezsaistē iegÅ«tos lietotāju iegulÅ”anas. Tā vietā mēs veicam ALS darbÄ«bu un iegÅ«stam faktiskā lietotāja vektoru.

Pārsūtīt uz citu domēna apgabalu

Kā izmantot lietotāju atsauksmes par teksta rakstiem, lai izveidotu videoklipa vektora attēlojumu?

Sākotnēji mēs ieteicām tikai teksta rakstus, tāpēc daudzi mÅ«su algoritmi ir pielāgoti Ŕāda veida saturam. Bet, pievienojot cita veida saturu, mēs saskārāmies ar nepiecieÅ”amÄ«bu pielāgot modeļus. Kā mēs atrisinājām Å”o problēmu, izmantojot video piemēru? Viena iespēja ir pārmācÄ«t visus modeļus no nulles. Bet tas prasa ilgu laiku, un daži algoritmi prasa apmācÄ«bas parauga lielumu, kas vēl nav pieejams vajadzÄ«gajā daudzumā jauna veida saturam pirmajos pakalpojuma darbÄ«bas mirkļos.

Mēs izvēlējāmies citu ceļu un atkārtoti izmantojām teksta modeļus videoklipam. Tas pats ALS triks mums palÄ«dzēja izveidot videoklipu vektora attēlus. Mēs izveidojām lietotāju vektora attēlojumu, pamatojoties uz teksta rakstiem, un veicām ALS darbÄ«bu, izmantojot video skata informāciju. Tātad mēs viegli ieguvām video vektora attēlojumu. Un izpildlaikā mēs vienkārÅ”i aprēķinām tuvumu starp lietotāja vektoru, kas iegÅ«ts no teksta rakstiem, un video vektoru.

Secinājums

Reāllaika ieteikumu sistēmas kodola izstrāde ir saistÄ«ta ar daudzām problēmām. Lai efektÄ«vi izmantotu Å”os datus, jums ir ātri jāapstrādā dati un jāpiemēro ML metodes; izveidot sarežģītas sadalÄ«tas sistēmas, kas spēj apstrādāt lietotāja signālus un jaunas satura vienÄ«bas minimālā laikā; un daudzi citi uzdevumi.

PaÅ”reizējā sistēmā, kuras dizainu es aprakstÄ«ju, ieteikumu kvalitāte lietotājam aug lÄ«dz ar viņa aktivitāti un uzturÄ“Å”anās ilgumu pakalpojumā. Bet, protams, Å”eit slēpjas galvenās grÅ«tÄ«bas: sistēmai ir grÅ«ti uzreiz saprast tādas personas intereses, kam ir maza mijiedarbÄ«ba ar saturu. MÅ«su galvenais mērÄ·is ir uzlabot ieteikumus jauniem lietotājiem. Turpināsim optimizēt algoritmus, lai viņa plÅ«smā ātrāk nonāktu cilvēkam aktuāls saturs un netiktu rādÄ«ts neatbilstoÅ”s saturs.

Avots: www.habr.com

Pievieno komentāru