Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii

Mi chjamu Pavel Parkhomenko, sò un sviluppatore ML. In questu articulu, vogliu parlà di a struttura di u serviziu Yandex.Zen è sparte e migliure tecniche, l'implementazione di quale hà permessu di aumentà a qualità di i cunsiglii. Da questu post amparate cumu truvà i più pertinenti per l'utilizatori trà milioni di documenti in pocu millisecondi; cumu fà a descomposizione cuntinua di una grande matrice (custituita da milioni di culonni è decine di milioni di fila) per chì i novi documenti ricevenu u so vettore in decine di minuti; cumu riutilizà a descomposizione di a matrice di l'articulu di l'utilizatori per uttene una bona rapprisintazioni vettoriali per u video.

Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii

A nostra basa di dati di ricunniscenza cuntene milioni di documenti di diversi formati: articuli di testu creati nantu à a nostra piattaforma è pigliati da siti esterni, video, narrazioni è brevi posti. U sviluppu di un tali serviziu hè assuciatu cù un gran numaru di sfide tecniche. Eccu alcuni di elli:

  • Divide i compiti di l'informatica: fate tutte e operazioni pesanti offline, è in tempu reale eseguite solu l'applicazione rapida di mudelli per esse rispunsevuli di 100-200 ms.
  • Pigliate rapidamente in contu l'azzioni di l'utilizatori. Per fà questu, hè necessariu chì tutti l'avvenimenti sò immediatamente consegnati à u recomendatore è influenzanu i risultati di i mudelli.
  • Fate l'alimentazione in modu chì per i novi utilizatori si adatta rapidamente à u so cumpurtamentu. E persone chì sò appena unitu à u sistema duveranu sente chì i so feedback influenzanu i cunsiglii.
  • Capisce rapidamente à quale ricumandemu un novu articulu.
  • Rispondi rapidamente à l'emergenza constante di novu cuntenutu. Decine di millaie d'articuli sò publicati ogni ghjornu, è assai di elli anu una vita limitata (per dì, nutizie). Questu hè ciò chì li distingue da i filmi, a musica è altri cuntenutu longu è caru per creà.
  • Trasferisce a cunniscenza da una zona di duminiu à l'altru. Se un sistema di ricunniscenza hà furmatu mudelli per l'articuli di testu è aghjunghjenu video à questu, pudemu reutilizà i mudelli esistenti per chì u novu tipu di cuntenutu si classificà megliu.

Vi dicu cumu avemu risoltu sti prublemi.

Selezzione di i candidati

Cumu riduce u nùmeru di documenti in cunsiderazione da millaie di volte in uni pochi di millisecondi, cù quasi nisuna deteriorazione in a qualità di u ranking?

Eppo supponimu chì avemu furmatu parechji mudelli ML, generatu funzioni basati nantu à elli, è furmatu un altru mudellu chì classifica i documenti per l'utilizatore. Tuttu saria bè, ma ùn pudete micca solu piglià è calculà tutti i segni per tutti i ducumenti in tempu reale, s'ellu ci sò milioni di sti documenti, è i cunsiglii deve esse custruitu in 100-200 ms. U compitu hè di selezziunà un certu subset da milioni, chì serà classificatu per l'utilizatore. Questa tappa hè generalmente chjamata selezzione di candidati. Ci hè parechje esigenze per questu. Prima, a selezzione deve accade assai rapidamente, perchè u più tempu pussibule per u ranking stessu. Siconda, avè riduciutu assai u numeru di documenti per a classificazione, duvemu priservà i documenti pertinenti per l'utilizatore cum'è cumpletamente pussibule.

U nostru principiu di selezzione di candidati hà evolutu, è in u mumentu avemu ghjuntu à un schema multi-stadi:

Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii

Prima, tutti i documenti sò spartuti in gruppi, è i documenti più populari sò pigliati da ogni gruppu. I gruppi ponu esse siti, temi, clusters. Per ogni utilizatore, basatu annantu à a so storia, i gruppi più vicinu à ellu sò selezziunati è i più boni documenti sò pigliati da elli. Avemu ancu aduprà l'indici kNN per selezziunà i documenti chì sò più vicinu à l'utilizatore in tempu reale. Ci hè parechje metudi per custruisce un indice kNN; u nostru hà travagliatu megliu HNSW (Grafichi gerarchici Navigable Small World). Questu hè un mudellu gerarchicu chì permette di truvà l'N vettori più vicini per un utilizatore da una basa di dati di milioni in pochi millisecondi. Indiciamo prima tutta a nostra basa di dati di documenti offline. Siccomu a ricerca in l'indici funziona abbastanza rapidamente, se ci sò parechje incrustazioni forti, pudete creà parechji indici (un indici per ogni incrustazione) è accede à ognunu in tempu reale.

Avemu sempre decine di millaie di documenti per ogni utilizatore. Questu hè sempre assai per cuntà tutte e funziunalità, cusì in questa tappa usemu una classificazione ligera - un mudellu di classificazione pesante ligeru cù menu caratteristiche. U compitu hè di predichendu chì documenti un mudellu pesante averà in cima. I ducumenti cù u più altu predictore seranu utilizati in u mudellu pisanti, vale à dì à l'ultima tappa di u ranking. Stu approcciu permette di riduce a basa di dati di documenti cunsiderati per l'utilizatore da milioni à millaie in decine di millisecondi.

Passu ALS in runtime

Cumu piglià in contu i feedback di l'utilizatori immediatamente dopu un clic?

Un fattore impurtante in i cunsiglii hè u tempu di risposta à i feedback di l'utilizatori. Questu hè soprattuttu impurtante per i novi utilizatori: quandu una persona principia solu à utilizà u sistema di ricunniscenza, riceve un feed micca persunalizatu di documenti di diversi temi. Appena ellu faci u primu clicu, avete bisognu à piglià immediatamente in contu di questu è adattà à i so interessi. Se calcule tutti i fatturi offline, una risposta rapida di u sistema diventerà impussibile per via di u ritardu. Dunque hè necessariu di processà l'azzioni di l'utilizatori in tempu reale. Per questi scopi, usemu u passu ALS in runtime per custruisce una rappresentazione vettoriale di l'utilizatore.

Assumimu chì avemu una rapprisintazioni vettoriali per tutti i documenti. Per esempiu, pudemu custruisce embeddings offline basatu annantu à u testu di un articulu utilizendu ELMo, BERT o altri mudelli di machine learning. Cumu pudemu ottene una rapprisintazioni vettoriali di l'utilizatori in u stessu spaziu basatu nantu à e so interazzione in u sistema?

