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.
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:
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
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.
Viens no iespÄjamiem matricas sadalÄ«Å”anas veidiem ir ALS (AlternatÄ«vie mazÄkie kvadrÄti). MÄs optimizÄsim Å”Ädu zaudÄjumu funkciju:
Å 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?
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