Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun

Nire izena Pavel Parkhomenko da, ML garatzailea naiz. Artikulu honetan Yandex.Zen zerbitzuaren egiturari buruz hitz egin eta hobekuntza teknikoak partekatu nahiko nuke, horien ezarpenak gomendioen kalitatea areagotzea ahalbidetu baitu. Argitalpen honetatik milioika dokumenturen artean erabiltzailearentzat garrantzitsuenak milisegundo gutxitan aurkitzen ikasiko duzu; nola egin matrize handi baten etengabeko deskonposizioa (milioika zutabez eta hamar milioi errenkadaz osatua), dokumentu berriek bere bektorea hamar minututan jaso dezaten; nola berrerabili erabiltzaile-artikulu matrizearen deskonposizioa bideorako irudikapen bektorial ona lortzeko.

Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun

Gure gomendioen datu-baseak hainbat formatutako milioika dokumentu ditu: gure plataforman sortutako testu-artikuluak eta kanpoko guneetatik ateratakoak, bideoak, narrazioak eta mezu laburrak. Zerbitzu horren garapena erronka tekniko ugarirekin lotuta dago. Hona hemen horietako batzuk:

  • Banatu informatika-zereginak: egin eragiketa astun guztiak lineaz kanpo, eta denbora errealean soilik egin ereduen aplikazio azkarra 100-200 ms-en erantzule izateko.
  • Azkar kontuan hartu erabiltzaileen ekintzak. Horretarako, beharrezkoa da gertaera guztiak berehala gomendatzaileari entregatzea eta ereduen emaitzetan eragina izatea.
  • Egin jarioa erabiltzaile berrientzat beren jokabidera azkar egokitzeko. Sisteman sartu berri diren pertsonek euren iritziak gomendioetan eragina dutela sentitu beharko lukete.
  • Ulertu azkar nori gomendatu artikulu berri bat.
  • Erantzun azkar eduki berrien etengabeko sorrerari. Hamarnaka mila artikulu argitaratzen dira egunero, eta horietako askok bizitza mugatua dute (esan, albisteak). Horrek bereizten ditu filmetatik, musikatik eta sor daitezkeen beste eduki luze eta garestietatik.
  • Ezagutza transferitu domeinu-arlo batetik bestera. Gomendio sistema batek testu-artikuluetarako ereduak trebatu baditu eta horri bideoa gehitzen badiogu, lehendik dauden ereduak berrerabil ditzakegu, eduki mota berria hobeto sailkatu dadin.

Arazo hauek nola konpondu genituen esango dizut.

Hautagaien hautaketa

Nola murriztu kontuan hartzen diren dokumentuen kopurua milaka aldiz milisegundo gutxitan, sailkapenaren kalitatea ia okertu gabe?

Demagun ML eredu asko entrenatu ditugula, haietan oinarritutako ezaugarriak sortu ditugula eta erabiltzailearentzako dokumentuak sailkatzen dituen beste eredu bat trebatu dugula. Dena ondo egongo litzateke, baina ezin dituzu dokumentu guztien seinale guztiak denbora errealean hartu eta kalkulatu, dokumentu horietako milioika badaude eta gomendioak 100-200 ms-tan eraiki behar dira. Zeregin da milioika azpimultzo jakin bat hautatzea, erabiltzailearentzat sailkatuko dena. Fase honi hautagaien hautaketa deitzen zaio normalean. Hainbat baldintza daude horretarako. Lehenik eta behin, hautaketa oso azkar egin behar da, rankingerako ahalik eta denbora gehien gelditzeko. Bigarrenik, sailkapenerako dokumentu kopurua asko murriztuta, erabiltzaileari dagozkion dokumentuak ahalik eta gehien gorde behar ditugu.

Hautagaiak aukeratzeko gure printzipioa eboluzionatu egin da, eta momentuz etapa anitzeko eskema batera iritsi gara:

Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun

Lehenik eta behin, dokumentu guztiak taldetan banatzen dira, eta talde bakoitzetik dokumentu ezagunenak hartzen dira. Taldeak guneak, gaiak, klusterrak izan daitezke. Erabiltzaile bakoitzarentzat, bere historiaren arabera, beregandik hurbilen dauden taldeak aukeratzen dira eta haietatik dokumentu onenak hartzen dira. Erabiltzailearengandik hurbilen dauden dokumentuak denbora errealean hautatzeko kNN indizea ere erabiltzen dugu. Hainbat metodo daude kNN indizea eraikitzeko; gureak funtzionatu zuen onena HNSW (Mundu Txiki Nabigagarri Hierarkizatuko grafikoak). Eredu hierarkikoa da, eta erabiltzaile baten N bektore hurbilenak milisegundo gutxitan aurki ditzakezu milioika datu-base batetik. Lehenik eta behin, gure dokumentu datu-base osoa lineaz kanpo indexatzen dugu. Indizean bilaketak nahiko azkar funtzionatzen duenez, hainbat txertaketa sendo badaude, hainbat indize sor ditzakezu (indize bat txertatze bakoitzeko) eta haietako bakoitzean denbora errealean atzitu.

Erabiltzaile bakoitzarentzat dozenaka mila dokumentu ditugu oraindik. Ezaugarri guztiak zenbatu behar dira oraindik, eta, beraz, fase honetan sailkapen arina erabiltzen dugu, ezaugarri gutxiago dituen ranking astuneko eredu arina. Eredu astun batek goian zein dokumentu izango dituen aurreikustea da zeregina. Iragarle handiena duten dokumentuak eredu astunean erabiliko dira, hau da, sailkapenaren azken fasean. Ikuspegi honi esker, erabiltzailearentzat kontuan hartzen diren dokumentuen datu-basea milioietatik milaka izatera murrizten da hamarnaka milisegundotan.

ALS urratsa exekuzioan

Nola hartu erabiltzaileen iritziak klik baten ondoren berehala?

Gomendioetan faktore garrantzitsu bat erabiltzaileen iritziei erantzuteko denbora da. Hau bereziki garrantzitsua da erabiltzaile berrientzat: pertsona bat gomendio sistema erabiltzen hasten denean, hainbat gaitako dokumentuen jario ez pertsonalizatua jasotzen du. Lehenengo klika egin bezain laster, berehala hartu behar duzu kontuan hau eta bere interesetara egokitu. Faktore guztiak lineaz kanpo kalkulatzen badituzu, sistemaren erantzun azkarra ezinezkoa izango da atzerapena dela eta. Beraz, beharrezkoa da erabiltzaileen ekintzak denbora errealean prozesatzea. Helburu horietarako, ALS urratsa erabiltzen dugu exekuzioan erabiltzailearen irudikapen bektorial bat eraikitzeko.

Demagun dokumentu guztien irudikapen bektoriala dugula. Adibidez, txertaketak lineaz kanpo eraiki ditzakegu artikulu baten testuan oinarrituta ELMo, BERT edo beste ikasketa automatikoko eredu batzuk erabiliz. Nola lor dezakegu espazio bereko erabiltzaileen irudikapen bektorial bat sisteman dituzten interakzioetan oinarrituta?

Erabiltzaile-dokumentu matrizearen eraketa eta deskonposizioaren printzipio orokorraIzan ditzagun m erabiltzaile eta n dokumentu. Erabiltzaile batzuentzat, dokumentu batzuekin duten harremana ezaguna da. Ondoren, informazio hori mxn matrize gisa irudika daiteke: errenkadak erabiltzaileei dagozkie, eta zutabeak dokumentuei. Pertsonak dokumentu gehienak ikusi ez dituenez, matrize-gelaxka gehienak hutsik geratuko dira, eta beste batzuk beteko dira. Gertaera bakoitzerako (atsegin dut, ez gustatu, egin klik) balioren bat ematen da matrizean, baina har dezagun eredu sinplifikatu bat, non atsegin bat 1-ri dagokion eta ez-gustatu bat -1-i.

Deskonposa dezagun matrizea bitan: P (mxd) eta Q (dxn), non d irudikapen bektorialaren dimentsioa den (normalean zenbaki txikia). Ondoren, objektu bakoitzari d-dimentsioko bektore bati dagokio (erabiltzaile batentzat - P matrizeko errenkada bat, dokumentu baterako - Q matrizeko zutabe bat). Bektore hauek dagozkien objektuen barneratzeak izango dira. Erabiltzaile bati dokumentu bat gustatuko zaion aurreikusteko, haien kapsultazioak biderkatu besterik ez dituzu egin.

Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun
Matrize bat deskonposatzeko modu posibleetako bat ALS (Alternating Least Squares) da. Ondorengo galera funtzioa optimizatuko dugu:

Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun

