Kako delamo na kakovosti in hitrosti izbora priporočil

Moje ime je Pavel Parkhomenko, sem razvijalec ML. V tem članku bi rad govoril o strukturi storitve Yandex.Zen in delil tehnične izboljšave, katerih izvajanje je omogočilo povečanje kakovosti priporočil. Iz te objave se boste naučili, kako med milijoni dokumentov v le nekaj milisekundah poiskati tiste, ki so najbolj relevantni za uporabnika; kako narediti neprekinjeno dekompozicijo velike matrike (sestavljene iz milijonov stolpcev in več deset milijonov vrstic), tako da novi dokumenti prejmejo svoj vektor v desetinah minut; kako ponovno uporabiti dekompozicijo matrike uporabnik-članek, da dobimo dobro vektorsko predstavitev za video.

Kako delamo na kakovosti in hitrosti izbora priporočil

Naša zbirka podatkov o priporočilih vsebuje milijone dokumentov različnih formatov: besedilne članke, ustvarjene na naši platformi in vzete z zunanjih spletnih mest, videoposnetke, pripovedi in kratke objave. Razvoj tovrstne storitve je povezan z velikim številom tehničnih izzivov. Tukaj je nekaj izmed njih:

  • Razdelite računalniške naloge: vse težke operacije izvajajte brez povezave in v realnem času izvajajte samo hitro uporabo modelov, da boste odgovorni za 100–200 ms.
  • Hitro upoštevajte dejanja uporabnikov. Za to je potrebno, da so vsi dogodki takoj dostavljeni priporočevalcu in vplivajo na rezultate modelov.
  • Naredite vir tako, da se za nove uporabnike hitro prilagodi njihovemu vedenju. Ljudje, ki so se pravkar pridružili sistemu, bi morali čutiti, da njihove povratne informacije vplivajo na priporočila.
  • Hitro ugotovite, komu priporočiti nov članek.
  • Hitro se odzovite na nenehno pojavljanje novih vsebin. Vsak dan je objavljenih na desettisoče člankov, mnogi med njimi imajo omejeno življenjsko dobo (recimo novice). To jih razlikuje od filmov, glasbe in drugih dolgotrajnih in za ustvarjanje dragih vsebin.
  • Prenos znanja z enega domenskega področja na drugega. Če ima priporočilni sistem usposobljene modele za besedilne članke in mu dodamo video, lahko ponovno uporabimo obstoječe modele, tako da se nova vrsta vsebine bolje uvrsti.

Povedal vam bom, kako smo rešili te težave.

Izbor kandidatov

Kako zmanjšati število obravnavanih dokumentov za tisočkrat v nekaj milisekundah, tako da se kakovost razvrščanja praktično ne poslabša?

Recimo, da smo usposobili veliko modelov ML, na njihovi podlagi ustvarili funkcije in usposobili drug model, ki razvršča dokumente za uporabnika. Vse bi bilo v redu, vendar ne morete preprosto vzeti in izračunati vseh znakov za vse dokumente v realnem času, če je teh dokumentov na milijone, priporočila pa je treba zgraditi v 100-200 ms. Naloga je med milijoni izbrati določeno podmnožico, ki bo razvrščena za uporabnika. Ta stopnja se običajno imenuje izbira kandidatov. Zanj obstaja več zahtev. Prvič, izbor mora potekati zelo hitro, da ostane čim več časa za samo uvrstitev. Drugič, po tem, ko smo močno zmanjšali število dokumentov za rangiranje, moramo dokumente, pomembne za uporabnika, čim bolj ohraniti.

Naše načelo izbire kandidatov se je razvilo in trenutno smo prišli do večstopenjske sheme:

Kako delamo na kakovosti in hitrosti izbora priporočil

Najprej so vsi dokumenti razdeljeni v skupine in iz vsake skupine so vzeti najbolj priljubljeni dokumenti. Skupine so lahko spletna mesta, teme, grozdi. Za vsakega uporabnika se na podlagi njegove zgodovine izberejo njemu najbližje skupine in iz njih vzamejo najboljše dokumente. Z indeksom kNN izbiramo tudi dokumente, ki so v realnem času najbližji uporabniku. Obstaja več metod za sestavo indeksa kNN; naša se je najbolje obnesla HNSW (Hierarchical Navigable Small World grafi). To je hierarhični model, ki vam omogoča, da poiščete N najbližjih vektorjev za uporabnika iz baze podatkov milijonov v nekaj milisekundah. Najprej indeksiramo celotno bazo dokumentov brez povezave. Ker iskanje po indeksu deluje precej hitro, lahko, če obstaja več močnih vdelav, ustvarite več indeksov (en indeks za vsako vdelavo) in do vsakega od njih dostopate v realnem času.

