{"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\/sk\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","title":{"rendered":"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vol\u00e1m sa Pavel Parkhomenko, som ML v\u00fdvoj\u00e1r. V tomto \u010dl\u00e1nku by som chcel porozpr\u00e1va\u0165 o fungovan\u00ed slu\u017eby Yandex Zen a podeli\u0165 sa o technick\u00e9 vylep\u0161enia, ktor\u00fdch implement\u00e1cia zv\u00fd\u0161ila kvalitu odpor\u00fa\u010dan\u00ed. Z pr\u00edspevku sa dozviete, ako za nieko\u013eko milisek\u00fand n\u00e1js\u0165 medzi mili\u00f3nmi dokumentov tie najrelevantnej\u0161ie pre pou\u017e\u00edvate\u013ea; ako nepretr\u017eite rozklada\u0165 ve\u013ek\u00fa maticu (zlo\u017een\u00fa z mili\u00f3nov st\u013apcov a desiatok mili\u00f3nov riadkov), aby nov\u00e9 dokumenty dost\u00e1vali svoj vektor za desiatky min\u00fat; ako znovu vyu\u017ei\u0165 rozlo\u017eenie matice pou\u017e\u00edvate\u013e-\u010dl\u00e1nok, aby bolo mo\u017en\u00e9 z\u00edska\u0165 dobr\u00e9 vektorov\u00e9 zast\u00fapenie pre vide\u00e1.<\/p>\n<p><img decoding=\"async\" alt=\"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed\" 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 \/>\nNa\u0161a odpor\u00fa\u010dacia datab\u00e1za obsahuje mili\u00f3ny dokumentov r\u00f4zneho form\u00e1tu: textov\u00e9 \u010dl\u00e1nky vytvoren\u00e9 na na\u0161ej platforme a prevzat\u00e9 z extern\u00fdch str\u00e1nok, vide\u00e1, narat\u00edvy a kr\u00e1tke pr\u00edspevky. Rozvoj tak\u00e9hoto servisu je spojen\u00fd s mno\u017estvom technick\u00fdch v\u00fdziev. Niektor\u00e9 z nich s\u00fa:<\/p>\n<ul>\n<li>Rozdeli\u0165 v\u00fdpo\u010dtov\u00e9 \u00falohy: v\u0161etky \u0165a\u017ek\u00e9 oper\u00e1cie vykon\u00e1va\u0165 offline, a v re\u00e1lnom \u010dase robi\u0165 iba r\u00fdchle aplik\u00e1cie modelov, aby sme odpovedali za 100-200 ms.<\/li>\n<li>R\u00fdchlo zoh\u013eadni\u0165 akcie pou\u017e\u00edvate\u013ea. Na to je potrebn\u00e9, aby v\u0161etky udalosti okam\u017eite smerovali do odpor\u00fa\u010dania a ovplyvnili v\u00fdsledok \u010dinnosti modelov.<\/li>\n<li>Urobi\u0165 feed tak, aby sa r\u00fdchlo prisp\u00f4soboval chovaniu nov\u00fdch pou\u017e\u00edvate\u013eov. Nov\u00ed u\u017e\u00edvatelia, ktor\u00ed prich\u00e1dzaj\u00fa do syst\u00e9mu, by mali ma\u0165 pocit, \u017ee ich sp\u00e4tn\u00e1 v\u00e4zba ovplyv\u0148uje odpor\u00fa\u010dania.<\/li>\n<li>R\u00fdchlo pochopi\u0165, komu odporu\u010di\u0165 nov\u00fd \u010dl\u00e1nok.<\/li>\n<li>Operat\u00edvne reagova\u0165 na neust\u00e1le sa objavuj\u00faci nov\u00fd obsah. Desiatky tis\u00edc \u010dl\u00e1nkov vych\u00e1dza ka\u017ed\u00fd de\u0148 a mnoh\u00e9 z nich maj\u00fa obmedzen\u00fa \u017eivotnos\u0165 (povedzme, spr\u00e1vy). V tom spo\u010d\u00edva ich rozdiel od filmov, hudby a in\u00e9ho dlhodobo \u017eij\u00faceho a n\u00e1ro\u010dn\u00e9ho obsahu na v\u00fdrobu.<\/li>\n<li>Pren\u00e1\u0161a\u0165 znalosti z jednej dom\u00e9novej oblasti do druhej. Ak m\u00e1 odpor\u00fa\u010dac\u00ed syst\u00e9m vycvi\u010den\u00e9 modely pre textov\u00e9 \u010dl\u00e1nky a prid\u00e1vame do nich vide\u00e1, m\u00f4\u017eeme znovu vyu\u017ei\u0165 existuj\u00face modely, aby nov\u00fd typ obsahu bol lep\u0161ie hodnoten\u00fd.<\/li>\n<\/ul>\n<p>\nPovediem v\u00e1m, ako sme tieto \u00falohy rie\u0161ili.<\/p>\n<h2>V\u00fdber kandid\u00e1tov<\/h2>\n<p>\n<b>Ako za nieko\u013eko milisek\u00fand zn\u00ed\u017ei\u0165 mno\u017estvo zva\u017eovan\u00fdch dokumentov tis\u00edckr\u00e1t, prakticky bez zhor\u0161enia kvality hodnotenia?<\/b><\/p>\n<p>Predpokladajme, \u017ee sme tr\u00e9novali mno\u017estvo ML modelov, na ich z\u00e1klade sme generovali znaky a tr\u00e9novali sme \u010fal\u0161\u00ed model, ktor\u00fd hodnot\u00ed dokumenty pre pou\u017e\u00edvate\u013ea. V\u0161etko by bolo v poriadku, ale nem\u00f4\u017eeme len tak vzia\u0165 a vypo\u010d\u00edta\u0165 v\u0161etky znaky pre v\u0161etky dokumenty v re\u00e1lnom \u010dase, ak je t\u00fdch dokumentov mili\u00f3ny, a odpor\u00fa\u010dania mus\u00edme vytv\u00e1ra\u0165 za 100-200 ms. \u00dalohou je vybra\u0165 z mili\u00f3nov nejak\u00e9 podmno\u017estvo, ktor\u00e9 sa bude hodnoti\u0165 pre pou\u017e\u00edvate\u013ea. Tento krok sa zvy\u010dajne naz\u00fdva v\u00fdber kandid\u00e1tov. Na\u0148 s\u00fa kladen\u00e9 niektor\u00e9 po\u017eiadavky. Po prv\u00e9, v\u00fdber mus\u00ed prebieha\u0165 ve\u013emi r\u00fdchlo, aby na samotn\u00e9 hodnotenie zost\u00e1valo \u010do najviac \u010dasu. Po druh\u00e9, pri silnom zn\u00ed\u017een\u00ed po\u010dtu dokumentov na hodnotenie mus\u00edme maxim\u00e1lne zachova\u0165 relevantn\u00e9 dokumenty pre pou\u017e\u00edvate\u013ea.<\/p>\n<p>N\u00e1\u0161 princ\u00edp v\u00fdberu kandid\u00e1tov sa evolu\u010dne vyv\u00edjal a v s\u00fa\u010dasnosti sme dospeli k viacstup\u0148ov\u00e9mu sch\u00e9mu:<\/p>\n<p><img decoding=\"async\" alt=\"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed\" src=\"\/wp-content\/uploads\/2020\/02\/ed9657ed1febe871f36dc7cf7e585963.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\nNajprv sa v\u0161etky dokumenty rozdelia do skup\u00edn a z ka\u017edej skupiny sa ber\u00fa najpopul\u00e1rnej\u0161ie dokumenty. Skupinami m\u00f4\u017eu by\u0165 webov\u00e9 str\u00e1nky, t\u00e9my, klastre. Pre ka\u017ed\u00e9ho pou\u017e\u00edvate\u013ea na z\u00e1klade jeho hist\u00f3rie vyber\u00e1me najbli\u017e\u0161ie k nemu skupiny a u\u017e z nich berieme najlep\u0161ie dokumenty. Taktie\u017e pou\u017e\u00edvame kNN index na vyh\u013ead\u00e1vanie najbli\u017e\u0161\u00edch dokumentov pou\u017e\u00edvate\u013eovi v re\u00e1lnom \u010dase. Existuje nieko\u013eko met\u00f3d na vytv\u00e1ranie kNN indexu, u n\u00e1s najlep\u0161ie fungoval <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1603.09320\">HNSW<\/a><\/noindex> (Hierarchical Navigable Small World graphs). Je to hierarchick\u00fd model, ktor\u00fd umo\u017e\u0148uje za nieko\u013eko milisek\u00fand n\u00e1js\u0165 N najbli\u017e\u0161\u00edch vektorov pre pou\u017e\u00edvate\u013ea z mili\u00f3novej datab\u00e1zy. Predt\u00fdm indexujeme cel\u00fa na\u0161u datab\u00e1zu dokumentov offline. Ke\u010f\u017ee h\u013eadanie v indexe funguje pomerne r\u00fdchlo, pri pr\u00edtomnosti nieko\u013ek\u00fdch siln\u00fdch embeddingov m\u00f4\u017eeme vytvori\u0165 viacero indexov (po jednom indexe pre ka\u017ed\u00fd embedding) a obraca\u0165 sa na ka\u017ed\u00fd z nich v re\u00e1lnom \u010dase.<\/p>\n<p>M\u00e1me desiatky tis\u00edc dokumentov pre ka\u017ed\u00e9ho pou\u017e\u00edvate\u013ea. To je st\u00e1le ve\u013ea na v\u00fdpo\u010det v\u0161etk\u00fdch zobrazen\u00ed, tak\u017ee v tejto f\u00e1ze aplikujeme \u013eahk\u00e9 triedenie \u2014 zjednodu\u0161en\u00fd model \u0165a\u017ek\u00e9ho triedenia s men\u0161\u00edm po\u010dtom zobrazen\u00ed. \u00dalohou je predpoveda\u0165, ktor\u00e9 dokumenty bud\u00fa v hornej \u010dasti \u0165a\u017ek\u00e9ho modelu. Dokumenty s najvy\u0161\u0161\u00edm predik\u010dn\u00fdm hodnoten\u00edm bud\u00fa pou\u017eit\u00e9 v \u0165a\u017ekom modeli, teda v poslednej f\u00e1ze triedenia. Tento pr\u00edstup umo\u017e\u0148uje za desiatky milisek\u00fand zredukova\u0165 po\u010det dokumentov, ktor\u00e9 syst\u00e9m zva\u017euje pre pou\u017e\u00edvate\u013ea, z mili\u00f3nov na tis\u00edce.<\/p>\n<h2>Krok ALS v re\u00e1lnom \u010dase<\/h2>\n<p>\n<b>Ako zoh\u013eadni\u0165 sp\u00e4tn\u00fa v\u00e4zbu pou\u017e\u00edvate\u013ea ihne\u010f po kliknut\u00ed?<\/b><\/p>\n<p>D\u00f4le\u017eit\u00fdm faktorom v odpor\u00fa\u010daniach je \u010das odozvy na sp\u00e4tn\u00fa v\u00e4zbu pou\u017e\u00edvate\u013ea. To je obzvl\u00e1\u0161\u0165 d\u00f4le\u017eit\u00e9 pre nov\u00fdch pou\u017e\u00edvate\u013eov: ke\u010f \u010dlovek za\u010dne pou\u017e\u00edva\u0165 odpor\u00fa\u010dac\u00ed syst\u00e9m, dost\u00e1va nepersonalizovan\u00fd feed r\u00f4znych tematick\u00fdch dokumentov. Hne\u010f ako vykon\u00e1 prv\u00e9 kliknutie, je potrebn\u00e9 to ihne\u010f zoh\u013eadni\u0165 a prisp\u00f4sobi\u0165 sa jeho z\u00e1ujmom. Ak by sa v\u0161etky faktory po\u010d\u00edtali offline, r\u00fdchla reakcia syst\u00e9mu by bola nemo\u017en\u00e1 kv\u00f4li oneskoreniu. Preto je nutn\u00e9 spracov\u00e1va\u0165 akcie pou\u017e\u00edvate\u013ea v re\u00e1lnom \u010dase. Na tieto \u00fa\u010dely pou\u017e\u00edvame krok ALS v re\u00e1lnom \u010dase na vytvorenie vektorov\u00e9ho zn\u00e1zornenia pou\u017e\u00edvate\u013ea.<\/p>\n<p>Predpokladajme, \u017ee pre v\u0161etky dokumenty m\u00e1me vektorov\u00e9 zn\u00e1zornenie. Napr\u00edklad, m\u00f4\u017eeme offline na z\u00e1klade textu \u010dl\u00e1nku vytvori\u0165 embeddings pomocou ELMo, BERT alebo in\u00fdch modelov strojov\u00e9ho u\u010denia. Ako mo\u017eno z\u00edska\u0165 vektorov\u00e9 zn\u00e1zornenie pou\u017e\u00edvate\u013eov v tom istom priestore na z\u00e1klade ich interakcie v syst\u00e9me?<\/p>\n<p><b class=\"spoiler_title\">V\u0161eobecn\u00fd princ\u00edp formovania a rozkladania matice pou\u017e\u00edvate\u013e-dokument<\/b>Predpokladajme, \u017ee m\u00e1me m pou\u017e\u00edvate\u013eov a n dokumentov. O niektor\u00fdch pou\u017e\u00edvate\u013eoch s\u00fa zn\u00e1me ich preferencie k niektor\u00fdm dokumentom. T\u00fato inform\u00e1ciu m\u00f4\u017eeme predstavi\u0165 vo forme matice m x n: riadky zodpovedaj\u00fa pou\u017e\u00edvate\u013eom a st\u013apce dokumentom. Ke\u010f\u017ee v\u00e4\u010d\u0161ina dokumentov bola pou\u017e\u00edvate\u013eom neviden\u00e1, v\u00e4\u010d\u0161ina pol\u00ed matice zostane pr\u00e1zdnych, zatia\u013e \u010do in\u00e9 bud\u00fa vyplnen\u00e9. Pre ka\u017ed\u00fa interakciu (lajk, dislajk, kliknutie) je v matici priraden\u00e1 nejak\u00e1 hodnota - ale zv\u00e1\u017eme zjednodu\u0161en\u00fd model, v ktorom lajku zodpoved\u00e1 1 a dislajku \u20131.<\/p>\n<p>Rozlo\u017e\u00edme maticu na dve: P (m x d) a Q (d x n), kde d je rozmer vektorov\u00e9ho zn\u00e1zornenia (zvy\u010dajne to je mal\u00e9 \u010d\u00edslo). Ka\u017ed\u00e9mu objektu potom zodpoved\u00e1 d-rozmern\u00fd vektor (pou\u017e\u00edvate\u013eovi \u2013 riadok v matice P, dokumentu \u2013 st\u013apec v matice Q). Tieto vektory bud\u00fa embedingami pr\u00edslu\u0161n\u00fdch objektov. Na predpovedanie, \u010di sa pou\u017e\u00edvate\u013eovi dokument bude p\u00e1\u010di\u0165, sta\u010d\u00ed jednoducho vyn\u00e1sobi\u0165 ich embeddingy.<\/p>\n<p><img decoding=\"async\" alt=\"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed\" src=\"\/wp-content\/uploads\/2020\/02\/a0c721bccb3806f2c4a18693a9458a89.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJeden z mo\u017en\u00fdch sp\u00f4sobov rozlo\u017eenia matice je ALS (Alternating Least Squares). Budeme optimalizova\u0165 nasleduj\u00facu funkciu str\u00e1t:<\/p>\n<p><img decoding=\"async\" alt=\"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed\" src=\"\/wp-content\/uploads\/2020\/02\/aab8a1ae1cdf39de21e7469864c5190a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>\nTu rui je interakcia pou\u017e\u00edvate\u013ea u s dokumentom i, qi je vektor dokumentu i, pu je vektor pou\u017e\u00edvate\u013ea u.<\/p>\n<p>Potom optim\u00e1lny vektor pou\u017e\u00edvate\u013ea z h\u013eadiska priemernej kvadratickej chyby (s fixovan\u00fdmi vektormi dokumentov) sa analyticky nach\u00e1dza pomocou rie\u0161enia pr\u00edslu\u0161nej line\u00e1rnej regresie.<\/p>\n<p>Toto sa naz\u00fdva \u201ekrok ALS\u201c. A samotn\u00fd algoritmus ALS spo\u010d\u00edva v tom, \u017ee striedavo fixujeme jednu z mat\u00edc (pou\u017e\u00edvate\u013eov a \u010dl\u00e1nkov) a aktualizujeme druh\u00fa, pri\u010dom h\u013ead\u00e1me optim\u00e1lne rie\u0161enie.<\/p>\n<p>Na\u0161\u0165astie, n\u00e1jdenie vektorov\u00e9ho zn\u00e1zornenia pou\u017e\u00edvate\u013ea je pomerne r\u00fdchla oper\u00e1cia, ktor\u00fa je mo\u017en\u00e9 vykon\u00e1va\u0165 v runtime pomocou vektorov\u00fdch in\u0161trukci\u00ed. Tento trik umo\u017e\u0148uje okam\u017eite zoh\u013eadni\u0165 sp\u00e4tn\u00fa v\u00e4zbu pou\u017e\u00edvate\u013ea pri raden\u00ed. Tak\u00fd ist\u00fd embedding je mo\u017en\u00e9 vyu\u017ei\u0165 aj v kNN indexe na zlep\u0161enie v\u00fdberu kandid\u00e1tov.<\/p>\n<h2>Distribuovan\u00e1 kolaborat\u00edvna filtr\u00e1cia<\/h2>\n<p>\n<b>Ako vykon\u00e1va\u0165 inkrement\u00e1lnu distribuovan\u00fa faktoriz\u00e1ciu matice a r\u00fdchlo n\u00e1js\u0165 vektorov\u00e9 zn\u00e1zornenie nov\u00fdch \u010dl\u00e1nkov?<\/b><\/p>\n<p>Obsah nie je jedin\u00fdm zdrojom sign\u00e1lov pre odpor\u00fa\u010dania. In\u00fdm v\u00fdznamn\u00fdm zdrojom s\u00fa kolaborat\u00edvne inform\u00e1cie. Dobr\u00ed indik\u00e1tori v hodnoten\u00ed sa tradi\u010dne z\u00edskavaj\u00fa z rozlo\u017eenia matice pou\u017e\u00edvate\u013e-dokument. Av\u0161ak pri pokuse o vykonanie tak\u00e9ho rozlo\u017eenia sme sa stretli s probl\u00e9mami:<\/p>\n<p>1. M\u00e1me mili\u00f3ny dokumentov a desiatky mili\u00f3nov pou\u017e\u00edvate\u013eov. Matica sa cel\u00e1 nevojde na jednu ma\u0161inu a rozlo\u017eenie bude ve\u013emi dlh\u00e9.<br \/>\n2. V\u00e4\u010d\u0161ina obsahu v syst\u00e9me m\u00e1 kr\u00e1tku \u017eivotnos\u0165: dokumenty zost\u00e1vaj\u00fa aktu\u00e1lne len nieko\u013eko hod\u00edn. Preto je potrebn\u00e9 \u010do najr\u00fdchlej\u0161ie vytvori\u0165 ich vektorov\u00e9 zast\u00fapenie.<br \/>\n3. Ak by sme robili rozlo\u017eenie hne\u010f po publikovan\u00ed dokumentu, nebude ma\u0165 dostato\u010dn\u00fd po\u010det pou\u017e\u00edvate\u013eov na jeho hodnotenie. Preto jeho vektorov\u00e9 zast\u00fapenie bude s ve\u013ekou pravdepodobnos\u0165ou nie ve\u013emi kvalitn\u00e9.<br \/>\n4. Ak pou\u017e\u00edvate\u013e dal like alebo dislike, nebudeme m\u00f4c\u0165 okam\u017eite zoh\u013eadni\u0165 t\u00fato inform\u00e1ciu v rozlo\u017een\u00ed.<\/p>\n<p>Aby sme vyrie\u0161ili uveden\u00e9 probl\u00e9my, implementovali sme distribuovan\u00e9 rozlo\u017eenie matice pou\u017e\u00edvate\u013e-dokument s \u010dastou inkrement\u00e1lnou aktualiz\u00e1ciou. Ako presne to funguje?<\/p>\n<p>Predpokladajme, \u017ee m\u00e1me klaster z N strojov (N sa po\u010d\u00edta na stovky) a chceme vykona\u0165 na nich distribuovan\u00e9 rozlo\u017eenie matice, ktor\u00e1 sa nevojde na jednu ma\u0161inu. Ot\u00e1zka znie: ako vykona\u0165 toto rozlo\u017eenie tak, aby na ka\u017edej ma\u0161ine bolo dostatok \u00fadajov a z\u00e1rove\u0148 aby boli v\u00fdpo\u010dty nez\u00e1visl\u00e9? <\/p>\n<p><img decoding=\"async\" alt=\"Ako pracujeme na kvalite a r\u00fdchlosti odpor\u00fa\u010dan\u00ed\" src=\"\/wp-content\/uploads\/2020\/02\/9170b0fecb6efcd41754ec20ee539a15.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPou\u017eijeme vy\u0161\u0161ie op\u00edsan\u00fd algoritmus rozlo\u017eenia ALS. Uva\u017eujme, ako distribuovane vykona\u0165 jeden krok ALS \u2014 ostatn\u00e9 kroky bud\u00fa podobn\u00e9. Predpokladajme, \u017ee m\u00e1me zafixovan\u00fa maticu dokumentov a chceme vybudova\u0165 maticu pou\u017e\u00edvate\u013eov. Na tento \u00fa\u010del ju rozdel\u00edme na N \u010dast\u00ed pod\u013ea riadkov, pri\u010dom ka\u017ed\u00e1 \u010das\u0165 bude obsahova\u0165 pribli\u017ene rovnak\u00fd po\u010det riadkov. Rozposielame na ka\u017ed\u00fa ma\u0161inu nepr\u00e1zdne bunky pr\u00edslu\u0161n\u00fdch riadkov, ako aj maticu embeddingov dokumentov (cel\u00fa). Ke\u010f\u017ee m\u00e1 relat\u00edvne mal\u00fa ve\u013ekos\u0165 a matica pou\u017e\u00edvate\u013e-dokument b\u00fdva zvy\u010dajne ve\u013emi riedka, tieto \u00fadaje sa vojd\u00fa na oby\u010dajn\u00fa ma\u0161inu.<\/p>\n<p>Tento trik m\u00f4\u017eeme opakova\u0165 po\u010das viacer\u00fdch obdob\u00ed a\u017e do konvergencie modelu, pri\u010dom postupne men\u00edme fixn\u00fa maticu. Av\u0161ak aj vtedy m\u00f4\u017ee rozklad matice trva\u0165 nieko\u013eko hod\u00edn. A to nerie\u0161i probl\u00e9m, \u017ee potrebujeme r\u00fdchlo z\u00edskava\u0165 embeddingy nov\u00fdch dokumentov a aktualizova\u0165 embeddingy t\u00fdch z nich, o ktor\u00fdch bolo pri vytv\u00e1ran\u00ed modelu m\u00e1lo inform\u00e1ci\u00ed. <\/p>\n<p>Pomohlo n\u00e1m zavedenie r\u00fdchlej inkrement\u00e1lnej aktualiz\u00e1cie modelu. Predpokladajme, \u017ee m\u00e1me aktu\u00e1lne natr\u00e9novan\u00fd model. Od jeho natr\u00e9novania sa objavili nov\u00e9 \u010dl\u00e1nky, s ktor\u00fdmi na\u0161i pou\u017e\u00edvatelia interagovali, ako aj \u010dl\u00e1nky, ktor\u00e9 mali pri natr\u00e9novan\u00ed m\u00e1lo interakci\u00ed. Na r\u00fdchle z\u00edskanie embeddingu t\u00fdchto \u010dl\u00e1nkov pou\u017e\u00edvame embeddingy pou\u017e\u00edvate\u013eov z\u00edskan\u00e9 po\u010das prv\u00e9ho ve\u013ek\u00e9ho natr\u00e9novania modelu a vykon\u00e1me jeden krok ALS, aby sme vypo\u010d\u00edtali maticu dokumentov pri fixnej matici pou\u017e\u00edvate\u013eov. To n\u00e1m umo\u017e\u0148uje z\u00edska\u0165 embeddingy pomerne r\u00fdchlo \u2014 po\u010das nieko\u013ek\u00fdch min\u00fat po publikovan\u00ed dokumentu \u2014 a \u010dasto aktualizova\u0165 embeddingy nov\u00fdch dokumentov.<\/p>\n<p>Aby sa akcie \u010dloveka okam\u017eite zoh\u013eadnili pri odpor\u00fa\u010daniach, v runtime nepou\u017e\u00edvame embeddingy pou\u017e\u00edvate\u013eov z\u00edskan\u00e9 offline. Namiesto toho vykon\u00e1vame krok ALS a z\u00edskavame aktu\u00e1lny vektor pou\u017e\u00edvate\u013ea.<\/p>\n<h2>Presun na in\u00fd dom\u00e9nov\u00fd obor<\/h2>\n<p>\n<b>Ako vyu\u017ei\u0165 sp\u00e4tn\u00fa v\u00e4zbu pou\u017e\u00edvate\u013ea k textov\u00fdm \u010dl\u00e1nkom na vytvorenie vektorov\u00e9ho zast\u00fapenia videa?<\/b><\/p>\n<p>P\u00f4vodne sme odpor\u00fa\u010dali iba textov\u00e9 \u010dl\u00e1nky, preto s\u00fa mnoh\u00e9 na\u0161e algoritmy zameran\u00e9 na tento typ obsahu. Av\u0161ak pri prid\u00e1van\u00ed obsahu in\u00e9ho typu sme sa stretli s potrebou prisp\u00f4sobi\u0165 modely. Ako sme t\u00fato \u00falohu rie\u0161ili na pr\u00edklade videa? Jednou z mo\u017enost\u00ed je pre\u0161kolenie v\u0161etk\u00fdch modelov od za\u010diatku. Ale to trv\u00e1 dlho, navy\u0161e niektor\u00e9 algoritmy s\u00fa n\u00e1ro\u010dn\u00e9 na objem tr\u00e9ningovej vzorky, ktor\u00fa e\u0161te nem\u00e1me v potrebnom mno\u017estve pre nov\u00fd typ obsahu v prv\u00fdch momentoch jeho \u017eivota na slu\u017ebe.<\/p>\n<p>Zvolili sme in\u00fa cestu a znovu pou\u017eili modely textov pre vide\u00e1. Pri vytv\u00e1ran\u00ed vektorov\u00fdch reprezent\u00e1ci\u00ed vide\u00ed n\u00e1m pomohol rovnak\u00fd trik s ALS. Vzali sme vektorov\u00fa reprezent\u00e1ciu pou\u017e\u00edvate\u013eov na z\u00e1klade textov\u00fdch \u010dl\u00e1nkov a vykonali krok ALS, pri\u010dom sme vyu\u017eili inform\u00e1cie o sledovan\u00ed vide\u00ed. Takto sme bez n\u00e1mahy z\u00edskali vektorov\u00fa reprezent\u00e1ciu vide\u00ed. A v runtime jednoducho vypo\u010d\u00edtavame bl\u00edzkos\u0165 medzi vektorom pou\u017e\u00edvate\u013ea z\u00edskan\u00fdm na z\u00e1klade textov\u00fdch \u010dl\u00e1nkov a vektorom videa.<\/p>\n<h2>Z\u00e1ver<\/h2>\n<p>\nV\u00fdvoj jadra real-time odpor\u00fa\u010dacej syst\u00e9m je spojen\u00fd s mno\u017estvom \u00faloh. Je potrebn\u00e9 r\u00fdchlo spracov\u00e1va\u0165 d\u00e1ta a aplikova\u0165 met\u00f3dy strojov\u00e9ho u\u010denia na efekt\u00edvne vyu\u017eitie t\u00fdchto d\u00e1t; budova\u0165 komplexn\u00e9 distribuovan\u00e9 syst\u00e9my, ktor\u00e9 s\u00fa schopn\u00e9 v minim\u00e1lnom \u010dase spracova\u0165 pou\u017e\u00edvate\u013esk\u00e9 sign\u00e1ly a nov\u00e9 jednotky obsahu; a mno\u017estvo \u010fal\u0161\u00edch \u00faloh.<\/p>\n<p>V aktu\u00e1lnom syst\u00e9me, ktor\u00e9ho zariadenie som op\u00edsal, kvalita odpor\u00fa\u010dan\u00ed pre pou\u017e\u00edvate\u013ea rastie spolu s jeho aktivitou a d\u013a\u017ekou pobytu na slu\u017ebe. Ale samozrejme, v tom sa ukr\u00fdva aj hlavn\u00e1 zlo\u017eitosti: syst\u00e9mu sa \u0165a\u017eko hne\u010f pochopi\u0165 z\u00e1ujmy osoby, ktor\u00e1 m\u00e1lo interagovala s obsahom. Zlep\u0161i\u0165 odpor\u00fa\u010dania pre nov\u00fdch pou\u017e\u00edvate\u013eov je na\u0161ou k\u013e\u00fa\u010dovou \u00falohou. Budeme na\u010falej optimalizova\u0165 algoritmy, aby relevantn\u00fd obsah r\u00fdchlej\u0161ie prenikol do jeho feedu a nerelevantn\u00fd sa nezobrazoval.<br \/>\n<br \/>Zdroj: <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.4 - 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\/sk\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sk_SK\" \/>\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\/sk\/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\udd47Ako pracujeme na kvalite a r\u00fdchlosti v\u00fdberu odpor\u00fa\u010dan\u00ed | ProHoster","description":"Vol\u00e1m sa Pavel Parchomenko, som ML v\u00fdvoj\u00e1r. V tomto \u010dl\u00e1nku by som chcel rozpr\u00e1va\u0165 o zariaden\u00ed slu\u017eby Yandex.Zen a podeli\u0165 sa o technick\u00e9 vylep\u0161enia, ktor\u00fdch implement\u00e1cia umo\u017enila zv\u00fd\u0161i\u0165 kvalitu odpor\u00fa\u010dania.","canonical_url":"https:\/\/prohoster.info\/sk\/blog\/administrirovanie\/kak-my-rabotaem-nad-kachestvom-i-skorostyu-podbora-rekomendaczij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sk_SK","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\/sk\/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\/sk\/wp-json\/wp\/v2\/posts\/71852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/comments?post=71852"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/posts\/71852\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media\/71853"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/media?parent=71852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/categories?post=71852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sk\/wp-json\/wp\/v2\/tags?post=71852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}