Hemen rui u erabiltzaileak i dokumentuarekin duen elkarrekintza da, qi i dokumentuaren bektorea da, pu u erabiltzailearen bektorea.

Orduan, erabiltzaile-bektore optimoa batez besteko errore karratuaren ikuspuntutik (dokumentu-bektore finkoetarako) aurkitzen da analitikoki dagokion erregresio lineala ebatziz.

Horri "ALS urratsa" deitzen zaio. Eta ALS algoritmoa bera da matrizeetako bat (erabiltzaileak eta artikuluak) txandaka konpondu eta bestea eguneratzen dugula, irtenbide optimoa aurkituz.

Zorionez, erabiltzailearen irudikapen bektoriala aurkitzea nahiko eragiketa azkarra da, exekuzioan egin daitekeen instrukzio bektorialak erabiliz. Trikimailu honek erabiltzaileen iritzia berehala kontuan hartzeko aukera ematen du sailkapenean. KNN indizean txertatze bera erabil daiteke hautagaien hautaketa hobetzeko.

Iragazki kolaboratiboa banatua

Nola egin inkrementala banatutako matrize faktorizazioa eta azkar aurkitu artikulu berrien irudikapen bektorialak?

Edukia ez da gomendio seinaleen iturri bakarra. Beste iturri garrantzitsu bat lankidetza-informazioa da. Erabiltzaile-dokumentu matrizearen deskonposiziotik ohiko sailkapen-eginbide onak lor daitezke. Baina halako deskonposizio bat egiten saiatzean, arazoak topatu ditugu:

1. Milioika dokumentu eta dozenaka milioi erabiltzaile ditugu. Matrizea ez da guztiz kabitzen makina batean, eta deskonposizioak oso denbora luzea izango du.
2. Sistemako eduki gehienek iraupen laburra dute: dokumentuek ordu gutxi batzuetan bakarrik izaten jarraitzen dute. Hori dela eta, beharrezkoa da haien irudikapen bektoriala ahalik eta azkarren eraikitzea.
3. Dokumentua argitaratu eta berehala deskonposizio bat eraikitzen baduzu, erabiltzaile kopuru nahikorik ez du izango ebaluatzeko astirik. Beraz, bere irudikapen bektoriala ziurrenik ez da oso ona izango.
4. Erabiltzaile bati gustatu edo ez badu, ezin izango dugu berehala kontuan hartu deskonposizioan.

Arazo hauek konpontzeko, erabiltzaile-dokumentuaren matrizearen deskonposizio banatua ezarri dugu maiz eguneratze inkrementalekin. Zehazki nola funtzionatzen du?

Demagun N makina multzo bat dugula (N ehunkakoak) eta makina batean kabitzen ez den matrize baten deskonposizio banatua egin nahi dugula. Kontua da nola egin deskonposizio hori, alde batetik, makina bakoitzean datu nahikoa egon dadin eta, bestetik, kalkuluak independenteak izan daitezen?

Gomendioen aukeraketaren kalitatea eta abiadura nola lantzen dugun

Goian azaldutako ALS deskonposizio-algoritmoa erabiliko dugu. Ikus dezagun nola exekutatu ALS urrats bat modu banatuan - gainerako urratsak antzekoak izango dira. Demagun dokumentuen matrize finkoa dugula eta erabiltzaileen matrize bat eraiki nahi dugula. Horretarako, lerroka N zatitan banatuko dugu, zati bakoitzak gutxi gorabehera lerro kopuru bera izango du. Makina bakoitzari dagozkion errenkadetako gelaxka hutsak bidaliko ditugu, baita dokumentuen txertatzeen matrizea ere (osorik). Bere tamaina ez denez oso handia eta erabiltzaile-dokumentuen matrizea normalean oso urria denez, datu hauek makina arrunt batean sartuko dira.