Še vedno imamo na desettisoče dokumentov za vsakega uporabnika. To je še vedno veliko za štetje vseh funkcij, zato na tej stopnji uporabljamo lahkotno razvrščanje – lahek model težkega razvrščanja z manj funkcijami. Naloga je predvideti, katere dokumente bo imel težki model na vrhu. Dokumenti z najvišjim napovednikom bodo uporabljeni v težkem modelu, to je na zadnji stopnji rangiranja. Ta pristop vam omogoča, da zmanjšate zbirko podatkov o dokumentih, ki jih uporabnik obravnava, z milijonov na tisoče v desetinah milisekund.

ALS korak v času izvajanja

Kako upoštevati odziv uporabnikov takoj po kliku?

Pomemben dejavnik pri priporočilih je odzivni čas na povratne informacije uporabnikov. To je še posebej pomembno za nove uporabnike: ko oseba šele začne uporabljati sistem priporočil, prejme nepersonaliziran vir dokumentov različnih tem. Takoj, ko naredi prvi klik, morate to takoj upoštevati in se prilagoditi njegovim interesom. Če vse faktorje izračunate brez povezave, bo hiter odziv sistema zaradi zakasnitve nemogoč. Uporabniška dejanja je torej potrebno obdelati v realnem času. Za te namene uporabljamo korak ALS med izvajanjem, da zgradimo vektorsko predstavitev uporabnika.

Predpostavimo, da imamo vektorsko predstavitev za vse dokumente. Na primer, lahko gradimo vdelave brez povezave na podlagi besedila članka z uporabo ELMo, BERT ali drugih modelov strojnega učenja. Kako lahko pridobimo vektorsko predstavitev uporabnikov v istem prostoru na podlagi njihovih interakcij v sistemu?

Splošni princip oblikovanja in dekompozicije matrike uporabniški dokumentNaj imamo m uporabnikov in n dokumentov. Za nekatere uporabnike je njihov odnos do določenih dokumentov znan. Nato lahko te informacije predstavimo kot matriko m x n: vrstice ustrezajo uporabnikom, stolpci pa dokumentom. Ker oseba večine dokumentov ni videla, bo večina matričnih celic ostala prazna, druge pa bodo zapolnjene. Za vsak dogodek (všeč mi je, nevšeč mi je, klik) je v matriki podana določena vrednost - vendar razmislimo o poenostavljenem modelu, v katerem všeček ustreza 1, nevšeček pa -1.

Razčlenimo matriko na dvoje: P (m x d) in Q (d x n), kjer je d dimenzija vektorske reprezentacije (običajno majhno število). Nato bo vsak predmet ustrezal d-dimenzionalnemu vektorju (za uporabnika - vrstica v matriki P, za dokument - stolpec v matriki Q). Ti vektorji bodo vdelave ustreznih predmetov. Če želite napovedati, ali bo uporabniku dokument všeč, lahko preprosto pomnožite njegove vdelave.

Kako delamo na kakovosti in hitrosti izbora priporočil
Eden od možnih načinov za razgradnjo matrike je ALS (izmenični najmanjši kvadrati). Optimizirali bomo naslednjo funkcijo izgube:

Kako delamo na kakovosti in hitrosti izbora priporočil

Tu je rui interakcija uporabnika u z dokumentom i, qi je vektor dokumenta i, pu je vektor uporabnika u.

Nato se z reševanjem ustrezne linearne regresije analitično najde optimalni uporabniški vektor z vidika srednje kvadratne napake (za fiksne vektorje dokumentov).

To se imenuje "korak ALS". In sam algoritem ALS je, da izmenično popravimo eno od matrik (uporabniki in članki) in posodobimo drugo ter poiščemo optimalno rešitev.

Na srečo je iskanje uporabnikove vektorske predstavitve precej hitra operacija, ki jo je mogoče izvesti med izvajanjem z uporabo vektorskih navodil. Ta trik vam omogoča, da povratne informacije uporabnikov takoj upoštevate pri razvrščanju. Enako vdelavo je mogoče uporabiti v indeksu kNN za izboljšanje izbire kandidatov.

Porazdeljeno sodelovalno filtriranje

Kako narediti faktorizacijo inkrementalne porazdeljene matrike in hitro najti vektorske predstavitve novih člankov?

Vsebina ni edini vir priporočilnih signalov. Drug pomemben vir so informacije o sodelovanju. Dobre značilnosti razvrščanja je mogoče tradicionalno pridobiti z dekompozicijo matrike uporabniški dokument. Ko pa smo poskušali izvesti takšno razgradnjo, smo naleteli na težave:

1. Imamo na milijone dokumentov in na desetine milijonov uporabnikov. Matrica se ne prilega v celoti na en stroj in razgradnja bo trajala zelo dolgo.
2. Večina vsebin v sistemu ima kratko življenjsko dobo: dokumenti ostanejo relevantni le nekaj ur. Zato je treba njihovo vektorsko predstavitev sestaviti čim hitreje.
3. Če sestavite dekompozicijo takoj po objavi dokumenta, zadostno število uporabnikov ne bo imelo časa, da bi ga ocenilo. Zato njegova vektorska predstavitev najverjetneje ne bo zelo dobra.
4. Če je uporabniku všeč ali ne, tega ne bomo mogli takoj upoštevati pri razčlenjevanju.

