{"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 soovituste kvaliteedi ja kiirusete osas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Minu nimi on Pavel Parkhomenko, olen ML-arendaja. Selles artiklis tahan r\u00e4\u00e4kida Yandex.Dzeni teenusest ja jagada tehnilisi t\u00e4iustusi, mille rakendamine on v\u00f5imaldanud suurendada soovituste kvaliteeti. Postitusest saad teada, kuidas leida miljonite dokumentide hulgast kasutajale k\u00f5ige asjakohasemad vaid m\u00f5ne millisekundi jooksul; kuidas teha suurt maatriksi pidevat lagundamist (miljonitest veergudest ja k\u00fcmnetest miljonitest ridadest), et uued dokumendid saaksid oma vektori k\u00e4tte k\u00fcmnete minutite jooksul; kuidas taaskasutada kasutaja-artikli maatriksi lagundamist, et saada hea vekt esitus video jaoks.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiirusete osas\" 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 soovituste p\u00f5hjalik andmebaas sisaldab miljoneid erineva formaadi dokumente: tekstilisi artikleid, mis on loodud meie platvormil ja v\u00e4lisveebidest, videoid, narratiive ja l\u00fchipostitusi. Sellise teenuse arendamine on seotud hulga tehniliste v\u00e4ljakutsetega. Siin on m\u00f5ned neist:<\/p>\n<ul>\n<li>Jagada arvutus\u00fclesandeid: k\u00f5ik rasket\u00f6\u00f6d teha off-line ning reaalajas t\u00e4ita ainult mudelite kiiret rakendamist, et tagada vastamine 100\u2013200 ms jooksul.<\/li>\n<li>Kiirelt arvestada kasutaja tegevusi. Selleks on oluline, et k\u00f5ik s\u00fcndmused j\u00f5uaksid koheselt soovituste s\u00fcsteemi ja m\u00f5jutaksid mudelite t\u00f6\u00f6 tulemusi.<\/li>\n<li>Teha uudistevoog nii, et see kohandub uute kasutajate k\u00e4itumisega kiiresti. S\u00fcsteemi just sisenenud inimesed peavad tunnetama, et nende tagasiside m\u00f5jutab soovitusi.<\/li>\n<li>Kiirealt m\u00f5ista, kellele soovitada uut artiklit.<\/li>\n<li>Olla reaktiivne pidevale uue sisu ilmnemisele. Igap\u00e4evaselt ilmub k\u00fcmneid tuhandeid artikleid, ja paljusid neist iseloomustab piiratud eluiga (n\u00e4iteks uudised). See eristab neid filmidest, muusikast ja muust pikaajalist ja kallistest sisutootmisest.<\/li>\n<li>Teadmiste edastamine \u00fchelt domeenilt teisele. Kui soovitus\u00fcsteemis on koolitatud mudelid tekstilistele artiklitele ja me lisame sinna video, on v\u00f5imalik olemasolevaid mudeleid taaskasutada, et uue t\u00fc\u00fcpi sisu paremini j\u00e4rjestada.<\/li>\n<\/ul>\n<p>\nKannan ette, kuidas me need probleemid lahendasime.<\/p>\n<h2>Kandidaatide valik<\/h2>\n<p>\n<b>Kuidas v\u00e4hendada mitmeid millisekunde, arvestades miljonite dokumentide hulka tuhandete v\u00f5rra, praktiliselt kvaliteedi hindamist halvendamata?<\/b><\/p>\n<p>Oletame, et oleme koolinud palju ML-mudeleid, genereerinud nende alusel tunnuseid ja koolinud veel \u00fche mudeli, mis j\u00e4rjestab dokumente kasutaja jaoks. K\u00f5ik oleks h\u00e4sti, kuid ei saa niisama lihtsalt v\u00f5tta ja arvutada k\u00f5iki tunnuseid k\u00f5igi dokumentide jaoks reaalajas, kui neid on miljoneid, ning soovitusi on vaja pakuda 100\u2013200 ms jooksul. \u00dclesanne on valida miljonite seast m\u00f5ni alamhulk, mis j\u00e4rjestatakse kasutajale. Seda etappi tuntakse tavaliselt kandidaatide valikuna. Sellele esitatakse mitmeid n\u00f5udeid. Esiteks peab valik toimuma v\u00e4ga kiiresti, et j\u00e4rjestamiseks j\u00e4\u00e4ks v\u00f5imalikult palju aega. Teiseks, v\u00e4hendades j\u00e4rjestatavate dokumentide arvu, peame maksimaalselt s\u00e4ilitama kasutajale asjakohased dokumendid.<\/p>\n<p>Meie kandidaatide valimise printsip on evolutsiooni k\u00e4igus arenenud ja praeguseks oleme j\u00f5udnud mitmeastmelise skeemini:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiirusete osas\" src=\"\/wp-content\/uploads\/2020\/02\/ed9657ed1febe871f36dc7cf7e585963.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nEsiteks jagatakse k\u00f5ik dokumendid gruppidesse, ja igast grupist v\u00f5etakse k\u00f5ige populaarsemad dokumendid. Grupiks v\u00f5ivad olla veebisaidid, teemad, klastrid. Iga kasutaja jaoks valitakse tema ajaloost l\u00e4htuvalt k\u00f5ige l\u00e4hedasemad grupid ning neist v\u00f5etakse k\u00f5ige paremad dokumendid. Kasutame ka kNN-indekseerimist, et reaalajas leida kasutajale k\u00f5ige l\u00e4hedasemad dokumendid. KNN-indekeerimist on erinevaid meetodeid ja meil toimib parimal viisil <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 leida kasutajale miljonite andmebaasist N l\u00e4himat vektorit vaid m\u00f5ne millisekundi jooksul. Eelnevalt indekseerime kogu meie dokumentide baasi off-line. Kuna indeksi otsing t\u00f6\u00f6tab \u00fcsna kiiresti, siis olemasolevate tugeva embeddi pingutustega on v\u00f5imalik luua mitu indeksit (iga embedding jaoks \u00fcks indeks) ja p\u00f6\u00f6rduda nende poole reaalajas.<\/p>\n<p>Meil on k\u00e4sil k\u00fcmneid tuhandeid dokumente iga kasutaja jaoks. See on endiselt palju, et k\u00f5ikide omaduste arvestamine oleks v\u00f5imalik, seega rakendame sellel etapil kerget j\u00e4rjestamiseks \u2014 kergema mudeli, millel on v\u00e4hem omadusi, raske j\u00e4rjestamise jaoks. \u00dclesanne on ennustada, millised dokumendid on raske mudeli jaoks tippude seas. Dokumendid, millel on k\u00f5ige k\u00f5rgem ennustus, kasutatakse raske mudeli puhul, st viimases j\u00e4rjestamise etapis. See l\u00e4henemine v\u00f5imaldab k\u00fcmnetes millisekundites piirata kasutaja jaoks kaalutletud dokumentide arvu miljonist tuhandeteni.<\/p>\n<h2>ALS-i samm t\u00f6\u00f6ajal<\/h2>\n<p>\n<b>Kuidas arvesse v\u00f5tta kasutaja tagasisidet kohe p\u00e4rast klikki?<\/b><\/p>\n<p>Rekomendatsioonide puhul on oluline tegur kasutaja tagasiside reaktsiooniaeg. See on eriti oluline uute kasutajate jaoks: kui inimene hakkab just soovituss\u00fcsteemi kasutama, saab ta mitmekesise, mitte-personaliseeritud dokumendi voogu. Kui ta on teinud esimese klik, tuleb see kohe arvesse v\u00f5tta ja kohandada tema huve vastavalt. Kui k\u00f5ik tegurid arvutatakse offline, muutub s\u00fcsteemi kiire reaktsioon viivituste t\u00f5ttu v\u00f5imatuks. Seet\u00f5ttu on vajalik kasutaja tegevuse reaalajas t\u00f6\u00f6tlemine. Nende eesm\u00e4rkide saavutamiseks kasutame ALS-i sammu t\u00f6\u00f6ajal kasutaja vektorite esitamiseks.<\/p>\n<p>Oletame, et meil on k\u00f5igi dokumentide vektoriline esitamine. N\u00e4iteks saame offline-is artikli teksti p\u00f5hjal luua sisestusi ELMo, BERTi v\u00f5i teiste masin\u00f5ppe mudelite abil. Kuidas saada kasutajate vektoriline esitamine samas ruumis nende s\u00fcsteemis toimuva interaktsiooni p\u00f5hjal?<\/p>\n<p><b class=\"spoiler_title\">Kasutaja-dokumendi matrici koostamise ja lagunemise \u00fcldine p\u00f5him\u00f5te<\/b>Oletame, et meil on m kasutajat ja n dokumenti. M\u00f5nedest kasutajatest on teada nende suhtumine teatud dokumentidesse. Seda teavet saab esitada m x n maatriksina: read vastavad kasutajatele ja veerud dokumentidele. Kuna enamikku dokumentidest ei ole inimene n\u00e4inud, j\u00e4\u00e4b suurem osa maatriksi kelladest t\u00fchjaks, teised aga t\u00e4idetakse. Iga s\u00fcndmuse (meeldib, ei meeldi, klik) jaoks on maatriksis ette n\u00e4htud mingi v\u00e4\u00e4rtus \u2014 aga arutame lihtsustatud mudelit, kus meeldib on 1 ja ei meeldi on -1.<\/p>\n<p>Laguneme maatriksi kaheks: P (m x d) ja Q (d x n), kus d on vektorilise esitamise dimensioon (tavaliselt on see v\u00e4ike number). Seega vastab igale objektile d-m\u00f5\u00f5tmeline vektor (kasutajale \u2014 rida maatriksis P, dokumendile \u2014 veerg maatriksis Q). Need vektorid ongi vastavate objektide esitused. Et ennustada, kas kasutajale meeldib dokument, v\u00f5ib lihtsalt korrutada nende esitused.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiirusete osas\" src=\"\/wp-content\/uploads\/2020\/02\/a0c721bccb3806f2c4a18693a9458a89.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00dcks v\u00f5imalik maatriksi lagunemise meetod on ALS (Alternating Least Squares). Optimeerime j\u00e4rgmise kaotuse funktsiooni:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiirusete osas\" src=\"\/wp-content\/uploads\/2020\/02\/aab8a1ae1cdf39de21e7469864c5190a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nSiin rui on kasutaja u interaktsioon dokumendiga i, qi on dokumendi i vektor, pu on kasutaja u vektor.<\/p>\n<p>Siis optimaalse keskmise ruutvektor kasutajast (fikseeritud dokumendi vektorite korral) m\u00e4\u00e4ratakse anal\u00fc\u00fctiliselt vastava lineaarse regressiooni lahendamise abil.<\/p>\n<p>Seda nimetatakse \"ALS-i sammuks\". Ja ALS-i algoritm seisneb selles, et me fikseerime vaheldumisi \u00fche maatriksi (kasutajate ja artiklite) ja v\u00e4rskendame teise, leides optimaalse lahenduse.<\/p>\n<p>\u00d5nneks on kasutaja vektorilise esituse leidmine \u00fcsna kiire protsess, mida saab teha t\u00f6\u00f6ajal, kasutades vektoralgebraga seotud juhiseid. See trikk v\u00f5imaldab kohe arvesse v\u00f5tta kasutaja tagasisidet j\u00e4rjestamises. Sama esitust saab kasutada ka kNN-indeksis kandidaatide valiku parendamiseks.<\/p>\n<h2>Jaotatud koost\u00f6\u00f6p\u00f5hine filtreerimine<\/h2>\n<p>\n<b>Kuidas teha inkrementaalset jaotatud maatriksi faktoriseerimist ja kiiresti leida uute artiklite vektorilised esitused?<\/b><\/p>\n<p>Sisu ei ole ainus signaalide allikas soovituste jaoks. Teine oluline allikas on koost\u00f6\u00f6p\u00f5hine teave. Head omadused j\u00e4rjestamises saame traditsiooniliselt kasutaja-dokumendi maatriksi lagundamise kaudu. Kuid proovides teha sellist lagundamist, seisame silmitsi probleemidega:<\/p>\n<p>1. Meil on miljoneid dokumente ja k\u00fcmneid miljoneid kasutajaid. Maatriks ei mahtunud t\u00e4ielikult \u00fchele masinale, ja lagunemine takes palju aega.<br \/>\n2. Suurema osa sisust on s\u00fcsteemis l\u00fchike eluiga: dokumendid j\u00e4\u00e4vad asjakohaseks vaid paariks tunniks. Seet\u00f5ttu on vajalik nende vektorilise esitluse v\u00f5imalikult kiire loomine.<br \/>\n3. Kui dokument avaldatakse kohe, ei suuda seda piisav arv kasutajaid hinnata. Seet\u00f5ttu on selle vektori esitus t\u00f5en\u00e4oliselt halva kvaliteediga.<br \/>\n4. Kui kasutaja annab meeldimise v\u00f5i mitte-meeldimise, ei saa me seda kohe arvesse v\u00f5tta jaotuses.<\/p>\n<p>Nende probleemide lahendamiseks rakendasime jaotatud kasutaja-dokumentide maatriksi, millel on sagedased jooksva ajakohastamise uuendused. Kuidas see t\u00e4pselt t\u00f6\u00f6tab?<\/p>\n<p>Oletame, et meil on N masina klaster (N on sadades) ja soovime teha jaotatud maatriksi, mis ei mahtunud \u00fche masinasse. Kuidas seda jaotust teostada, et igas masinas oleks piisavalt andmeid ja samal ajal oleks arvutused s\u00f5ltumatud? <\/p>\n<p><img decoding=\"async\" alt=\"Kuidas me t\u00f6\u00f6tame soovituste kvaliteedi ja kiirusete osas\" src=\"\/wp-content\/uploads\/2020\/02\/9170b0fecb6efcd41754ec20ee539a15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKasutame eespool kirjeldatud ALS- jaotuse algoritmi. Vaatame, kuidas teostada ALS-i \u00fchte sammu jaotatult \u2014 \u00fclej\u00e4\u00e4nud sammud sarnanevad sellele. Oletame, et meil on kinnitatud dokumendi maatriks ja soovime koostada kasutaja maatriksi. Selle jaoks jagame selle N osaks ridade kaupa, iga osa sisaldab umbes sama palju ridu. Saadame igasse masinasse vastavate ridade mitte-t\u00fchjad rakud, samuti dokumendi embeddingi maatriksi (t\u00e4ielikult). Kuna selle suurus ei ole liiga suur ja kasutaja-dokumendi maatriks on tavaliselt v\u00e4ga harv, mahtuvad need andmed tavalisel masinalse.<\/p>\n<p>Seda trikki saab korrata mitme ajastu jooksul, kuni mudel konvergub, vaheldumisi muutes fikseeritud maatriksit. Kuid isegi siis v\u00f5ib maatriksi lahti\u00fctlemine kesta mitu tundi. Ja see ei lahenda probleemi, et tuleb kiiresti saada uute dokumentide embeddingeid ja uuendada nende embeddingeid, mille kohta oli mudeli koostamise hetkel v\u00e4he teavet. <\/p>\n<p>Meie abi oli mudeli kiire jooksva ajakohastamise rakendamine. Oletame, et meil on praegu koolitatud mudel. Alates selle treenimisest on ilmunud uusi artikleid, millega meie kasutajad on suhelnud, ja artikleid, millel treenimise ajal oli v\u00e4he suhtlemist. Nende artiklite embeddinge kiireks hankimiseks kasutame kasutajate embeddingeid, mis on saadud mudeli esimese suurte \u00f5ppimise k\u00e4igus, ja teeme \u00fche ALS-i sammu, et arvutada dokumendi maatriks fikseeritud kasutaja maatriksi juures. See v\u00f5imaldab embeddinge \u00fcsna kiiresti hankida \u2014 paar minutit p\u00e4rast dokumenti avaldamist \u2014 ja tihti uuendada v\u00e4rskeid dokumentide embeddinge.<\/p>\n<p>Selleks, et soovitustes arvesse v\u00f5tta inimese tegevust, ei kasuta me jooksva ajal offline re\u017eiimis saadud kasutaja embeddinge. Selle asemel teeme ALS-i sammu ja saame kasutaja aktuaalse vektori.<\/p>\n<h2>T\u00f6\u00f6tamine teise domeeni laiendamisega<\/h2>\n<p>\n<b>Kuidas kasutada kasutaja tagasisidet tekstiliste artiklite jaoks, et koostada video vektorite esitus?<\/b><\/p>\n<p>Alguses soovitasime ainult tekstilisi artikleid, seega on paljud meie algoritmid seadistatud selle t\u00fc\u00fcbi sisu jaoks. Kuid kui lisasime uut t\u00fc\u00fcpi sisu, seisis meil silmitsi mudelite kohandamise vajadus. Kuidas me lahendasime seda probleemi video n\u00e4itel? \u00dcks v\u00f5imalus oleks olnud k\u00f5ik mudelid nullist \u00fcle koolitada. Kuid see on aegan\u00f5udev ning osa algoritme n\u00f5uab koolitusandmete mahu osas, mille hulk ei ole uue t\u00fc\u00fcbi sisu jaoks alguses piisav.<\/p>\n<p>Me l\u00e4ksime teist teed ja taaskasutasime tekstide mudeleid video jaoks. Video vektorite esituse loomisel aitas meid sama ALS-i trikk. V\u00f5tsime tekstiliste artiklite alusel saadud kasutajate vektorid ja tegime ALS-i sammu, kasutades video vaatamise teavet. Nii saime vaevata video vektorite esitluse. Ja jooksva ajal arvutame lihtsalt l\u00e4hedust tekstiliste artiklite alusel saadud kasutaja vektori ja video vektori vahel.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nReaalajas soovituss\u00fcsteemi arendamine toob kaasa hulgaliselt \u00fclesandeid. Andmete kiire t\u00f6\u00f6tlemine ja ML-mudelite rakendamine, et neid andmeid t\u00f5husalt kasutada; keerukate jaotatud s\u00fcsteemide loomine, mis suudavad minimaalses ajas t\u00f6\u00f6tlema kasutaja signaale ja uusi sisu\u00fchikuid; ja palju muid \u00fclesandeid.<\/p>\n<p>Praeguses s\u00fcsteemis, mille seadet ma kirjeldasin, kasvab soovituste kvaliteet koos kasutaja tegevuse ja teenuses viibimise kestusega. Kuid siin peitub ka peamine v\u00e4ljakutse: s\u00fcsteemil on raske koheselt m\u00f5ista inimese huve, kes on v\u00e4he sisu tarbinud. Uute kasutajate soovituste paranemine on meie peamine \u00fclesanne. Me j\u00e4tkame algoritmide optimeerimist, et asjakohane sisu j\u00f5uaks kiiremini tema ajajoonele ja ebaasjakohane ei kuvata.<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.0.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.0.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 soovin r\u00e4\u00e4kida Yandex.Dzeni teenuse toimimisest ja jagada tehnilisi t\u00e4iustusi, mille rakendamine on v\u00f5imaldanud parandada 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}]}}