Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen

Mäin Numm ass Pavel Parkhomenko, ech sinn en ML Entwéckler. An dësem Artikel géif ech gär iwwer d'Struktur vum Yandex.Zen Service schwätzen an technesch Verbesserungen deelen, d'Ëmsetzung vun deenen et méiglech gemaach huet d'Qualitéit vun de Empfehlungen ze erhéijen. Vun dësem Post léiert Dir wéi Dir déi relevantst fir de Benotzer ënnert Millioune Dokumenter an nëmmen e puer Millisekonnen fannt; wéi eng kontinuéierlech Zersetzung vun enger grousser Matrix ze maachen (déi aus Millioune vu Sailen an Zénger vu Millioune Reihen besteet) sou datt nei Dokumenter hire Vektor an Zénger vu Minutten kréien; wéi Dir d'Benotzer-Artikel Matrix Zersetzung nei benotzt fir eng gutt Vektorrepresentatioun fir Video ze kréien.

Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen

Eis Empfehlungsdatenbank enthält Millioune Dokumenter vu verschiddene Formater: Textartikelen erstallt op eiser Plattform a vun externe Siten geholl, Videoen, narrativen a kuerze Posts. D'Entwécklung vun esou engem Service ass mat enger grousser Zuel vun techneschen Erausfuerderunge verbonnen. Hei sinn e puer vun hinnen:

  • Deelt Rechenaufgaben: maacht all schwéier Operatiounen offline, an Echtzäit nëmme séier Uwendung vu Modeller ausféieren fir verantwortlech ze sinn fir 100-200 ms.
  • Huelt séier Benotzeraktiounen Rechnung. Fir dëst ze maachen, ass et néideg datt all Eventer direkt un de Empfehler geliwwert ginn an d'Resultater vun de Modeller beaflossen.
  • Maacht de Feed sou datt fir nei Benotzer se séier un hiert Verhalen adaptéiert. Leit, déi just an de System ugeschloss sinn, sollten d'Gefill hunn datt hire Feedback Empfehlungen beaflosst.
  • Verstinn séier wien en neien Artikel ze recommandéieren.
  • Äntwert séier op déi konstant Entstoe vun neien Inhalt. Zéngdausende vun Artikelen ginn all Dag publizéiert, a vill vun hinnen hunn eng limitéiert Liewensdauer (soen, Neiegkeeten). Dëst ass wat se vu Filmer, Musek an aner laanglieweg an deier Inhalter ënnerscheet fir ze kreéieren.
  • Iwwerdroe Wëssen vun engem Domain Beräich an en anert. Wann e Empfehlungssystem Modeller fir Textartikelen ausgebilt huet a mir Video derbäi addéieren, kënne mir déi existéierend Modeller nei benotzen, sou datt déi nei Zort Inhalt besser klasséiert.

Ech wäert Iech soen wéi mir dës Problemer geléist hunn.

Auswiel vun de Kandidaten

Wéi reduzéiere mir d'Zuel vun den Dokumenter, déi berécksiichtegt ginn, duerch Dausende vun Mol an e puer Millisekonnen, mat quasi keng Verschlechterung vun der Qualitéit vum Ranking?

Ugeholl mir trainéiert vill ML Modeller, generéiert Fonctiounen baséiert op hinnen, an trainéiert en anere Modell deen Dokumenter fir de Benotzer rangéiert. Alles wier gutt, awer Dir kënnt net nëmmen all Schëlder fir all Dokumenter an Echtzäit huelen a berechnen, wann et Millioune vun dësen Dokumenter sinn, a Empfehlungen mussen an 100-200 MS gebaut ginn. D'Aufgab ass e bestëmmten Ënnerdeel aus Millioune ze wielen, dee fir de Benotzer klasséiert gëtt. Dës Etapp gëtt normalerweis Kandidatenauswiel genannt. Et gi verschidde Ufuerderungen dofir. Als éischt muss d'Auswiel ganz séier geschéien, sou datt sou vill wéi méiglech Zäit fir de Ranking selwer bleift. Zweetens, d'Zuel vun den Dokumenter fir de Ranking staark reduzéiert ze hunn, musse mir Dokumenter relevant fir de Benotzer sou komplett wéi méiglech erhaalen.

Eise Prinzip vun der Selektioun vu Kandidaten huet evoluéiert, an de Moment si mir zu engem Multi-Etapp Schema ukomm:

Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen

Als éischt ginn all Dokumenter a Gruppen opgedeelt, an déi populärste Dokumenter ginn aus all Grupp geholl. Gruppen kënne Siten, Themen, Cluster sinn. Fir all Benotzer, baséiert op senger Geschicht, ginn d'Gruppen am nootste bei him ausgewielt an déi bescht Dokumenter ginn aus hinnen geholl. Mir benotzen och den kNN Index fir Dokumenter ze wielen déi am nootste beim Benotzer an Echtzäit sinn. Et gi verschidde Methoden fir e kNN Index ze konstruéieren; eis huet am Beschten geschafft HNSW (Hierarchesch Navigéierbar Kleng Welt Grafiken). Dëst ass en hierarchesche Modell deen Iech erlaabt den N noosten Vecteure fir e Benotzer aus enger Datebank vu Millioune an e puer Millisekonnen ze fannen. Mir indexéieren als éischt eis ganz Dokumentdatenbank offline. Well d'Sich am Index ganz séier funktionnéiert, wann et e puer staark Embeddings gëtt, kënnt Dir e puer Indexen erstellen (een Index fir all Embedding) an op jiddereng vun hinnen an Echtzäit zougräifen.

Mir hunn nach zéngdausende vun Dokumenter fir all Benotzer. Dëst ass nach ëmmer vill fir all d'Features ze zielen, also op dëser Etapp benotze mir e liichte Ranking - e liichte schwéiere Rankingmodell mat manner Features. D'Aufgab ass virauszesoen wéi eng Dokumenter e schwéiere Modell am Top wäert hunn. Dokumenter mat dem héchste Prädiktor ginn am schwéiere Modell benotzt, dat heescht an der leschter Etapp vum Ranking. Dës Approche erlaabt Iech d'Datebank vun Dokumenter, déi fir de Benotzer ugesi ginn, vu Millioune bis Dausende an Zénger vu Millisekonnen ze reduzéieren.

ALS Schrëtt an der Runtime

Wéi berücksichtegt de Benotzer Feedback direkt no engem Klick?

E wichtege Faktor bei Empfehlungen ass d'Äntwertzäit op Benotzer Feedback. Dëst ass besonnesch wichteg fir nei Benotzer: wann eng Persoun just ufänkt de Empfehlungssystem ze benotzen, kritt hien en net personaliséierte Feed vun Dokumenter vu verschiddenen Themen. Soubal hien den éischte Klick mécht, musst Dir dat direkt berücksichtegen an un seng Interessen upassen. Wann Dir all Faktoren offline berechent, gëtt eng séier Systemreaktioun onméiglech wéinst der Verspéidung. Also ass et néideg Benotzeraktiounen an Echtzäit ze veraarbecht. Fir dës Zwecker benotze mir den ALS Schrëtt bei der Runtime fir eng Vektorvertriedung vum Benotzer ze bauen.

Loosst eis unhuelen datt mir eng Vektorvertriedung fir all Dokumenter hunn. Zum Beispill kënne mir Embeddings offline bauen baséiert op den Text vun engem Artikel mat ELMo, BERT oder aner Maschinnléiermodeller. Wéi kënne mir eng Vektorvertriedung vu Benotzer am selwechte Raum kréien op Basis vun hiren Interaktiounen am System?

Allgemeng Prinzip vun der Formatioun an Zersetzung vun der Benotzer-Dokument MatrixentgasungLoosst eis m Benotzer an n Dokumenter hunn. Fir e puer Benotzer ass hir Relatioun zu bestëmmten Dokumenter bekannt. Da kann dës Informatioun als mxn Matrix duergestallt ginn: Reihen entspriechen Benotzer, a Kolonnen entspriechen Dokumenter. Well d'Persoun déi meescht vun den Dokumenter net gesinn huet, bleiwen déi meescht Matrixzellen eidel, anerer ginn gefëllt. Fir all Event (wéi, net gär, klickt) gëtt e Wäert an der Matrix geliwwert - awer loosst eis e vereinfachte Modell betruechten, an deem e Like entsprécht 1, an en Dislike entsprécht -1.

Loosst eis d'Matrix an zwee zersetzen: P (mxd) a Q (dxn), wou d d'Dimensioun vun der Vektorrepresentatioun ass (normalerweis eng kleng Zuel). Dann entsprécht all Objet engem d-dimensionalen Vektor (fir e Benotzer - eng Zeil an der Matrix P, fir en Dokument - eng Kolonn an der Matrix Q). Dës Vecteure wäerten d'Inbedding vun den entspriechende Objeten sinn. Fir virauszesoen ob e Benotzer en Dokument gär hätt, kënnt Dir einfach seng Embeddings multiplizéieren.

Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen
Ee vun de méigleche Weeër fir eng Matrix ofzebauen ass ALS (Alternating Least Squares). Mir optimiséieren déi folgend Verloschtfunktioun:

Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen

Hei ass rui d'Interaktioun vum Benotzer u mam Dokument i, qi ass de Vektor vum Dokument i, pu ass de Vektor vum Benotzer u.

Da gëtt den optimale Benotzervektor aus der Siicht vum mëttlere Quadratfehler (fir fixen Dokumentvektoren) analytesch fonnt andeems Dir déi entspriechend linear Regressioun léist.

Dëst gëtt den "ALS Schrëtt" genannt. An den ALS Algorithmus selwer ass datt mir ofwiesselnd eng vun de Matrixen (Benotzer an Artikelen) fixéieren an déi aner aktualiséieren, déi optimal Léisung fannen.

Glécklecherweis ass d'Vektorvertriedung vum Benotzer eng zimlech séier Operatioun ze fannen déi während der Runtime mat Vektorinstruktioune ka gemaach ginn. Dësen Trick erlaabt Iech direkt Benotzer Feedback am Ranking Rechnung ze huelen. Déi selwecht Embedding kann am kNN Index benotzt ginn fir d'Kandidatauswiel ze verbesseren.

Verdeelt Kollaborativ Filteren

Wéi eng inkrementell verdeelt Matrixfaktoriséierung ze maachen a séier Vektorrepresentatioune vun neien Artikelen ze fannen?

Inhalt ass net déi eenzeg Quell vu Empfehlungssignaler. Eng aner wichteg Quell ass kollaborativ Informatioun. Gutt Ranking Features kënnen traditionell aus der Zersetzung vun der User-Dokument Matrix kritt ginn. Awer wann Dir probéiert esou eng Zersetzung ze maachen, hu mir Probleemer begéint:

1. Mir hunn Millioune vun Dokumenter an zéngdausende vu Millioune Benotzer. D'Matrix passt net ganz op enger Maschinn, an d'Zersetzung wäert ganz laang daueren.
2. De gréissten Deel vum Inhalt am System huet eng kuerz Liewensdauer: Dokumenter bleiwen nëmme fir e puer Stonnen relevant. Dofir ass et néideg hir Vektorrepresentatioun sou séier wéi méiglech ze konstruéieren.
3. Wann Dir eng Zersetzung direkt no der Verëffentlechung vum Dokument baut, wäert eng genuch Zuel vu Benotzer keng Zäit hunn et ze evaluéieren. Dofir wäert seng Vektorvertriedung héchstwahrscheinlech net ganz gutt sinn.
4. Wann e Benotzer gär oder net gär huet, kënne mir dat net direkt an der Zersetzung berücksichtegen.

Fir dës Problemer ze léisen, hu mir eng verdeelt Zersetzung vun der Benotzer-Dokument Matrix mat reegelméissegen inkrementellen Updates ëmgesat. Wéi genau funktionnéiert et?

Ugeholl datt mir e Stärekoup vun N Maschinnen hunn (N ass an den Honnerte) a mir wëllen eng verdeelt Zersetzung vun enger Matrix op hinnen maachen, déi net op enger Maschinn passt. D'Fro ass, wéi dës Zersetzung auszeféieren, sou datt op der enger Säit genuch Donnéeën op all Maschinn gëtt an op der anerer, sou datt d'Berechnungen onofhängeg sinn?

Wéi schaffen mir un der Qualitéit an der Geschwindegkeet vun der Auswiel vu Empfehlungen

Mir benotzen den ALS Zersetzungsalgorithmus hei uewen beschriwwen. Loosst eis kucken wéi een ALS Schrëtt op eng verdeelt Manéier ausféiert - de Rescht vun de Schrëtt wäerten ähnlech sinn. Loosst eis soen, mir hunn eng fix Matrix vun Dokumenter a mir wëllen eng Matrix vu Benotzer bauen. Fir dëst ze maachen, wäerte mir et an N Deeler vun Zeilen ënnerdeelen, all Deel wäert ongeféier déi selwecht Unzuel vun Zeilen enthalen. Mir schécken op all Maschinn net eidel Zellen vun de korrespondéierte Reihen, souwéi d'Matrix vun Dokumentebeddingen (ganz). Well seng Gréisst net ganz grouss ass, an d'Benotzer-Dokument Matrix ass normalerweis ganz sparsam, passt dës Donnéeën op eng normal Maschinn.