Principiu generale di furmazione è di cumpusizioni di a matrice di l'utilizatori-documentuAvemu m utilizatori è n documenti. Per certi utilizatori, a so relazione cù certi documenti hè cunnisciuta. Allora sta infurmazione pò esse rapprisintata cum'è una matrice m x n: e fila currispondenu à l'utilizatori, è e culonne currispondenu à i ducumenti. Siccomu a persona ùn hà micca vistu a maiò parte di i ducumenti, a maiò parte di e cellule di a matrice restanu viote, mentre chì l'altri seranu pieni. Per ogni avvenimentu (cum'è, dislike, clic) qualchì valore hè furnitu in a matrice - ma cunsideremu un mudellu simplificatu in quale un like currisponde à 1, è un dislike currisponde à -1.

Scompone a matrice in dui: P (m x d) è Q (d x n), induve d hè a dimensione di a rapprisintazioni vettoriali (di solitu un picculu numeru). Allora ogni ughjettu currisponde à un vettore d-dimensionale (per un utilizatore - una fila in a matrice P, per un documentu - una colonna in a matrice Q). Questi vettori seranu l'embeddings di l'uggetti currispundenti. Per predichendu se un utilizatore piacerà un documentu, pudete simpricimenti multiplicà e so incrustazioni.

Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii
Unu di i modi pussibuli per decompone una matrice hè ALS (Alternating Least Squares). Ottimisimu a seguente funzione di perdita:

Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii

Qui rui è l'interazione dell'utente u con il documento i, qi è il vettore del documento i, pu è il vettore dell'utente u.

Allora u vettore ottimali di l'utilizatori da u puntu di vista di l'errore quadratu mediu (per i vettori di documentu fissi) si trova analiticamente risolvendu a regressione lineale currispundente.

Questu hè chjamatu "passu ALS". È l'algoritmu di l'ALS stessu hè chì alternate solu una di e matrici (utilizatori è articuli) è aghjurnà l'altru, truvendu a suluzione ottima.

Fortunatamente, truvà a rapprisintazioni vettoriali di l'utilizatori hè una operazione abbastanza veloce chì pò esse fatta in runtime usendu struzzioni vettoriali. Stu truccu permette di piglià immediatamente in contu i feedback di l'utilizatori in u ranking. U listessu incrustu pò esse usatu in l'indici kNN per migliurà a selezzione di candidati.

Filtrazione Cullaburazione Distribuita

Cumu fà a factorizazione di matrice distribuita incrementale è truvà rapidamente rapprisentazione vettoriali di novi articuli?

U cuntenutu ùn hè micca l'unica fonte di signali di raccomandazione. Un'altra fonte impurtante hè l'infurmazione cullaburazione. E boni funzioni di classificazione ponu esse tradizionalmente ottenute da a descomposizione di a matrice di l'utilizatori-documentu. Ma quandu pruvate à fà una tale descomposizione, avemu scontru prublemi:

1. Avemu milioni di ducumenti è decine di milioni di utilizatori. A matrice ùn si mette micca sanu à una macchina, è a descomposizione duverà assai tempu.
2. A maiò parte di u cuntenutu in u sistema hà una vita curta: i ducumenti restanu pertinenti per uni pochi d'ore. Dunque, hè necessariu di custruisce a so rapprisintazioni vettoriali u più prestu pussibule.
3. Se custruite una descomposizione subitu dopu chì u documentu hè publicatu, un numeru suffirenziu d'utilizatori ùn avarà micca tempu per evaluà. Dunque, a so rapprisintazioni vettoriali ùn serà micca assai bona.
4. Se un utilizatore piace o dislike, ùn pudemu micca piglià immediatamente in contu in a descomposizione.

Per risolve questi prublemi, avemu implementatu una descomposizione distribuita di a matrice di u documentu di l'utilizatori cù frequenti aghjurnamenti incrementali. Cumu funziona esattamente?

Suppone chì avemu un cluster di N machini (N hè in cintunari) è vulemu fà una descomposizione distribuita di una matrice nantu à elli chì ùn si mette micca in una macchina. A quistione hè cumu fà sta descomposizione per chì, da una banda, ci hè abbastanza dati nantu à ogni macchina è, da l'altru, per chì i calculi sò indipindenti?

Cumu travaglià nantu à a qualità è a rapidità di selezzione di cunsiglii

Avemu aduprà l'algoritmu di descomposizione ALS descritta sopra. Fighjemu cumu eseguisce un passu ALS in una manera distribuita - u restu di i passi seranu simili. Dicemu chì avemu una matrice fissa di documenti è vulemu custruisce una matrice d'utilizatori. Per fà questu, avemu da divisu in N parte per linee, ogni parte cuntene apprussimatamente u listessu numeru di linii. Manderemu à ogni machina cellule non vacanti di e fila currispundenti, è ancu a matrice di embeddings di documentu (interamente). Siccomu a so dimensione ùn hè micca assai grande, è a matrice di u documentu di l'utilizatori hè generalmente assai sparsa, sta dati si mette in una macchina regulare.

Stu truccu pò esse ripetutu annantu à parechje epoche finu à chì u mudellu cunverge, alternendu a matrice fissa una per una. Ma ancu allora, a descomposizione di a matrice pò piglià parechje ore. È questu ùn risolve micca u prublema chì avete bisognu di riceve rapidamente embeddings di novi documenti è aghjurnà l'embeddings di quelli chì ci era pocu infurmazione quandu custruisce u mudellu.

L'intruduzioni di l'aghjurnamenti veloci di mudelli incrementali ci hà aiutatu. Diciamu chì avemu un mudellu attualmente furmatu. Dapoi a so furmazione, ci sò stati novi articuli chì i nostri utilizatori anu interazzione cù, è ancu articuli chì avianu pocu interazzione durante a furmazione. Per ottene rapidamente l'embeddings di tali articuli, usemu l'embeddings d'utilizatori ottenuti durante a prima grande furmazione di u mudellu è fate un passu ALS per calculà a matrice di documentu datu una matrice d'utilizatore fissa. Questu permette di riceve embeddings abbastanza rapidamente - in pochi minuti dopu chì u documentu hè publicatu - è spessu aghjurnà l'embeddings di documenti recenti.

Per fà cunsiglii immediatamente pigliate in contu l'azzioni umani, in runtime ùn usemu micca embeddings d'utilizatori ottenuti offline. Invece, facemu un passu ALS è uttene u vettore di l'utilizatore attuale.

Trasfirimentu à un altru spaziu di duminiu

Cumu aduprà u feedback di l'utilizatori nantu à l'articuli di testu per custruisce una rappresentazione vettoriale di un video?

In principiu, avemu cunsigliatu solu articuli di testu, cusì parechji di i nostri algoritmi sò adattati à stu tipu di cuntenutu. Ma quandu aghjunghjenu altri tipi di cuntenutu, avemu avutu affruntatu cù a necessità di adattà i mudelli. Cumu risolvemu stu prublema cù un esempiu video? Una opzione hè di ricuperà tutti i mudelli da zero. Ma questu pigghia assai tempu, è alcuni di l'algoritmi sò esigenti nantu à a dimensione di a mostra di furmazione, chì ùn hè ancu dispunibule in a quantità necessaria per un novu tipu di cuntenutu in i primi mumenti di a so vita nantu à u serviziu.

Avemu andatu in l'altru modu è riutilizate i mudelli di testu per u video. U stessu truccu ALS ci hà aiutatu à creà rapprisentazione vettoriali di video. Avemu pigliatu una rapprisintazioni vettoriali di l'utilizatori basatu nantu à l'articuli di testu è avemu fattu un passu ALS utilizendu l'infurmazioni di vista video. Cusì avemu facilmente una rapprisintazioni vettoriali di u video. È in runtime avemu solu calculà a vicinanza trà u vettore d'utilizatore ottenutu da l'articuli di testu è u vettore video.

cunchiusioni

Sviluppà u core di un sistema di raccomandazione in tempu reale implica parechje sfide. Avete bisognu di trasfurmà rapidamente e dati è applicà i metudi ML per utilizà sti dati in modu efficace; custruì sistemi distribuiti cumplessi capaci di processà i signali di l'utilizatori è novi unità di cuntenutu in un tempu minimu; è parechje altre attività.

In u sistema attuale, u disignu di quale aghju descrittu, a qualità di ricunniscenza per l'utilizatori cresce cù a so attività è a durata di a permanenza in u serviziu. Ma sicuru, quì si trova a difficultà principale: hè difficiule per u sistema di capisce immediatamente l'interessi di una persona chì hà pocu interazzione cù u cuntenutu. A migliurà i cunsiglii per i novi utilizatori hè u nostru scopu chjave. Continueremu à ottimisà l'algoritmi per chì u cuntenutu chì hè pertinenti per una persona entra in u so feed più veloce, è u cuntenutu irrilevante ùn hè micca mostratu.

Source: www.habr.com

Add a comment