Da bi rešili te težave, smo implementirali porazdeljeno dekompozicijo matrike uporabniški dokument s pogostimi inkrementalnimi posodobitvami. Kako točno deluje?

Recimo, da imamo gručo N strojev (N jih je na stotine) in želimo na njih narediti porazdeljeno razgradnjo matrike, ki ne sodi na en stroj. Vprašanje je, kako to dekompozicijo izvesti tako, da bo po eni strani dovolj podatkov na vsakem stroju, po drugi pa da bodo izračuni neodvisni?

Kako delamo na kakovosti in hitrosti izbora priporočil

Uporabili bomo zgoraj opisani algoritem razgradnje ALS. Poglejmo, kako izvesti en korak ALS na porazdeljen način - ostali koraki bodo podobni. Recimo, da imamo fiksno matriko dokumentov in želimo zgraditi matriko uporabnikov. Za to ga bomo razdelili na N delov po vrsticah, vsak del bo vseboval približno enako število vrstic. Vsakemu stroju bomo poslali neprazne celice ustreznih vrstic, kot tudi matriko vdelanih dokumentov (v celoti). Ker njegova velikost ni zelo velika in je matrika uporabniškega dokumenta običajno zelo redka, se ti podatki prilegajo navadnemu stroju.

Ta trik se lahko ponavlja v več obdobjih, dokler se model ne konvergira, pri čemer se fiksna matrika menja eno za drugo. Toda tudi takrat lahko razgradnja matriksa traja več ur. In to ne reši težave, da morate hitro prejeti vdelave novih dokumentov in posodobiti vdelave tistih, o katerih je bilo pri gradnji modela malo informacij.

Pomagala nam je uvedba hitrih inkrementalnih posodobitev modela. Recimo, da imamo trenutno usposobljen model. Od njenega usposabljanja so bili novi članki, s katerimi so naši uporabniki komunicirali, pa tudi članki, ki so med usposabljanjem imeli malo interakcije. Za hitro pridobitev vdelav takih člankov uporabimo uporabniške vdelave, pridobljene med prvim večjim usposabljanjem modela, in izvedemo en korak ALS za izračun matrike dokumenta glede na fiksno uporabniško matriko. To vam omogoča, da prejmete vdelave precej hitro – v nekaj minutah po objavi dokumenta – in pogosto posodobite vdelave nedavnih dokumentov.

Da bi priporočila takoj upoštevala človeška dejanja, med izvajanjem ne uporabljamo uporabniških vdelav, pridobljenih brez povezave. Namesto tega naredimo korak ALS in dobimo dejanski uporabniški vektor.

Prenos na drugo domensko območje

Kako uporabiti povratne informacije uporabnikov o besedilnih člankih za izdelavo vektorske predstavitve videa?

Sprva smo priporočali samo besedilne članke, zato je veliko naših algoritmov prilagojenih tej vrsti vsebine. Pri dodajanju drugih vrst vsebin pa smo se soočili s potrebo po prilagajanju modelov. Kako smo rešili ta problem z video primerom? Ena od možnosti je prekvalifikacija vseh modelov iz nič. Toda to traja dolgo časa, nekateri algoritmi pa so zahtevni glede velikosti učnega vzorca, ki še ni na voljo v zahtevani količini za novo vrsto vsebine v prvih trenutkih njenega življenja na storitvi.

Šli smo v drugo smer in ponovno uporabili besedilne modele za video. Isti trik ALS nam je pomagal ustvariti vektorske predstavitve videoposnetkov. Vzeli smo vektorsko predstavitev uporabnikov na podlagi besedilnih člankov in naredili korak ALS z uporabo informacij o ogledu videa. Tako smo zlahka dobili vektorsko predstavitev videa. In med izvajanjem preprosto izračunamo bližino med uporabniškim vektorjem, pridobljenim iz besedilnih člankov, in video vektorjem.

Zaključek

Razvoj jedra sistema priporočil v realnem času vključuje številne izzive. Za učinkovito uporabo teh podatkov morate hitro obdelati podatke in uporabiti metode ML; zgraditi kompleksne porazdeljene sisteme, ki so zmožni obdelave uporabniških signalov in novih enot vsebine v minimalnem času; in številne druge naloge.

V trenutnem sistemu, katerega zasnovo sem opisal, kakovost priporočil za uporabnika raste skupaj z njegovo aktivnostjo in dolžino bivanja na storitvi. Seveda pa je tukaj glavna težava: sistemu je težko takoj razumeti interese osebe, ki ima malo interakcije z vsebino. Izboljšanje priporočil za nove uporabnike je naš ključni cilj. Nadaljevali bomo z optimizacijo algoritmov, da bo vsebina, ki je relevantna za osebo, hitreje prišla v njegov vir, nepomembna vsebina pa se ne bo prikazovala.

Vir: www.habr.com

Dodaj komentar