Dësen Trick kann iwwer verschidden Epochen widderholl ginn bis de Modell konvergéiert, ofwiesselnd déi fix Matrix een nom aneren. Awer och dann kann d'Matrix Zersetzung e puer Stonnen daueren. An dëst léist net de Problem datt Dir séier Embeddings vun neien Dokumenter muss kréien an d'Ebeddingen vun deenen aktualiséieren iwwer déi et wéineg Informatioun war beim Bau vum Modell.

D'Aféierung vu schnelle inkrementelle Modellupdates huet eis gehollef. Loosst eis soen datt mir en aktuell ausgebilte Modell hunn. Zënter hirer Ausbildung sinn et nei Artikelen mat deenen eis Benotzer interagéiert hunn, souwéi Artikelen déi wéineg Interaktioun wärend dem Training haten. Fir séier Embeddings vun esou Artikelen ze kréien, benotze mir d'Benotzer Embeddings, déi während der éischter grousser Formatioun vum Modell kritt goufen, a maachen een ALS Schrëtt fir d'Dokumentmatrix ze berechnen mat enger fixer Benotzermatrix. Dëst erlaabt Iech embeddings relativ séier ze kréien - bannent e puer Minutten nodeems d'Dokument publizéiert ass - an dacks d'Ebeddingen vun rezenten Dokumenter aktualiséieren.

Fir Empfehlungen direkt ze maachen, berécksiichtegt mënschlech Handlungen, an der Runtime benotze mir keng Benotzer Embeddings déi offline kritt ginn. Amplaz maache mir en ALS Schrëtt a kréien den aktuellen Benotzervektor.

Transfert an en anert Domain Beräich

Wéi benotzen ech Benotzerfeedback op Textartikelen fir eng Vektorrepresentatioun vun engem Video ze bauen?

Am Ufank hu mir nëmmen Textartikelen empfohlen, sou datt vill vun eisen Algorithmen op dës Zort Inhalt ugepasst sinn. Awer wann Dir aner Zorte vun Inhalt bäigefüügt, ware mir konfrontéiert mat der Bedierfnes fir d'Modeller unzepassen. Wéi hu mir dëse Problem mat engem Video Beispill geléist? Eng Optioun ass all Modeller vun Null ze retrainéieren. Awer dëst dauert laang, an e puer vun den Algorithmen fuerderen d'Gréisst vun der Trainingsprouf, déi nach net an der erfuerderter Quantitéit fir eng nei Zort Inhalt an den éischte Momenter vu sengem Liewen um Service verfügbar ass.

Mir sinn deen anere Wee gaang an hunn d'Textmodeller fir de Video nei benotzt. Deeselwechten ALS Trick huet eis gehollef Vektorrepresentatioune vu Videoen ze kreéieren. Mir hunn eng Vecteure Representatioun vu Benotzer baséiert op Textartikelen gemaach an hunn en ALS Schrëtt mat Video View Informatioun gemaach. Also hu mir einfach eng Vektorvertriedung vum Video kritt. A bei der Runtime berechene mir einfach d'Proximitéit tëscht dem Benotzervektor aus Textartikelen an dem Videovektor.

Konklusioun

D'Entwécklung vum Kär vun engem Echtzäit Empfehlungssystem enthält vill Erausfuerderungen. Dir musst séier Daten veraarbecht an ML Methoden applizéieren fir dës Donnéeën effektiv ze benotzen; bauen komplex verdeelt Systemer kapabel vun Veraarbechtung Benotzer Signaler an nei Unitéiten vun Inhalt an engem Minimum Zäit; a vill aner Aufgaben.

Am aktuelle System, den Design vun deem ech beschriwwen hunn, wiisst d'Qualitéit vun de Empfehlungen fir de Benotzer zesumme mat senger Aktivitéit an der Dauer vum Openthalt am Service. Awer natierlech, hei läit d'Haaptschwieregkeet: et ass schwéier fir de System direkt d'Interesse vun enger Persoun ze verstoen déi wéineg Interaktioun mam Inhalt huet. D'Verbesserung vun Empfehlungen fir nei Benotzer ass eist Schlësselziel. Mir wäerte weider d'Algorithmen optimiséieren, sou datt Inhalter, dee fir eng Persoun relevant ass, méi séier a säi Feed kënnt, an irrelevanten Inhalt gëtt net gewisen.

Source: will.com

Setzt e Commentaire