Trikimailu hau hainbat garaitan errepika daiteke eredua bat egin arte, matrize finkoa banan-banan txandakatuz. Baina hala ere, matrizearen deskonposizioak ordu batzuk iraun ditzake. Eta horrek ez du konpontzen dokumentu berrien txertaketak azkar jasotzeko eta eredua eraikitzerakoan informazio gutxi zegoen horien txertaketak eguneratzeko behar duzun arazoa.

Ereduen eguneratze inkremental azkarrak sartzeak lagundu digu. Demagun gaur egun trebatutako eredua dugula. Bere prestakuntzatik, gure erabiltzaileek elkarrekintzan aritu diren artikulu berriak izan dira, baita entrenamenduetan interakzio gutxi izan duten artikuluak ere. Horrelako artikuluen txertaketak azkar lortzeko, ereduaren lehen prestakuntza handian lortutako erabiltzailearen txertaketak erabiltzen ditugu eta ALS urrats bat egiten dugu dokumentu-matrizea kalkulatzeko, erabiltzaile-matrize finko bat emanda. Horri esker, nahiko azkar jaso ditzakezu txertaketak -dokumentua argitaratu eta minutu gutxiren buruan- eta, askotan, azken dokumentuen txertaketak eguneratzen dira.

Gomendioak berehala giza ekintzak kontuan hartzeko, exekuzioan ez dugu lineaz kanpo lortutako erabiltzaileen kapsulatzerik erabiltzen. Horren ordez, ALS urrats bat egiten dugu eta benetako erabiltzailearen bektorea lortzen dugu.

Transferitu beste domeinu eremu batera

Nola erabili erabiltzaileen iritzia testu-artikuluetan bideo baten irudikapen bektorial bat eraikitzeko?

Hasieran, testu-artikuluak soilik gomendatzen genituen, beraz, gure algoritmo asko eduki mota honetara egokituta daude. Baina beste eduki mota batzuk gehitzean, ereduak egokitzeko beharraren aurrean egon ginen. Nola konpondu dugu arazo hau bideo adibide bat erabiliz? Aukera bat eredu guztiak hutsetik berregituratzea da. Baina honek denbora asko behar du, eta algoritmo batzuk eskatzen ari dira prestakuntza-laginaren tamainan, oraindik ez baitago eskuragarri eduki mota berri baterako zerbitzuaren bizitzako lehen uneetan behar den kantitatean.

Beste bide batetik joan ginen eta bideorako testu ereduak berrerabili genituen. ALS trikimailu berak bideoen irudikapen bektorialak sortzen lagundu zigun. Erabiltzaileen irudikapen bektorial bat hartu genuen testu-artikuluetan oinarrituta eta ALS urrats bat egin genuen bideo-ikustearen informazioa erabiliz. Beraz, bideoaren irudikapen bektoriala erraz lortu dugu. Eta exekuzioan testu-artikuluetatik lortutako erabiltzaile-bektorearen eta bideo-bektorearen arteko hurbiltasuna besterik ez dugu kalkulatzen.

Ondorioa

Denbora errealeko gomendio sistema baten muina garatzeak erronka asko dakartza. Datuak azkar prozesatu eta ML metodoak aplikatu behar dituzu datu hauek eraginkortasunez erabiltzeko; Erabiltzaileen seinaleak eta eduki-unitate berriak denbora minimo batean prozesatzeko gai diren sistema banatu konplexuak eraikitzea; eta beste hainbat zeregin.

Gaur egungo sisteman, zeinaren diseinua deskribatu dudan, erabiltzailearentzako gomendioen kalitatea hazten da bere jarduerarekin eta zerbitzuko egonaldiarekin batera. Baina, noski, hor dago zailtasun nagusia: sistemari zaila zaio berehala ulertzea edukiarekin interakzio gutxi duen pertsona baten interesak. Erabiltzaile berrientzako gomendioak hobetzea da gure helburu nagusia. Algoritmoak optimizatzen jarraituko dugu, pertsona bati garrantzitsua den edukia bere jarioan azkarrago sar dadin eta garrantzirik gabeko edukia erakutsi ez dadin.

Iturria: www.habr.com

Gehitu iruzkin berria