{"id":53143,"date":"2019-11-24T00:00:00","date_gmt":"2019-11-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru"},"modified":"2020-02-18T14:01:00","modified_gmt":"2020-02-18T11:01:00","slug":"ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","title":{"rendered":"Iskori\u0161tenje strojnog u\u010denja u Mail.ru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/ee5728dccb94b849ad3bfd9cf84ad74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Na temelju mojih nastupa na Highload++ i DataFest Minsk 2019.<\/i><\/p>\n<p>Za mnoge danas je e-po\u0161ta nezamjenjiv dio \u017eivota na mre\u017ei. Pomo\u0107u nje obavljamo poslovnu komunikaciju, pohranjujemo razne va\u017ene informacije vezane uz financije, rezervacije hotela, narud\u017ebe i jo\u0161 mnogo toga. Sredinom 2018. godine formulirali smo produktnu strategiju razvoja e-po\u0161te. Kakva bi dana\u0161nja e-po\u0161ta trebala biti?<\/p>\n<p>E-po\u0161ta mora biti <b>pametna<\/b>, \u0161to zna\u010di pomo\u0107i korisnicima da se snalaze u sve ve\u0107em volumenu informacija: filtrirati, strukturirati i pru\u017eiti ih na najprikladniji na\u010din. Ona mora biti <b>korisna<\/b>, omogu\u0107uju\u0107i rje\u0161avanje raznih zadataka direktno u kutiji s e-po\u0161tom, na primjer, pla\u0107anje kazni (funkcija koju, na svoju \u017ealost, \u010desto koristim). I pritom, naravno, e-po\u0161ta mora osigurati informati\u010dku za\u0161titu, filtrirati spam i \u0161tititi od provale, to jest, biti <b>sigurnom<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOve smjernice definiraju niz klju\u010dnih zadataka, od kojih se mnogi mogu u\u010dinkovito rije\u0161iti pomo\u0107u strojnog u\u010denja. Evo primjera ve\u0107 aktivnih funkcionalnosti razvijenih u okviru strategije \u2014 po jednom za svaku smjernicu.<\/p>\n<ul>\n<li><b>Pametni odgovor<\/b>. U e-po\u0161ti postoji funkcionalnost pametnog odgovora. Neuronska mre\u017ea analizira tekst e-poruke, razumije njezin smisao i cilj, i kao rezultat nudi tri najprikladnija odgovora: pozitivni, negativni i neutralni. To zna\u010dajno \u0161tedi vrijeme prilikom odgovaranja na e-poruke, a \u010desto omogu\u0107ava i neobi\u010dne i zabavne odgovore.\n<\/li>\n<li><b>Grupiranje e-poruka<\/b>, koje se odnose na narud\u017ebe u internetskim trgovinama. \u010cesto obavljamo kupovine na internetu, i obi\u010dno trgovine mogu slati nekoliko poruka za svaku narud\u017ebu. Na primjer, od AliExpressa, najve\u0107e platforme, dolazi puno poruka za jednu narud\u017ebu, a procijenili smo da u terminalnom slu\u010daju njihov broj mo\u017ee dosti\u0107i do 29. Zato pomo\u0107u modela prepoznavanja imenskih entiteta izdvajamo broj narud\u017ebe i druge informacije iz teksta i grupiramo sve poruke u jedan nit. Tako\u0111er prikazujemo osnovne informacije o narud\u017ebi u posebnoj traci, \u0161to olak\u0161ava rad s ovim tipom poruka.\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8b37b0bf0c0d152498027bc25d476128.jpg\" style=\"display:block;margin: 0 auto;\" \/>\n<\/li>\n<li><b>Antiphishing<\/b>Phishing je posebno opasan oblik prevarantskih e-poruka kojima zlonamjernici poku\u0161avaju do\u0107i u posjed financijskih informacija (uklju\u010duju\u0107i podatke o korisni\u010dkim bankovnim karticama) i prijavnih podataka. Takve e-poruke imitiraju prave, one koje \u0161alje servis, \u010dak i vizualno. Stoga uz pomo\u0107 ra\u010dunalnog vida prepoznajemo logotipe i stil formatiranja e-poruka velikih kompanija (npr. Mail.ru, Sber, Alfa) i uzimamo to u obzir zajedno s tekstom i drugim karakteristikama u na\u0161im klasifikatorima spama i phishinga.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Strojno u\u010denje<\/h2>\n<p>\nMalo o strojnom u\u010denju u po\u0161ti op\u0107enito. Po\u0161ta je visoko optere\u0107en sustav: na na\u0161im serverima prolazi u prosjeku 1,5 milijardi e-poruka dnevno za 30 milijuna korisnika DAU. Sve potrebne funkcije i zna\u010dajke opslu\u017euje oko 30 sustava strojnog u\u010denja. <\/p>\n<p>Svaka e-poruka prolazi kroz cijeli proces klasifikacije. Prvo odbacujemo spam i zadr\u017eavamo dobre e-poruke. Korisnici \u010desto ne primje\u0107uju rad anti-spama jer 95\u201499 % spama ne zavr\u0161i ni u odgovaraju\u0107oj mapi. Prepoznavanje spama je vrlo va\u017ean dio na\u0161eg sustava i najzahtjevniji, jer u podru\u010dju anti-spama neprekidno dolazi do prilagodbe izme\u0111u sustava za\u0161tite i napada, \u0161to predstavlja kontinuirani in\u017eenjerski izazov za na\u0161 tim.<\/p>\n<p>Nakon toga razdvajamo e-poruke poslane od ljudi i robota. E-poruke od ljudi su najva\u017enije, stoga im pru\u017eamo funkcije poput pametnog odgovora. E-poruke od robota dijele se na dva dijela: transakcijske \u2014 to su va\u017ene e-poruke od servisa, na primjer, potvrde o kupnji ili rezervaciji hotela, financije, i informacijske \u2014 to su poslovni oglasi, popusti. <\/p>\n<p>Smatramo da su transakcijske e-poruke po va\u017enosti jednake osobnoj prepisci. One bi trebale biti pri ruci, jer \u010desto je potrebno brzo prona\u0107i informacije o narud\u017ebi ili rezervaciji avio karte, a mi tro\u0161imo vrijeme tra\u017ee\u0107i te e-poruke. Stoga za prakti\u010dnost automatski dijelimo na \u0161est osnovnih kategorija: putovanja, narud\u017ebe, financije, karte, registracije i, naposljetku, kazne.<\/p>\n<p>Informativna pisma su najve\u0107a i, vjerojatno, manje va\u017ena grupa koja ne zahtijeva trenutnu reakciju, jer se ni\u0161ta bitno ne mijenja u \u017eivotu korisnika ako ne pro\u010dita takvo pismo. U na\u0161em novom su\u010delju, sakupljamo ih u dvije teme: dru\u0161tvene mre\u017ee i newslettere, \u010dime vizualno \u010distimo inbox i ostavljamo na vidiku samo va\u017ene poruke.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/175773879daaa29d1542a98070cb7972.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Eksploatacija<\/h3>\n<p>\nVeliki broj sustava donosi mnoge pote\u0161ko\u0107e u eksploataciji. Naime, modeli s vremenom propadaju, kao i svaki softver: kvarovi, otkazivanje strojeva, nakupljanje pogre\u0161nog koda. Tako\u0111er, podaci se neprestano mijenjaju: dodaju se novi, transformira se obrazac pona\u0161anja korisnika itd., tako da \u0107e model bez odgovaraju\u0107e podr\u0161ke s vremenom raditi sve lo\u0161ije. <\/p>\n<p>Ne smijemo zaboraviti ni to da \u0161to dublje strojno u\u010denje prodire u \u017eivot korisnika, to ve\u0107i utjecaj imaju na ekosustav, te su samim tim i financijski gubici ili dobitci koje igra\u010di tr\u017ei\u0161ta mogu ostvariti ve\u0107i. Stoga su igra\u010di sve \u010de\u0161\u0107e prilago\u0111eni radu ML algoritama (klasi\u010dni primjeri \u2014 reklama, pretra\u017eivanje i ve\u0107 spomenuti anti-spam).<\/p>\n<p>Tako\u0111er, zadaci strojnog u\u010denja imaju posebnost: svaka, \u010dak i neznatna, promjena u sustavu mo\u017ee stvoriti puno posla s modelom: rad s podacima, ponovno u\u010denje, implementacija, \u0161to mo\u017ee potrajati tjednima ili mjesecima. Stoga, \u0161to br\u017ee se mijenja okru\u017eenje u kojem operiraju va\u0161i modeli, to vi\u0161e napora zahtijeva njihovo odr\u017eavanje. Tim mo\u017ee stvoriti mno\u0161tvo sustava i radovati se tome, a zatim tro\u0161iti gotovo sve resurse na njihovo odr\u017eavanje, bez mogu\u0107nosti da naprave ne\u0161to novo. S takvom smo se situacijom jednom prilikom susreli u timu anti-spama. I donijeli smo o\u010digledan zaklju\u010dak da odr\u017eavanje treba automatizirati.<\/p>\n<h3>Automatizacija<\/h3>\n<p>\n\u0160to se mo\u017ee automatizirati? U stvari, gotovo sve. Istaknuo sam \u010detiri podru\u010dja koja definiraju infrastrukturu strojnog u\u010denja:<\/p>\n<ul>\n<li>prikupljanje podataka;\n<\/li>\n<li>dodatno u\u010denje;\n<\/li>\n<li>implemantacija;\n<\/li>\n<li>testiranje &amp; monitoring.\n<\/li>\n<\/ul>\n<p>\nAko je okru\u017eenje nestabilno i stalno se mijenja, tada je cijela infrastruktura oko modela puno va\u017enija od samog modela. To mo\u017ee biti stari i dobri linearni klasifikator, ali ako se pravilno unesu zna\u010dajke i osigura dobra povratna informacija od korisnika, on \u0107e raditi mnogo bolje od hipermoderne State-Of-The-Art modela sa svim dodatcima.<\/p>\n<h4>Povratna informacija<\/h4>\n<p>\nOvaj ciklus uklju\u010duje prikupljanje podataka, usavr\u0161avanje i implementaciju \u2014 zapravo, cijeli ciklus a\u017euriranja modela. Za\u0161to je to va\u017eno? Pogledajte grafikon registracija u po\u0161ti:<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/f3c98bd49a101754cf299821a40e2b8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRazvijatelj strojnog u\u010denja je implementirao model protiv botova koji sprje\u010dava botove u registraciji e-po\u0161te. Grafikon pada na razinu gdje ostaju samo stvarni korisnici. Sve je fantasti\u010dno! No, nakon \u010detiri sata, botovi prilago\u0111avaju svoje skripte i sve se vra\u0107a u normalu. U ovoj implementaciji, razvojnici su potro\u0161ili mjesec dana dodaju\u0107i zna\u010dajke i usavr\u0161avaju\u0107i model, ali spameru je trebalo samo \u010detiri sata da se prilagodi.<\/p>\n<p>Kako ne bi bilo tako bolno i da ne bi kasnije sve morali raditi iznova, potrebno je od samoga po\u010detka razmisliti o tome kako \u0107e izgledati ciklus povratne informacije i \u0161to \u0107emo u\u010diniti ako se okru\u017eenje promijeni. Po\u010dnimo s prikupljanjem podataka \u2014 to je gorivo za na\u0161e algoritme.<\/p>\n<h2>Prikupljanje podataka<\/h2>\n<p>\nJasno je da moderni neuronski mre\u017eama, \u0161to vi\u0161e podataka, to bolje, a njih u biti generiraju korisnici proizvoda. Korisnici nam mogu pomo\u0107i u ozna\u010davanju podataka, ali ne smijemo zloupotrebljavati to, jer \u0107e se korisnicima u nekom trenutku zasititi usavr\u0161avanja na\u0161ih modela i pre\u0107i \u0107e na drugi proizvod. <\/p>\n<p>Jedna od naj\u010de\u0161\u0107ih gre\u0161aka (ovdje se referiram na Andrew Ng) je prevelika orijentacija na metrike na testnoj bazi podataka, a ne na povratnu informaciju korisnika, \u0161to je zapravo glavno mjerilo kvalitete rada, jer stvaramo proizvod za korisnika. Ako korisniku nije jasno ili mu se ne svi\u0111a kako model radi, tada je sve uzaludno. <\/p>\n<p>Stoga korisnik uvijek treba imati mogu\u0107nost glasovati, trebamo mu dati alat za povratne informacije. Ako mislimo da je u po\u0161tanski sandu\u010di\u0107 stiglo pismo vezano uz financije, potrebno ga je ozna\u010diti kao 'financije' i osmisliti gumb koji korisnik mo\u017ee pritisnuti i re\u0107i da to nije financije.<\/p>\n<h3>Kvaliteta povratne informacije<\/h3>\n<p>\nRazgovarajmo o kvaliteti povratnih informacija korisnika. Prvo, vi i korisnici mo\u017eete ulo\u017eit razli\u010dita zna\u010denja u jedan pojam. Na primjer, vi i menad\u017eeri proizvoda smatrate da su \u201efinancije\u201c poruke iz banke, dok korisnik smatra da i pismo od bake o mirovini spada u financije. Drugo, postoje korisnici koji bez razmi\u0161ljanja vole pritiskati gumbe bez ikakve logike. Tre\u0107e, korisnik mo\u017ee duboko grije\u0161iti u svojim zaklju\u010dcima. Jasni primjer iz na\u0161e prakse je implementacija klasifikatora <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B8%D0%B3%D0%B5%D1%80%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0\">nigerijske ne\u017eeljene po\u0161te<\/a><\/noindex>, veoma zabavne vrste ne\u017eeljene po\u0161te, gdje korisniku nude da preuzme nekoliko milijuna dolara od iznenada prona\u0111enog daljnjeg ro\u0111aka u Africi. Nakon implementacije ovog klasifikatora provjerili smo klikove \u201eNije ne\u017eeljeno\u201c na te poruke i ispalo je da je 80% od njih so\u010dna nigerijska ne\u017eeljena po\u0161ta, \u0161to ukazuje na to da korisnici mogu biti izuzetno naivni.<\/p>\n<p>I ne zaboravimo da ne samo ljudi mogu pritiskati gumbe, ve\u0107 i razni botovi koji se pretvaraju da su preglednici. Tako da sirova povratna informacija nije pogodna za obuku. \u0160to se mo\u017ee u\u010diniti s ovom informacijom?<\/p>\n<p>Primjenjujemo dva pristupa: <\/p>\n<ul>\n<li><b>Povratne informacije iz povezane ML<\/b>. Na primjer, imamo online sustav protiv botova koji, kao \u0161to sam ve\u0107 spomenuo, donosi brze odluke na temelju ograni\u010denog broja karakteristika. I postoji drugi, sporiji sustav koji radi postfaktum. Ima vi\u0161e podataka o korisniku, njegovom pona\u0161anju itd. Kao rezultat toga, donosi se najpromi\u0161ljenija odluka, stoga ima vi\u0161u to\u010dnost i potpunost. Razliku u radu ovih sustava mo\u017eemo usmjeriti u prvi kao podatke za obuku. Na taj na\u010din, jednostavniji sustav \u0107e uvijek nastojati pribli\u017eiti se performansama slo\u017eenijeg.\n<\/li>\n<li><b>Klasifikacija klikova<\/b>. Mo\u017eete jednostavno klasificirati svaki korisnikov klik, procijeniti njegovu valjanost i mogu\u0107nost kori\u0161tenja. To radimo u anti-spamu e-po\u0161te, koriste\u0107i korisni\u010dke zna\u010dajke, njegovu povijest, zna\u010dajke po\u0161iljatelja, sam tekst i rezultat rada klasifikatora. Na kraju dobivamo automatski sustav koji validira korisni\u010dke povratne informacije. Kako se njega treba manje \u010desto dotjerivati, njegov rad mo\u017ee postati osnovni za sve druge sustave. Glavni prioritet u ovom modelu je preciznost, jer je obu\u010davanje modela na neto\u010dnim podacima opasno. \n<\/li>\n<\/ul>\n<p>\nDok \u010distimo podatke i dotjerujemo na\u0161e ML sustave, ne smijemo zaboraviti na korisnike, jer za nas tisu\u0107e, milijuni gre\u0161aka na grafikonu su statistika, a za korisnika svaka gre\u0161ka je tragedija. Osim \u0161to korisnicima trebaju na\u010dini kako pre\u017eivjeti va\u0161u gre\u0161ku u proizvodu, oni nakon povratne informacije o\u010dekuju isklju\u010denje sli\u010dnih situacija u budu\u0107nosti. Stoga, uvijek treba davati korisnicima ne samo mogu\u0107nost glasanja, ve\u0107 i ispravljanje pona\u0161anja ML sustava, stvaraju\u0107i, na primjer, personalizirane heuristike za svaki klik povratne informacije; u slu\u010daju e-po\u0161te to mo\u017ee biti mogu\u0107nost filtriranja sli\u010dnih poruka po po\u0161iljatelju i naslovu za tog korisnika.<\/p>\n<p>Tako\u0111er je potrebno, na temelju nekih izvje\u0161taja ili podnesaka u podr\u0161ci, poluautomatski ili ru\u010dno dotjerati model kako drugi korisnici ne bi trpjeli zbog sli\u010dnih problema.<\/p>\n<h3>Heuristike za obu\u010davanje<\/h3>\n<p>\nS tim heuristikama i naslije\u0111enim rje\u0161enjima postoje dva problema. Prvi je u tome \u0161to je stalno rastu\u0107i broj naslije\u0111enih rje\u0161enja te\u0161ko odr\u017eavati, da ne govorimo o njihovoj kvaliteti i radu na du\u017ee staze. Drugi problem je taj \u0161to gre\u0161ka mo\u017eda nije u\u010destala, i nekoliko klikova za obu\u010davanje modela mo\u017ee biti nedovoljno. \u010cinilo bi se da se ova dva nespojiva efekta mogu zna\u010dajno ubla\u017eiti primjenom sljede\u0107eg pristupa.<\/p>\n<ol>\n<li>Stvaramo privremeno naslije\u0111eno rje\u0161enje. \n<\/li>\n<li>Usmjeravamo podatke s njega u model, koji se redovito obu\u010dava, uklju\u010duju\u0107i i na dobivenim podacima. Ovdje je, naravno, va\u017eno da heuristika ima visoku preciznost kako bi se ne smanjivala kvaliteta podataka u trening setu. \n<\/li>\n<li>Zatim postavljamo nadzor na aktiviranje '\u0161take', i ako nakon nekog vremena \u0161taka vi\u0161e ne aktivira i potpuno se pokriva modelom, mo\u017eemo je slobodno ukloniti. Sada se ovaj problem te\u0161ko mo\u017ee ponoviti.\n<\/li>\n<\/ol>\n<p>\nStoga je vojska \u0161taka vrlo korisna. Najva\u017enije je da im slu\u017eba bude hitna, a ne stalna. <\/p>\n<h2>Daljnje u\u010denje<\/h2>\n<p>\nDaljnje u\u010denje je proces dodavanja novih podataka, koji su prikupljeni kao rezultat povratnih informacija od korisnika ili drugih sustava, i obu\u010davanje postoje\u0107eg modela na tim podacima. S daljnjim u\u010denjem mogu se javiti brojne pote\u0161ko\u0107e:<\/p>\n<ol>\n<li>Model mo\u017eda jednostavno ne podr\u017eava daljnje u\u010denje, ve\u0107 se mora u\u010diti ispo\u010detka. \n<\/li>\n<li>Nigdje u knjizi prirode nije napisano da \u0107e daljnje u\u010denje nu\u017eno pobolj\u0161ati kvalitetu rada na produkciji. \u010cesto se doga\u0111a upravo suprotno, \u0161to zna\u010di da mo\u017ee do\u0107i do pogor\u0161anja.\n<\/li>\n<li>Promjene mogu biti nepredvidive. To je dovoljno delikatna situacija koju smo sami uo\u010dili. \u010cak i ako novi model u A\/B testu pokazuje sli\u010dne rezultate u odnosu na trenutni, to uop\u0107e ne zna\u010di da \u0107e raditi identi\u010dno. Njihov rad mo\u017ee se razlikovati za jedan posto, \u0161to mo\u017ee donijeti nove gre\u0161ke ili vratiti ve\u0107 ispravljene stare. S trenutnim gre\u0161kama ve\u0107 znamo \u017eivjeti, a kada se javi veliki broj novih gre\u0161aka, korisnik tako\u0111er mo\u017ee ne razumjeti \u0161to se doga\u0111a, jer o\u010dekuje predvidivo pona\u0161anje.\n<\/li>\n<\/ol>\n<p>\nZbog toga je najva\u017enije u daljnjem u\u010denju garantirati pobolj\u0161anje modela, ili barem ne pogor\u0161ati ga. <\/p>\n<p>Prvo \u0161to pada na pamet kada govorimo o daljnjem u\u010denju je pristup Aktivnog u\u010denja. \u0160to to zna\u010di? Na primjer, klasifikator odre\u0111uje da li je poruka u vezi s financijama, i oko granice njegove odluke dodajemo uzorak ozna\u010denih primjera. To dobro funkcionira, na primjer, u reklami, gdje ima puno povratnih informacija i mogu\u0107e je obu\u010davati model u stvarnom vremenu. A ako je povratnih informacija malo, dobivamo jako pristran uzorak u odnosu na produkcijsku distribuciju podataka, na temelju kojeg se ne mo\u017ee procijeniti pona\u0161anje modela tijekom kori\u0161tenja.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/fd1b3e07bfaf896dde3248e43537f61a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa\u0161 cilj je zapravo odr\u017eati stare uzorke, ve\u0107 poznate modele i usvojiti nove. Ovdje je va\u017ena kontinuitet. Model koji smo \u010desto s velikim trudom razvili, ve\u0107 radi, stoga se mo\u017eemo osloniti na njegovu u\u010dinkovitost. <\/p>\n<p>U mailovima se koriste razli\u010diti modeli: stabla, linearni i neuronske mre\u017ee. Za svaki model radimo svoj algoritam za daljnje u\u010denje. U procesu daljnjeg u\u010denja dobivamo ne samo nove podatke, ve\u0107 i \u010desto nove karakteristike koje \u0107emo uzeti u obzir u svim donjim algoritmima.<\/p>\n<h3>Linearni modeli<\/h3>\n<p>\nPretpostavimo da imamo logisti\u010dku regresiju. Sastavljamo gubitak modela iz sljede\u0107ih komponenti:<\/p>\n<ul>\n<li>LogLoss na novim podacima;\n<\/li>\n<li>regulariziramo te\u017eine novih karakteristika (stare ne diramo);\n<\/li>\n<li>u\u010dimo i na starim podacima kako bismo sa\u010duvali stare uzorke;\n<\/li>\n<li>i, mo\u017eda najva\u017enije: dodajemo Harmonic Regularization, koja jam\u010di da se te\u017eine ne\u0107e zna\u010dajno mijenjati u odnosu na stari model.\n<\/li>\n<\/ul>\n<p>\nBudu\u0107i da svaki sastojak gubitka ima koeficijente, mo\u017eemo odabrati optimalne vrijednosti za na\u0161 zadatak tijekom kri\u017enog validiranja ili prema produktnim zahtjevima.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/00ae86d23afb780f5e260e61f833d4bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Stabla<\/h3>\n<p>\nPre\u0111imo na stabla odluka. Razvili smo sljede\u0107i algoritam za daljnje u\u010denje stabala:<\/p>\n<ol>\n<li>Na produkciji radi \u0161uma od 100\u2014300 stabala, koja je obu\u010dena na starom skupu podataka.\n<\/li>\n<li>Na kraju uklanjamo M = 5 komada i dodajemo 2M = 10 novih, obu\u010dene na cijelom skupu podataka, ali s visokim te\u017einama na novim podacima, \u0161to prirodno jam\u010di inkrementalnu promjenu modela.\n<\/li>\n<\/ol>\n<p>\nO\u010digledno je da se s vremenom broj stabala znatno pove\u0107ava i da treba povremeno skratiti, da bismo stigli u vremenske okvire. Za to koristimo svima poznatu Knowledge Distillation (KD). Ukratko o principu njegovog rada.<\/p>\n<ol>\n<li>Imamo trenutni \"slo\u017eeni\" model. Pokre\u0107emo ga na trening skupu podataka i dobivamo raspodjelu vjerojatnosti klasa na izlazu.\n<\/li>\n<li>Nakon toga u\u010dimo u\u010denik model (model s manjim brojem stabala u ovom slu\u010daju) da ponavlja rezultate rada modela, koriste\u0107i raspodjelu klasa kao ciljnu varijablu.\n<\/li>\n<li>Va\u017eno je napomenuti da ne koristimo markup skupa podataka, stoga mo\u017eemo koristiti proizvoljne podatke. Naravno, koristimo uzorak podataka iz stvarne produkcije kao obu\u010deni set za u\u010denik model. Na taj na\u010din, treniraju\u0107i set omogu\u0107ava nam osiguravanje ta\u010dnosti modela, dok uzorak toka garantira sli\u010dnu izvedbu na produkcijskom rasporedu, kompenziraju\u0107i pomak obu\u010dene skupine.\n<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/3fdfcb9b1e5a6fa824226a429afc475a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKombinacija ove dvije metode (dodavanje stabala i povremeno smanjenje njihovog broja putem Knowledge Distillation) osigurava uvo\u0111enje novih uzoraka i potpunu kontinuitet.<\/p>\n<p>Pomo\u0107u KD tako\u0111er razlikujemo operacije s karakteristikama modela, na primjer, uklanjanje karakteristika i rad s nedostacima. U na\u0161em slu\u010daju imamo nekoliko va\u017enih statisti\u010dkih karakteristika (prema po\u0161iljateljima, tekstualnim hash-ima, URL-ovima itd.) koje se \u010duvaju u bazi podataka i imaju tendenciju da zatajivaju. Takvom razvoju doga\u0111aja model, naravno, nije pripremljen, jer u treniraju\u0107em setu ne postoje situacije zatajivanja. U takvim slu\u010dajevima kombiniramo KD tehnike i augmentaciju: za obu\u010deni set dijela podataka uklanjamo ili nultaamo potrebne karakteristike, dok originalne oznake (izlazi trenutnog modela) uzimamo iz prvotnog, model u\u010denik u\u010di ponavljati tu raspodjelu.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/5e1f5af9a359646a49f4fe88ffed1025.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrimijetili smo da \u0161to ozbiljnija manipulacija modelima se doga\u0111a, potrebniji je ve\u0107i postotak uzorka toka.<\/p>\n<p>Za uklanjanje karakteristika, najjednostavnije operacije, potrebna je samo mala koli\u010dina toka, jer se mijenja samo nekoliko karakteristika, a trenutni model je u\u010dio na istom setu \u2014 razlika je minimalna. Za pojednostavljenje modela (smanjenje broja stabala nekoliko puta) ve\u0107 je potrebno 50 na 50. A za nedostatke va\u017enih statisti\u010dkih karakteristika koje zna\u010dajno uti\u010du na performanse modela, potrebno je jo\u0161 vi\u0161e toka da se uskladi rad novog modela otpornog na nedostatke na svim vrstama pisama. <\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8f3729cfff43be9ecdc47d532daa8d6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>FastText<\/h3>\n<p>\nPre\u0111imo na FastText. Podsje\u0107am da je prikaz (Embedding) rije\u010di zbroj embeddinga same rije\u010di i svih njezinih slova N-grama, obi\u010dno trigrami. Kako trigrami mogu biti prili\u010dno brojni, koristi se Bucket Hashing, odnosno pretvorba cijelog prostora u odre\u0111eni fiksni hash map. U kona\u010dnici, matrica te\u017eina dobiva dimenzije unutarnjeg sloja prema broju rije\u010di + bucketima. <\/p>\n<p>Tijekom fino pode\u0161avanja pojavljuju se nove zna\u010dajke: rije\u010di i trigrami. U standardnom fino pode\u0161avanju od Facebooka ne doga\u0111a se ni\u0161ta zna\u010dajno. Fino pode\u0161avaju se samo stare te\u017eine s unakrsnom entropijom na novim podacima. Stoga, nove zna\u010dajke se ne koriste, a ovaj pristup, naravno, ima sve navedene nedostatke povezane s nepredvidivo\u0161\u0107u modela u produkciji. Zato smo malo doradili FastText. Dodajemo sve nove te\u017eine (rije\u010di i trigrami), fino pode\u0161avamo cijelu matricu s unakrsnom entropijom i dodajemo harmonijsku regularizaciju po analogiji s linearnim modelom, koja garantira neznatnu promjenu starih te\u017eina.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/4491639587d1c91ac91d77b587ee0111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>CNN<\/h3>\n<p>\nSa konvolucijskim mre\u017eama je malo slo\u017eenije. Ako se u CNN-u fine pode\u0161avaju posljednji slojevi, tada se naravno mo\u017ee primijeniti harmonijska regularizacija i garantirati kontinuitet. No, u slu\u010daju da je potrebna fina prilagodba cijele mre\u017ee, tada takvu regularizaciju vi\u0161e nije mogu\u0107e primijeniti na sve slojeve. Me\u0111utim, postoji opcija s u\u010denjem komplementarnih embeddinga putem Triplet Loss (<noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1503.03832\">izvorni \u010dlanak<\/a><\/noindex>).<\/p>\n<h4>Triplet Loss<\/h4>\n<p>\nNa primjeru zadatka protiv ribolovnih prevara opisa\u0107emo u op\u0107im crtama Triplet Loss. Uzimamo na\u0161 logotip, kao i pozitivne i negativne primjere logotipa drugih tvrtki. Minimizira se udaljenost izme\u0111u prvih i maksimizira se udaljenost izme\u0111u drugih, pri \u010demu to radimo s malim odstupanjem kako bismo osigurali ve\u0107u kompaktnost klasa. <\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/dc8547fa042286798eb5c2f0887c4da6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAko fino pode\u0161avamo mre\u017eu, potpuno se mijenja metri\u010dki prostor, a on postaje apsolutno nespojiv s prethodnim. To je ozbiljan problem u zadacima koji koriste vektore. Da bismo zaobi\u0161li ovaj problem, tijekom u\u010denja \u0107emo ubacivati stare embeddinge.<\/p>\n<p>Dodali smo nove podatke u trening set i iz temelja obu\u010davamo drugu verziju modela. U drugoj fazi dora\u0111ujemo na\u0161u mre\u017eu (Finetuning): prvo se obu\u010dava posljednji sloj, a zatim se cijela mre\u017ea otklju\u010dava. Tijekom sastavljanja tripleta samo dio embedovanja izra\u010dunavamo pomo\u0107u obu\u010davanog modela, dok ostale izra\u010dunavamo pomo\u0107u starog. Na taj na\u010din, tijekom dopunjavanja osiguravamo uskla\u0111enost metri\u010dkih prostora v1 i v2. To je svojevrsna verzija harmoni\u010dne regularizacije.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/854d4fcc97775b24e6863cc38743cd27.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Cijela arhitektura<\/h3>\n<p>\nAko razmatramo cijeli sustav na primjeru antispama, modeli nisu izolirani, ve\u0107 su ulo\u017eeni jedan u drugi. Uzimamo slike, tekst i druge znakove, a pomo\u0107u CNN-a i Fast Text-a dobivamo embedovanja. Zatim se na embedovanja primjenjuju klasifikatori koji daju rezultate za razli\u010dite klase (tipovi poruka, spam, prisutnost logotipa). Rezultati i zna\u010dajke zatim ulaze u \u0161umu drve\u0107a za dono\u0161enje kona\u010dne odluke. Odre\u0111eni klasifikatori u ovoj shemi omogu\u0107uju bolje tuma\u010denje rezultata rada sustava i preciznije dopunjavanje komponenata u slu\u010daju problema, nego kada bi se svi podaci u sirovom obliku davali u drve\u0107e odluka.<\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/30effc5ef7398db5f085b6dd415647d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa kraju jam\u010dimo nasljednost na svakoj razini. Na donjoj razini u CNN-u i Fast Text-u koristimo harmoni\u010dnu regularizaciju, za klasifikatore u sredini \u2014 tako\u0111er harmoni\u010dnu regularizaciju i kalibraciju rezultata za uskla\u0111enost distribucije vjerojatnosti. A boosting drve\u0107a se obu\u010dava inkrementalno ili pomo\u0107u Knowledge Distillation.<\/p>\n<p>Op\u0107enito, podr\u0161ka za takav slo\u017eeni sustav strojne obrade obi\u010dno predstavlja pote\u0161ko\u0107u, jer svaki komponent na donjoj razini vodi do a\u017euriranja cijelog sustava iznad. Me\u0111utim, s obzirom na to da se u na\u0161em setupu svaka komponenta malo mijenja i da je uskla\u0111ena s prethodnom, cijeli sustav se mo\u017ee a\u017eurirati u dijelovima bez potrebe za ponovnim u\u010denjem cijele strukture, \u0161to omogu\u0107uje odr\u017eavanje bez ozbiljnog preoptere\u0107enja. <\/p>\n<h2>Deploy<\/h2>\n<p>\nRazgovarali smo o prikupljanju podataka i doradi razli\u010ditih tipova modela, stoga prelazimo na njihovu implementaciju u produkcijsko okru\u017eenje.<\/p>\n<h3>A\/B testiranje<\/h3>\n<p>\nKao \u0161to sam ranije spomenuo, u procesu prikupljanja podataka obi\u010dno dobijamo pristrasnu uzorak koja ne omogu\u0107ava procjenu performansi modela u produkciji. Stoga je prilikom implementacije modela nu\u017eno usporediti ga s prethodnom verzijom kako bismo razumjeli kako se stvari zapravo odvijaju, odnosno provoditi A\/B testove. Stvarno, proces implementacije i analiza rezultata prili\u010dno su rutinski i odli\u010dno se mogu automatizirati. Uklanjamo na\u0161e modele postupno na 5%, 30%, 50% i 100% korisnika, prikupljaju\u0107i sve dostupne metrike o odgovorima modela i povratnim informacijama korisnika. U slu\u010daju ozbiljnih odstupanja, automatski vra\u0107amo model, a za ostale slu\u010dajeve, nakon \u0161to prikupimo dovoljno klikova korisnika, donosimo odluku o pove\u0107anju postotka. Na kraju, novu verziju modela dovodimo do 50% korisnika potpuno automatski, dok odobrenje za implementaciju na cijeloj publici daje osoba, iako se i ovaj korak mo\u017ee automatizirati.<\/p>\n<p>Me\u0111utim, proces A\/B testiranja pru\u017ea prostor za optimizaciju. Naime, svaki A\/B test traje dovoljno dugo (u na\u0161em slu\u010daju traje od 6 do 24 sata, ovisno o koli\u010dini povratnih informacija), \u0161to ga \u010dini prili\u010dno skupim i s ograni\u010denim resursima. Osim toga, potrebno je imati dovoljno visok postotak prometa za test kako bismo ubrzali ukupno vrijeme A\/B testiranja (prikupljanje statisti\u010dki zna\u010dajnog uzorka za procjenu metrika na malom postotku mo\u017ee trajati jako dugo), \u0161to \u010dini broj A\/B slotova izuzetno ograni\u010denim. O\u010digledno je da trebamo uklju\u010diti u test samo najperspektivnije modele, kojih u procesu dodatnog u\u010denja dobijemo prili\u010dno puno.<\/p>\n<p>Za rje\u0161avanje ovog zadatka obu\u010dili smo poseban klasifikator koji predvi\u0111a uspje\u0161nost A\/B testa. Kao karakteristike uzimamo statistiku odluka, Preciznost, Povrat i druge metrike na obu\u010davaju\u0107em skupu, na odvojenom i na uzorku s prometa. Tako\u0111er uspore\u0111ujemo model s trenutnim u produkciji, s heuristikama i uzimamo u obzir slo\u017eenost (Complexity) modela. Kori\u0161tenjem svih ovih karakteristika, klasifikator obu\u010den na povijesti testova ocjenjuje kandidate modela, u na\u0161em slu\u010daju to su \u0161ume drve\u0107a, i donosi odluku koji od njih pustiti u A\/B test. <\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/41b121987209a663075be399e83f5a50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nU trenutku implementacije, ovaj pristup je omogu\u0107io vi\u0161estruko pove\u0107anje broja uspje\u0161nih A\/B testova.<\/p>\n<h3>Testiranje &amp; pra\u0107enje<\/h3>\n<p>\nTestiranje i pra\u0107enje, \u010dudno kako zvu\u010dalo, ne \u0161tete na\u0161em zdravlju; naprotiv, pobolj\u0161avaju ga i osloba\u0111aju nas od vi\u0161ka stresa. Testiranje mo\u017ee sprije\u010diti kvar, dok pra\u0107enje omogu\u0107ava pravovremeno otkrivanje, smanjuju\u0107i utjecaj na korisnike.<\/p>\n<p>Ovdje je va\u017eno razumjeti da \u0107e va\u0161a sistem prije ili kasnije uvijek gre\u0161iti \u2014 to je povezano s razvojnim ciklusom svakog softvera. Na po\u010detku razvoja, sistem obi\u010dno ima mnogo bugova dok se sve ne stabilizira i ne zavr\u0161i glavni dio inovacija. No s vremenom, entropija uzima danak i gre\u0161ke se ponovo pojavljuju \u2014 zbog degradacije komponenti i promjene podataka, o \u010demu sam govorio na po\u010detku.<\/p>\n<p>\u017delim napomenuti da se svaki sistem strojnog u\u010denja treba razmatrati s obzirom na njegovu dobit tijekom cijelog \u017eivotnog ciklusa. Ispod je prikazan primjer rada sistema za otkrivanje rijetkog tipa spama (na grafu linija je oko nule). Jednom prilikom, zbog neto\u010dno umre\u017eenog svojstva, sistem je poludeo. Na\u017ealost, nije bilo monitoring-a za anomalno aktiviranje, te je sistem po\u010deo pohranjivati e-po\u0161tu u mapu 'spam' u velikim koli\u010dinama na granici dono\u0161enja odluke. Iako su posljedice ispravljene, sistem je ve\u0107 toliko puta pogrije\u0161io da se ne mo\u017ee isplatiti ni nakon pet godina. A to je potpuni neuspjeh s gledi\u0161ta \u017eivotnog ciklusa modela. <\/p>\n<p><img decoding=\"async\" alt=\"Iskori\u0161tenje strojnog u\u010denja u Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/65efd799537ceea3761cabc3a764ba90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStoga, tako jednostavna stvar kao \u0161to je pra\u0107enje mo\u017ee postati klju\u010dna u \u017eivotu modela. Osim standardnih i o\u010ditih metrika, uzimamo u obzir distribuciju odgovora i ocjena modela, kao i distribuciju vrijednosti klju\u010dnih svojstava. Pomo\u0107u KL divergencije mo\u017eemo usporediti trenutnu distribuciju s povijesnom ili vrijednosti na A\/B testu s ostatkom toka, \u0161to omogu\u0107ava pravovremeno uo\u010davanje anomalija u modelu i vra\u0107anje promjena.<\/p>\n<p>U ve\u0107ini slu\u010dajeva pokre\u0107emo na\u0161e prve verzije sustava koriste\u0107i jednostavne heuristike ili modele koje kasnije koristimo za pra\u0107enje. Na primjer, pratimo NER model u usporedbi s regularnim izrazima za odre\u0111ene internetske trgovine, i ako pokrivenost klasifikatora opadne u odnosu na njih, istra\u017eujemo uzroke. Jo\u0161 jedna korisna primjena heuristika!<\/p>\n<h2>Zaklju\u010dci<\/h2>\n<p>\nPonovno \u0107emo pro\u0107i kroz klju\u010dne misli \u010dlanka.<\/p>\n<ul>\n<li><b>Fibdek<\/b>. Uvijek razmi\u0161ljamo o korisniku: kako \u0107e \u017eivjeti s na\u0161im gre\u0161kama, kako mo\u017ee prijaviti iste. Ne zaboravimo da korisnici nisu izvor \u010distog povratnog informacija za obuku modela, i taj povratak treba pro\u0107i kroz pomo\u0107ne ML sustave. Ako ne postoji mogu\u0107nost prikupljanja signala od korisnika, tra\u017eimo alternativne izvore povratnih informacija, na primjer, povezane sustave. \n<\/li>\n<li><b>Daljnje u\u010denje<\/b>. Ovdje je klju\u010dna nasljednost, stoga se oslanjamo na trenutni proizvodni model. Nove modele u\u010dimo tako da se ne razlikuju zna\u010dajno od prethodnog kroz harmoni\u010dnu regularizaciju i sli\u010dne trikove.<\/li>\n<li><b>Deploy<\/b>. Automatsko implementiranje prema metrikama znatno skra\u0107uje vrijeme potrebno za uvo\u0111enje modela. Pra\u0107enje statistike i raspodjele dono\u0161enja odluka, kao i broja pogre\u0161aka korisnika, obavezno je za va\u0161 miran san i produktivne vikende.\n<\/li>\n<\/ul>\n<p>\nNadam se da \u0107e pro\u010ditano pomo\u0107i br\u017eem pobolj\u0161anju va\u0161ih ML sustava, ubrzavanju njihove izlazne strategije na tr\u017ei\u0161tu i u\u010diniti ih pouzdanijima, smanjuju\u0107i stres na poslu.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/476714\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 Highload++ \u0438 DataFest Minsk 2019 \u0433. \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0447\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0436\u0438\u0437\u043d\u0438 \u0432 \u0441\u0435\u0442\u0438. \u0421 \u0435\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443, \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438, \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0435\u043b\u0435\u0439, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u043c. \u0412 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 2018 \u0433\u043e\u0434\u0430 \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043e\u0447\u0442\u044b. \u041a\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53143","post","type-post","status-publish","format-standard","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=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\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\/hr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\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=\"2019-11-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:00+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\udd47Upotreba strojnog u\u010denja u Mail.ru po\u0161ti | ProHoster","description":"Na temelju mojih nastupa na.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster","og:description":"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","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":"2019-11-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53143","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":"2026-01-24 06:14:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:30:25","updated":"2026-01-24 06:14:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/53143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=53143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/53143\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=53143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=53143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=53143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}