{"id":71852,"date":"2020-02-28T20:59:58","date_gmt":"2020-02-28T17:59:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij"},"modified":"2020-03-03T16:14:08","modified_gmt":"2020-03-03T13:14:08","slug":"kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","title":{"rendered":"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Minu nimi on Pavel Parkhomenko, olen ML-arendaja. Selles artiklis soovin r\u00e4\u00e4kida Yandex Zen teenuse \u00fclesehitusest ning jagada tehnilisi t\u00e4iustusi, mille rakendamine on v\u00f5imaldanud parandada soovituste kvaliteeti. Artiklist saad teada, kuidas leida miljonite dokumentide hulgast kasutajale k\u00f5ige asjakohasemad vaid m\u00f5ne millisekundi jooksul; kuidas teha suurt maatriksi pidevat lagundamist (mis koosneb miljonitest veergudest ja k\u00fcmnetest miljonitest ridadest), et uued dokumendid saaksid oma vektori k\u00e4tte vaid tundide jooksul; kuidas taaskasutada kasutaja-artikli maatriksi lagundamist, et saada head vekt esindust videode jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel\" src=\"\/wp-content\/uploads\/2020\/02\/d63caf9162ca3533548fdef9cd740c24.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex> <br \/>\nMeie soovitusbaas sisaldab miljoneid erineva formaadiga dokumente: tekstilised artiklid, mis on loodud meie platvormil ja saadud v\u00e4listelt veebisaitidelt, videod, narratiivid ja l\u00fchikesed postitused. Sellise teenuse arendamine on seotud mitmete tehniliste v\u00e4ljakutsetega. Siin on m\u00f5ned neist:<\/p>\n<ul>\n<li>Jagada arvutus\u00fclesandeid: k\u00f5ik rasked operatsioonid teostada offline, samas kui reaalajas teostatakse ainult mudelite kiire rakendamine, et vastata 100-200 ms jooksul.<\/li>\n<li>Kiirelt arvestada kasutaja tegevusi. Selleks on vajalik, et k\u00f5ik s\u00fcndmused edastataks kohe soovituss\u00fcsteemi ja m\u00f5jutaksid mudelite t\u00f6\u00f6 tulemusi.<\/li>\n<li>Luua selline feed, et uued kasutajad saaksid kiiresti kohanduda oma k\u00e4itumisega. Just s\u00fcsteemi tulnud inimesed peaksid tundma, et nende tagasiside m\u00f5jutab soovitusi.<\/li>\n<li>Kiirelt m\u00f5ista, kellele soovitada uut artiklit.<\/li>\n<li>Operatiivselt reageerida pidevale uue sisu ilmumisele. Igap\u00e4evaselt ilmub k\u00fcmneid tuhandeid artikleid, millest paljudel on piiratud eluiga (n\u00e4iteks uudised). See eristab neid filmidest, muusikast ja muust pikaajalise elueaga ja kallist loovusest.<\/li>\n<li>\u00dcksnes teadmiste \u00fcleviimine \u00fchelt domeenialalt teisele. Kui soovituss\u00fcsteemis on koolitatud mudeleid tekstiliste artiklite jaoks ja lisame sinna videod, saab olemasolevaid mudeleid taaskasutada, et uue t\u00fc\u00fcpi sisu paremini j\u00e4rjestada.<\/li>\n<\/ul>\n<p>\nR\u00e4\u00e4gin, kuidas me neid v\u00e4ljakutseid lahendasime.<\/p>\n<h2>Kandidaatide valimine<\/h2>\n<p>\n<b>Kuidas v\u00e4hendada mitmesuguste dokumentide arvu tuhandete v\u00f5rra m\u00f5ne millisekundi jooksul, kahjustamata praktiliselt j\u00e4rjestamise kvaliteeti?<\/b><\/p>\n<p>Oletame, et oleme koolitanud palju masin\u00f5ppe mudeleid, genereerinud nende p\u00f5hjal tunnuseid ja koolitanud veel \u00fche mudeli, mis j\u00e4rjestab dokumente kasutaja jaoks. K\u00f5ik on h\u00e4sti, kuid ei saa lihtsalt v\u00f5tta ja arvutada k\u00f5iki tunnuseid k\u00f5igi dokumentide jaoks reaalajas, kui neid dokumente on miljoneid, ja soovitusi tuleb teha 100-200 ms jooksul. \u00dclesanne on valida miljonitest mingisugune alamhulk, mis j\u00e4rjestatakse kasutaja jaoks. Seda etappi kutsutakse tavaliselt kandidaadi valimiseks. Sellele esitatakse mitmeid n\u00f5udeid. Esiteks, valik peab toimuma v\u00e4ga kiiresti, et j\u00e4rjestamiseks j\u00e4\u00e4ks v\u00f5imalikult palju aega. Teiseks, oluliselt v\u00e4hendades j\u00e4rjestamiseks vajalike dokumentide arvu, peame maksimaalselt s\u00e4ilitama kasutaja jaoks asjakohased dokumendid.<\/p>\n<p>Meie kandidaadi valimise p\u00f5him\u00f5te on evolutsiooniliselt arenenud ja hetkel oleme j\u00f5udnud mitmeastmelisse skeemi:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel\" src=\"\/wp-content\/uploads\/2020\/02\/ed9657ed1febe871f36dc7cf7e585963.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nEsmalt jagatakse k\u00f5ik dokumendid gruppidesse ning igast grupist valitakse v\u00e4lja k\u00f5ige populaarsemad dokumendid. Grupiks v\u00f5ivad olla veebilehed, teemad v\u00f5i klastrid. Iga kasutaja jaoks valitakse tema ajaloo p\u00f5hjal v\u00e4lja k\u00f5ige sobivamad grupid ja nendest valitakse juba parimad dokumendid. Kasutame ka kNN-indeksit, et leida reaalajas k\u00f5ige l\u00e4hemal asuvad kasutajale dokumendid. kNN-indeksi koostamiseks on mitu meetodit, millest meie puhul t\u00f6\u00f6tab k\u00f5ige paremini <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1603.09320\">HNSW<\/a><\/noindex> (Hierarchical Navigable Small World graphs). See on hierarhiline mudel, mis v\u00f5imaldab m\u00f5ne millisekundi jooksul leida miljonite dokumentide hulgast kasutajale N l\u00e4himat vektorit. Eelnevalt indekseerime kogu oma dokumentide baasi offline. Kuna otsimine indeksis toimub suhteliselt kiiresti, on v\u00f5imalik m\u00f5ne tugeva embedding'i olemasolul luua mitu indeksi (igale embedding'ile \u00fcks indeks) ja p\u00f6\u00f6rduda iga\u00fche poole reaalajas.<\/p>\n<p>Meil on iga kasutaja jaoks k\u00fcmneid tuhandeid dokumente. See on endiselt palju, et arvestada k\u00f5iki tunnuseid, seega rakendame sellel etapil kerget retsensiooni \u2014 lihtsustatud mudeli rasket retsensiooni v\u00e4iksema tunnuste arvuga. \u00dclesanne on ennustada, millised dokumendid saavad raskes mudelis tippu. Dokumente, millel on k\u00f5rgeim ennustus, kasutatakse rasketes mudelites, st retsensiooni viimases etapis. See l\u00e4henemine v\u00f5imaldab k\u00fcmnete millisekundite jooksul v\u00e4hendada kasutaja jaoks kaalutavate dokumentide arvu miljonist tuhande juurde.<\/p>\n<h2>ALS'etapp reaalajas<\/h2>\n<p>\n<b>Kuidas arvesse v\u00f5tta kasutaja tagasisidet kohe p\u00e4rast kliki tegemist?<\/b><\/p>\n<p>Oluline tegur soovitustes on reaktsiooniaeg kasutaja tagasisidele. See on eriti oluline uute kasutajate jaoks: kui inimene hakkab just soovituss\u00fcsteemi kasutama, saab ta mitmekesise teema \u00fchtse sisu. Niipea, kui ta teeb esimese kliki, on oluline kohe arvestada seda ja kohandada oma huve. Kui k\u00f5ik tegurid arvutatakse v\u00e4ljas, muutub s\u00fcsteemi kiire reageerimine v\u00f5imatuks viivituse t\u00f5ttu. Seet\u00f5ttu on vaja reaalses ajas t\u00f6\u00f6tleda kasutaja tegevusi. Selleks kasutame ALS etappi reaalajas, et luua kasutaja vekt esitus.<\/p>\n<p>Oletame, et k\u00f5ikide dokumentide jaoks on meil vekt esitus. N\u00e4iteks saame v\u00e4ljas artikli teksti p\u00f5hjal luua embedde ELMo, BERT v\u00f5i muude masin\u00f5ppe mudelite abil. Kuidas saame saada kasutajate vekt esitus sama ruumi p\u00f5hjal nende tegevuste p\u00f5hjal s\u00fcsteemis?<\/p>\n<p><b class=\"spoiler_title\">Kasutaja-dokumendi maatriksi loomise ja lagundamise \u00fcldine p\u00f5him\u00f5te<\/b>Oletame, et meil on m kasutajat ja n dokumenti. M\u00f5ne kasutaja kohta on teada nende suhe m\u00f5ne dokumendi suhtes. Sellist teavet saab esitada m x n maatriksina: read vastavad kasutajatele ja veerud dokumentidele. Kuna enamik dokumente on kasutajad n\u00e4inud, j\u00e4\u00e4b suurem osa maatriksi rakkudest t\u00fchjaks, samas kui teised t\u00e4idetakse. Iga s\u00fcndmuse (meeldimise, mitte-meeldimise, kliki) puhul on maatriksis ette n\u00e4htud mingi v\u00e4\u00e4rtus \u2013 kuid vaatame lihtsustatud mudelit, kus meeldimise korral on v\u00e4\u00e4rtus 1, mitte-meeldimise korral aga -1.<\/p>\n<p>Jagame maatriksi kaheks: P (m x d) ja Q (d x n), kus d on vekt esitus suurus (tavaliselt v\u00e4ike number). Siis vastab igale objektile d-m\u00f5\u00f5tmeline vektor (kasutajale \u2013 rida maatriksis P, dokumendile \u2013 veerg maatriksis Q). Need vektorid on vastavate objektide embedid.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel\" src=\"\/wp-content\/uploads\/2020\/02\/a0c721bccb3806f2c4a18693a9458a89.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00dcks v\u00f5imalik maatriksi jagamise meetod on ALS (Alternating Least Squares). Optimeerime j\u00e4rgmist kaotusefunktsiooni:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel\" src=\"\/wp-content\/uploads\/2020\/02\/aab8a1ae1cdf39de21e7469864c5190a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nSiin rui on kasutaja u suhtlemine dokumendiga i, qi on dokumendi i vektor, pu on kasutaja u vektor.<\/p>\n<p>Siis leiame optimaalse kasutaja vektori (fikseeritud dokumentide vektorite puhul) anal\u00fc\u00fctiliselt, lahendades vastava lineaarse regressiooni.<\/p>\n<p>Seda nimetatakse \"ALS-i sammuks\". ALSi algoritm seisneb selles, et me fikseerisime \u00fche maatriksi (kasutajate ja artiklite) ning uuendame teist, leides optimaalse lahenduse.<\/p>\n<p>\u00d5nneks on kasutaja vekt esitus leidmine \u00fcsna kiire operatsioon, mida saab teha k\u00e4itusaja jooksul, kasutades vektori juhiseid. See nipp v\u00f5imaldab kohe arvestada kasutaja tagasisidet j\u00e4rjestuses. Sama embeddit saab kasutada ka kNN-indeksis kandidaatide valiku parandamiseks.<\/p>\n<h2>Jaotatud koost\u00f6\u00f6filter<\/h2>\n<p>\n<b>Kuidas teha inkrementeeritud jaotatud maatriksi faktoreerimist ja kiiresti leida uute artiklite vektorite esitusi?<\/b><\/p>\n<p>Sisu ei ole ainus signaalide allikas soovituste jaoks. Teiseks oluliseks allikaks on koost\u00f6\u00f6nformatsioon. H\u00e4id m\u00e4rke reitingus saab traditsiooniliselt k\u00e4tte kasutaja-dokumendi maatriksi lahutamisest. Kuid sellist lahutamist proovides kohtasime mitmeid probleeme:<\/p>\n<p>1. Meil on miljoneid dokumente ja k\u00fcmneid miljoneid kasutajaid. Maatriks ei mahu t\u00e4ies ulatuses \u00fchte masinasse, ning lahutamine kestab v\u00e4ga kaua.<br \/>\n2. Suurema osa sisu eluaeg on l\u00fchike: dokumendid j\u00e4\u00e4vad aktuaalseks vaid paariks tunniks. Seet\u00f5ttu on oluline kiiresti luua nende vektoriline esitus.<br \/>\n3. Kui lahutame kohe p\u00e4rast dokumendi avaldamist, ei j\u00f5ua seda piisavalt palju kasutajaid hinnata. Seega on selle vektoriline esitus suure t\u00f5en\u00e4osusega kehv.<br \/>\n4. Kui kasutaja on andnud meeldimise v\u00f5i mittetunnustamise, ei saa me seda kohe lahutamisel arvesse v\u00f5tta.<\/p>\n<p>Nende probleemide lahendamiseks rakendasime hajutatud kasutaja-dokumendi maatriksi lahutamist sagedaste inkrementaalsete uuendustega. Kuidas see t\u00e4pselt t\u00f6\u00f6tab?<\/p>\n<p>Kujutame ette, et meil on N masinat (N loetleb sada) ja me soovime nende peal teha hajutatud lahutamist maatriksist, mis ei mahu \u00fchte masinasse. K\u00fcsimus on, kuidas teostada seda lahutamist nii, et igas masinas oleks piisavalt andmeid ja samas oleks arvutused omavahel s\u00f5ltumatud? <\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame kvaliteedi ja soovituste valimise kiirusel\" src=\"\/wp-content\/uploads\/2020\/02\/9170b0fecb6efcd41754ec20ee539a15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKasutame eespool kirjeldatud ALS lahutamisalgoritmi. Vaatleme, kuidas teostada hajutatult \u00fchte ALS sammu \u2013 \u00fclej\u00e4\u00e4nud sammud on sarnased. Oletame, et meie dokumentide maatriks on fikseeritud ja me tahame luua kasutajate maatriksi. Selleks jagame selle N osaks ridade kaupa, iga osa sisaldab umbkaudu sama arvu ridasid. Saadame igasse masinasse vastavate ridade mitte-t\u00fchjad lahtrid ning samuti dokumentide sisu embedimisi (t\u00e4ielikult). Kuna selle suurus on v\u00e4ike ja kasutaja-dokumendi maatriks on tavaliselt tugevalt h\u00f5re, mahtuvad need andmed tavalisse masinasse.<\/p>\n<p>Selline trikk on v\u00f5imalik korrata mitme ajastu jooksul mudeli konvergentsini, vaheldumisi muuta fikseeritud maatriksit. Kuid isegi siis v\u00f5ib maatriksi lagundamine kesta mitu tundi. See ei lahenda probleemi, et on vaja kiiresti saada uute dokumentide sisendit ja v\u00e4rskendada neid sisendeid, mille kohta oli mudeli koostamisel v\u00e4he teavet. <\/p>\n<p>Aitasime kaasa kiire inkrementaalse mudeli uuendamise rakendamisele. Oletame, et meil on praegune treenitud mudel. Alates selle treenimisest on ilmunud uusi artikleid, millega meie kasutajad on suhtlemiseks tegelenud, samuti artikleid, millega treenimise ajal oli v\u00e4he suhtlemisi. Selliste artiklite kiireks sisendi saamiseks kasutame kasutajate sisendeid, mis saadi esimesel suurel mudeli treenimisel, ja teeme \u00fche sammu ALS, et arvutada dokumentide maatriks fikseeritud kasutajate maatriksi juures. See v\u00f5imaldab saada sisendeid \u00fcsna kiiresti \u2014 m\u00f5ne minuti jooksul p\u00e4rast dokumendi avaldamist \u2014 ja sageli v\u00e4rskendada v\u00e4rskeid dokumente.<\/p>\n<p>Et soovitustes arvestataks kohe inimtegevust, ei kasuta me jooksuaegadel offline'is saadud kasutajate sisendeid. Selle asemel teeme sammu ALS ja saame praeguse kasutaja vektori.<\/p>\n<h2>\u00dclekandmine teise domeeni<\/h2>\n<p>\n<b>Kuidas kasutada kasutajate tagasisidet tekstilistele artiklitele, et luua videote vektorseisund?<\/b><\/p>\n<p>Alguses soovitasime ainult tekstilisi artikleid, seega on paljud meie algoritmid kohandatud just selle sisu t\u00fc\u00fcbi jaoks. Kuid kasutades teist t\u00fc\u00fcpi sisu, seisisime silmitsi vajadusega mudelite kohandamiseks. Kuidas me selle \u00fclesande lahendasime video n\u00e4itel? \u00dcks v\u00f5imalus on k\u00f5iki mudeleid nullist uuesti treenida. Kuid see on aegan\u00f5udev ja m\u00f5ned algoritmid on treeningu valimi mahu suhtes n\u00f5udlikud, millest ei ole esimese hetkeni uuet\u00fc\u00fcpi sisu jaoks piisavas mahus.<\/p>\n<p>Me l\u00e4ksime teist teed ja kasutasime videote jaoks tekstimudeleid uuesti. Video vekt esinduste loomisel aitas meid ikka see sama ALS trikk. V\u00f5tsime kasutajate vekt esinduse tekstip\u00f5histe artiklite alusel ning tegime ALS sammu, kasutades video vaatamise teavet. Nii saime vaevata video vekt esinduse. Ja jooksuajal arvutame lihtsalt sarnasuse kasutaja vektoriga, mis on saadud tekstip\u00f5histest artiklitest, ja video vektoriga.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nReaalajas soovituss\u00fcsteemi tuumik arendamine on seotud paljude \u00fclesannetega. Andmeid tuleb kiiresti t\u00f6\u00f6delda ja rakendada ML- meetodeid nende efektiivseks kasutamiseks; ehitada keerulisi jaotatud s\u00fcsteeme, mis suudavad minimaalse aja jooksul t\u00f6\u00f6delda kasutajate signaale ja uusi sisu\u00fcksusi; ja palju teisi \u00fclesandeid.<\/p>\n<p>Praeguses s\u00fcsteemis, mille ma kirjeldasin, kasvab soovituste kvaliteet kasutaja jaoks koos tema aktiivsuse ja teenuses viibimise kestusega. Kuid loomulikult peitub siinkohal ka peamine keerukus: s\u00fcsteemil on raske okam\u00f5ista inimese huve, kes on v\u00e4he sisu suhtes interakteerunud. Uute kasutajate soovituste parandamine on meie peamine \u00fclesanne. Jatkame algoritmide optimeerimist, et asjakohane sisu j\u00f5uaks kiiremini tema voogu ja ebaasjakohane ei kuvataks.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/yandex\/blog\/490140\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0430\u0440\u0445\u043e\u043c\u0435\u043d\u043a\u043e, \u044f ML-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0437\u0435\u043d \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439. \u0418\u0437 \u043f\u043e\u0441\u0442\u0430 \u0432\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u043b\u0435\u0432\u0430\u043d\u0442\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f; \u043a\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b (\u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0438\u0437 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":71853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-71852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0430\u0440\u0445\u043e\u043c\u0435\u043d\u043a\u043e, \u044f ML-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0437\u0435\u043d \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0430\u0440\u0445\u043e\u043c\u0435\u043d\u043a\u043e, \u044f ML-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0437\u0435\u043d \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-28T17:59:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-03T13:14:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiiruseni | ProHoster","description":"Minu nimi on Pavel Parkhomenko, olen ML-arendaja. Selles artiklis sooviksin r\u00e4\u00e4kida Yandex Zen teenuse seadistusest ja jagada tehnilisi parandusi, mille rakendamine on v\u00f5imaldanud suurendada soovituste kvaliteeti.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u0434 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439 | ProHoster","og:description":"\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0430\u0440\u0445\u043e\u043c\u0435\u043d\u043a\u043e, \u044f ML-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u042f\u043d\u0434\u0435\u043a\u0441.\u0414\u0437\u0435\u043d \u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u043c\u0438, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-28T17:59:58+00:00","article:modified_time":"2020-03-03T13:14:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"71852","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:55:28","updated":"2022-10-09 15:47:56","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/71852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=71852"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/71852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/71853"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=71852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=71852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=71852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}