{"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\/ro\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","title":{"rendered":"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/ee5728dccb94b849ad3bfd9cf84ad74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Inspirat din prezent\u0103rile mele de la Highload++ \u0219i DataFest Minsk 2019.<\/i><\/p>\n<p>Pentru mul\u021bi, ast\u0103zi, emailul reprezint\u0103 o parte esen\u021bial\u0103 a vie\u021bii online. Prin intermediul acestuia, purt\u0103m coresponden\u021b\u0103 de afaceri, stoc\u0103m o varietate de informa\u021bii importante legate de finan\u021be, rezerv\u0103ri de hoteluri, plasarea comenzilor \u0219i multe altele. La mijlocul anului 2018, am formulat o strategie de produs pentru dezvoltarea serviciului de email. Cum ar trebui s\u0103 arate emailul modern?<\/p>\n<p>Emailul trebuie s\u0103 fie <b>inteligent<\/b>, adic\u0103 s\u0103 ajute utilizatorii s\u0103 se descurce \u00een volumul tot mai mare de informa\u021bii: s\u0103 filtreze, s\u0103 structureze \u0219i s\u0103 ofere aceste informa\u021bii \u00eentr-un mod c\u00e2t mai convenabil. De asemenea, acesta trebuie s\u0103 fie <b>util\u0103<\/b>, permi\u021b\u00e2ndu-le utilizatorilor s\u0103 rezolve diverse taskuri direct din inbox, cum ar fi plata amenzilor (o func\u021bie pe care, din p\u0103cate, o folosesc). \u0218i, fire\u0219te, emailul trebuie s\u0103 asigure protec\u021bia informa\u021biilor, bloc\u00e2nd spamul \u0219i ap\u0103r\u00e2nd utilizatorii de atacurile cibernetice, adic\u0103 s\u0103 fie <b>sigur<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAceste direc\u021bii definesc o serie de sarcini cheie, multe dintre care pot fi rezolvate eficient cu ajutorul \u00eenv\u0103\u021b\u0103rii automate. Iat\u0103 exemple de caracteristici deja implementate, dezvoltate \u00een cadrul strategiei\u2014c\u00e2te una pentru fiecare direc\u021bie.<\/p>\n<ul>\n<li><b>R\u0103spuns inteligent<\/b>. \u00cen email exist\u0103 o func\u021bie de r\u0103spuns inteligent. Re\u021beaua neuronal\u0103 analizeaz\u0103 textul emailului, \u00een\u021belege sensul \u0219i scopul acestuia \u0219i, ca urmare, propune trei variante cele mai potrivite de r\u0103spuns: pozitiv, negativ \u0219i neutr\u0103. Acest lucru ajut\u0103 la economisirea semnificativ\u0103 a timpului \u00een r\u0103spunsurile la emailuri \u0219i, de asemenea, permite uneori s\u0103 r\u0103spundem \u00een moduri neobi\u0219nuite \u0219i amuzante.\n<\/li>\n<li><b>Gruparea emailurilor<\/b>, referitoare la comenzile efectuate \u00een magazinele online. Facem adesea cump\u0103r\u0103turi pe internet \u0219i, de regul\u0103, magazinele pot trimite c\u00e2teva emailuri pentru fiecare comand\u0103. De exemplu, de la AliExpress, cel mai mare serviciu, vin foarte multe emailuri pentru o singur\u0103 comand\u0103, iar noi am estimat c\u0103, \u00een cazuri extreme, num\u0103rul acestora poate ajunge p\u00e2n\u0103 la 29. Prin urmare, cu ajutorul modelului Named Entity Recognition, extragem num\u0103rul comenzii \u0219i alte informa\u021bii din text \u0219i grup\u0103m toate emailurile \u00eentr-un singur fir. De asemenea, afi\u0219\u0103m informa\u021biile principale despre comand\u0103 \u00eentr-un panou separat, ceea ce faciliteaz\u0103 gestionarea acestui tip de emailuri.\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8b37b0bf0c0d152498027bc25d476128.jpg\" style=\"display:block;margin: 0 auto;\" \/>\n<\/li>\n<li><b>Anti-phishing<\/b>Phishingul este un tip de fraud\u0103 extrem de periculos prin care infractorii \u00eencearc\u0103 s\u0103 ob\u021bin\u0103 informa\u021bii financiare (inclusiv detalii despre cardurile bancare ale utilizatorilor) \u0219i identificatori. Aceste mesaje mimeaz\u0103 aspectul celor originale, trimise de servicii, inclusiv vizual. Prin urmare, folosind Computer Vision, recunoa\u0219tem siglele \u0219i stilul de design al e-mailurilor de la mari companii (de exemplu, Mail.ru, Sber, Alfa) \u0219i lu\u0103m \u00een considerare aceste aspecte \u00eempreun\u0103 cu textul \u0219i alte semne \u00een clasificatoarele noastre de spam \u0219i phishing.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>\u00cenv\u0103\u021barea automat\u0103<\/h2>\n<p>\nUn pic despre \u00eenv\u0103\u021barea automat\u0103 \u00een e-mailuri \u00een general. E-mailul este un sistem cu \u00eenc\u0103rcare ridicat\u0103: prin serverele noastre trec \u00een medie 1,5 miliarde de mesaje pe zi pentru 30 de milioane de utilizatori DAU. Aproape 30 de sisteme de \u00eenv\u0103\u021bare automat\u0103 \u00eendeplinesc toate func\u021biile \u0219i caracteristicile necesare. <\/p>\n<p>Fiecare e-mail trece printr-un \u00eentreg conveior de clasificare. Mai \u00eent\u00e2i, filtr\u0103m spamul \u0219i p\u0103str\u0103m e-mailurile bune. Utilizatorii adesea nu observ\u0103 activitatea antispam, deoarece 95\u201499% din spam nu ajunge chiar \u0219i \u00een folderul corespunz\u0103tor. Recunoa\u0219terea spamului este o parte foarte important\u0103 a sistemului nostru \u0219i cea mai complex\u0103, deoarece \u00een domeniul antispamului se desf\u0103\u0219oar\u0103 o adaptare constant\u0103 \u00eentre sistemele de protec\u021bie \u0219i atac, ceea ce prezint\u0103 o provocare ingineresasc\u0103 continu\u0103 pentru echipa noastr\u0103.<\/p>\n<p>Apoi, separ\u0103m e-mailurile trimise de oameni de cele trimise de robo\u021bi. E-mailurile de la oameni sunt cele mai importante, de aceea le oferim func\u021bii de tip Smart Reply. E-mailurile de la robo\u021bi se \u00eempart \u00een dou\u0103 categorii: tranzac\u021bionale \u2014 acestea sunt mesaje importante de la servicii, cum ar fi confirm\u0103rile achizi\u021biilor sau rezerv\u0103rilor de hotel, \u0219i informa\u021bionale \u2014 acestea sunt publicitate de afaceri, reduceri. <\/p>\n<p>Consider\u0103m c\u0103 informa\u021biile tranzac\u021bionale sunt la fel de importante ca coresponden\u021ba personal\u0103. Ele trebuie s\u0103 fie la \u00eendem\u00e2n\u0103, deoarece este adesea necesar s\u0103 g\u0103sim rapid informa\u021bii despre o comand\u0103 sau o rezervare de bilet de avion, iar noi pierdem timp cu c\u0103utarea acestor mesaje. De aceea, pentru comoditate, le \u00eemp\u0103r\u021bim automat \u00een \u0219ase categorii principale: c\u0103l\u0103torii, comenzi, finan\u021be, bilete, \u00eenregistr\u0103ri \u0219i, \u00een sf\u00e2r\u0219it, amenzi.<\/p>\n<p>Scrisorile informative sunt cel mai numeros \u0219i, probabil, cel mai pu\u021bin important grup, care nu necesit\u0103 o reac\u021bie imediat\u0103, deoarece nimic semnificativ nu se va schimba \u00een via\u021ba utilizatorului dac\u0103 acesta nu cite\u0219te o astfel de scrisoare. \u00cen noul nostru interval de vizualizare, le grup\u0103m \u00een dou\u0103 threaduri: re\u021bele sociale \u0219i newslettere, cur\u0103\u021b\u00e2nd astfel vizual c\u0103su\u021ba po\u0219tal\u0103 \u0219i l\u0103s\u00e2nd la vedere doar scrisorile importante.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/175773879daaa29d1542a98070cb7972.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Exploatare<\/h3>\n<p>\nUn num\u0103r mare de sisteme aduce multe dificult\u0103\u021bi \u00een exploatare. Modelele se degradeaz\u0103 \u00een timp, la fel ca orice software: semnalele se stric\u0103, ma\u0219inile se defecteaz\u0103, codul devine confuz. \u00cen plus, datele se schimb\u0103 constant: se adaug\u0103 altele noi, se transform\u0103 tiparele comportamental ale utilizatorilor etc., astfel \u00eenc\u00e2t modelul, f\u0103r\u0103 o sus\u021binere adecvat\u0103, va func\u021biona din ce \u00een ce mai prost \u00een timp. <\/p>\n<p>Nu trebuie uitat c\u0103, cu c\u00e2t \u00eenv\u0103\u021barea automat\u0103 p\u0103trunde mai ad\u00e2nc \u00een via\u021ba utilizatorilor, cu at\u00e2t influen\u021ba lor asupra ecosistemului devine mai mare, \u0219i, ca urmare, pierderile financiare sau profiturile pe care le pot ob\u021bine juc\u0103torii de pe pia\u021b\u0103 pot fi semnificative. De aceea, din ce \u00een ce mai multe domenii, actorii se adapteaz\u0103 la lucrul cu algoritmi ML (exemple clasice: publicitate, c\u0103utare \u0219i deja men\u021bionatul antispam).<\/p>\n<p>De asemenea, sarcinile de \u00eenv\u0103\u021bare automat\u0103 au o particularitate: orice modificare, chiar \u0219i una nesemnificativ\u0103, \u00een sistem poate genera mult\u0103 munc\u0103 cu modelul: lucrul cu datele, re\u00eenv\u0103\u021barea, implementarea, ceea ce poate dura s\u0103pt\u0103m\u00e2ni sau luni. Prin urmare, cu c\u00e2t mediu se schimb\u0103 mai repede, cu at\u00e2t mai multe eforturi sunt necesare pentru sus\u021binerea acestora. Echipa poate crea numeroase sisteme \u0219i se poate bucura de acest lucru, iar apoi s\u0103 cheltuie aproape toate resursele pentru sus\u021binerea lor, f\u0103r\u0103 posibilitatea de a face ceva nou. Ne-am confruntat o dat\u0103 cu o astfel de situa\u021bie \u00een echipa de antispam. \u0218i am ajuns la concluzia evident\u0103 c\u0103 suportul trebuie automatizat.<\/p>\n<h3>Automatizarea<\/h3>\n<p>\nCe poate fi automatizat? De fapt, aproape totul. Am identificat patru direc\u021bii care definesc infrastructura \u00eenv\u0103\u021b\u0103rii automate:<\/p>\n<ul>\n<li>colectarea datelor;\n<\/li>\n<li>re\u00eenv\u0103\u021barea;\n<\/li>\n<li>implementarea;\n<\/li>\n<li>testarea &amp; monitorizarea.\n<\/li>\n<\/ul>\n<p>\nDac\u0103 mediul este instabil \u0219i se schimb\u0103 constant, atunci \u00eentreaga infrastructur\u0103 din jurul modelului devine mult mai important\u0103 dec\u00e2t modelul \u00een sine. Poate fi un vechi \u0219i bun clasificador liniar, dar dac\u0103 \u00eei oferim caracteristici corecte \u0219i stabilim un feedback bun de la utilizatori, va func\u021biona mult mai bine dec\u00e2t modelele de v\u00e2rf cu toat\u0103 tehnologia lor.<\/p>\n<h4>Ciclul de feedback<\/h4>\n<p>\nAcest ciclu reune\u0219te colectarea datelor, re\u00eenv\u0103\u021barea \u0219i implementarea \u2014 practic, \u00eentregul ciclu de actualizare a modelului. De ce este important? Uita\u021bi-v\u0103 la grafica \u00eenregistr\u0103rilor \u00een e-mail:<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/f3c98bd49a101754cf299821a40e2b8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDezvoltatorul de \u00eenv\u0103\u021bare automat\u0103 a implementat un model anti-bot care \u00eempiedic\u0103 robo\u021bii s\u0103 se \u00eenregistreze \u00een e-mail. Grafica scade p\u00e2n\u0103 la o valoare la care r\u0103m\u00e2n doar utilizatorii reali. Totul este minunat! Dar dup\u0103 patru ore, cei care creeaz\u0103 boturi \u00ee\u0219i ajusteaz\u0103 scripturile, iar totul revine la normal. \u00cen aceast\u0103 implementare, dezvoltatorul a petrecut o lun\u0103 ad\u0103ug\u00e2nd caracteristici \u0219i re\u00eenv\u0103\u021b\u00e2nd modelul, dar spammerul a reu\u0219it s\u0103 se adapteze \u00een patru ore.<\/p>\n<p>Pentru a nu suferi at\u00e2t de mult \u0219i a nu fi nevoit s\u0103 refacem totul, trebuie s\u0103 ne g\u00e2ndim din timp cum va ar\u0103ta ciclul de feedback \u0219i ce vom face dac\u0103 mediul se va schimba. S\u0103 \u00eencepem cu colectarea datelor \u2014 aceasta este combustibilul pentru algoritmii no\u0219tri.<\/p>\n<h2>Colectarea datelor<\/h2>\n<p>\nEste clar c\u0103 pentru re\u021bele neuronale moderne, cu c\u00e2t avem mai multe date, cu at\u00e2t este mai bine, iar acestea, \u00een esen\u021b\u0103, sunt generate de utilizatorii produsului. Utilizatorii ne pot ajuta s\u0103 etichet\u0103m datele, dar nu trebuie s\u0103 abuz\u0103m de asta, deoarece, la un moment dat, utilizatorilor li se va face dor s\u0103 \u00eembun\u0103t\u0103\u021beasc\u0103 modelele noastre \u0219i vor trece la un alt produs. <\/p>\n<p>Una dintre cele mai frecvente gre\u0219eli (aici fac referire la Andrew Ng) este o orientare prea puternic\u0103 spre metricele pe setul de date de testare, \u00een loc de feedbackul de la utilizator, ceea ce este, de fapt, principala m\u0103sur\u0103 a calit\u0103\u021bii muncii, deoarece cre\u0103m un produs pentru utilizator. Dac\u0103 utilizatorului nu \u00eei este clar sau nu-i place modul \u00een care func\u021bioneaz\u0103 modelul, \u00eenseamn\u0103 c\u0103 totul este inutil. <\/p>\n<p>De aceea, utilizatorul ar trebui s\u0103 aib\u0103 \u00eentotdeauna posibilitatea de a vota; trebuie s\u0103-i d\u0103m un instrument pentru feedback. Dac\u0103 consider\u0103m c\u0103 \u00een c\u0103su\u021ba de e-mail a venit un mesaj legat de finan\u021be, trebuie s\u0103-l etichet\u0103m ca 'finan\u021be' \u0219i s\u0103 deseneaz\u0103 un buton pe care utilizatorul \u00eel poate ap\u0103sa \u0219i s\u0103 spun\u0103 c\u0103 nu este finan\u021be.<\/p>\n<h3>Calitatea feedbackului<\/h3>\n<p>\nS\u0103 discut\u0103m despre calitatea feedback-ului utilizatorului. \u00cen primul r\u00e2nd, este posibil ca tu \u0219i utilizatorul s\u0103 conferi\u021bi diferite sensuri aceluia\u0219i concept. De exemplu, tu \u0219i managerii de produs considera\u021bi c\u0103 \u201efinan\u021bele\u201d se refer\u0103 la scrisori de la banc\u0103, \u00een timp ce utilizatorul crede c\u0103 o scrisoare de la bunica despre pensie se \u00eencadreaz\u0103, de asemenea, \u00een categoria finan\u021belor. \u00cen al doilea r\u00e2nd, sunt utilizatori care apas\u0103 butoanele f\u0103r\u0103 s\u0103 aib\u0103 vreo logic\u0103. \u00cen al treilea r\u00e2nd, utilizatorul poate avea concluzii complet gre\u0219ite. Un exemplu clar din practica noastr\u0103 este implementarea clasificatorului <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\">spamului nigerian<\/a><\/noindex>, un tip de spam destul de amuzant, \u00een care utilizatorului i se propune s\u0103 \u00eencaseze c\u00e2teva milioane de dolari de la un oarecare v\u0103r g\u0103sit brusc \u00een Africa. Dup\u0103 implementarea acestui clasificator, am verificat clicurile pe \u201eNu este spam\u201d pentru aceste scrisori \u0219i s-a dovedit c\u0103 80% dintre ele erau spamuri nigeriene evidente, ceea ce sugereaz\u0103 c\u0103 utilizatorii pot fi extrem de naivi.<\/p>\n<p>\u0218i s\u0103 nu uit\u0103m c\u0103 butoanele nu sunt ap\u0103sate doar de oameni, ci \u0219i de diverse bot-uri care se pretind a fi browsere. A\u0219adar, feedback-ul brut nu este adecvat pentru \u00eenv\u0103\u021bare. Ce putem face cu aceste informa\u021bii?<\/p>\n<p>Aplic\u0103m dou\u0103 abord\u0103ri: <\/p>\n<ul>\n<li><b>Feedback de la ML asociat<\/b>. De exemplu, avem un sistem online anti-bot care, a\u0219a cum am men\u021bionat anterior, ia decizii rapide bazate pe un num\u0103r limitat de caracteristici. \u0218i exist\u0103 un al doilea sistem, mai lent, care func\u021bioneaz\u0103 post-factum. Acesta dispune de mai multe date despre utilizator, despre comportamentul s\u0103u etc. Ca urmare, se ia cea mai bine fundamentat\u0103 decizie, reie\u0219ind din aceasta av\u00e2nd o acurate\u021be \u0219i o completitudine mai mare. Se poate direc\u021biona diferen\u021ba \u00een func\u021bionarea acestor sisteme ca date pentru \u00eenv\u0103\u021bare \u00een primul. Astfel, sistemul mai simplu va \u00eencerca mereu s\u0103 se apropie de performan\u021ba celui mai complex.\n<\/li>\n<li><b>Clasificarea clicurilor<\/b>. Poate fi simplu s\u0103 clasifici fiecare clic al utilizatorului, s\u0103-i evaluezi validitatea \u0219i utilizarea. A\u0219a facem \u00een antispam-ul de e-mail, folosind caracteristicile utilizatorului, istoricul s\u0103u, caracteristicile expeditorului, textul \u00een sine \u0219i rezultatul clasificatoarelor. \u00cen final, ob\u021binem un sistem automat care valideaz\u0103 feedback-ul utilizatorului. \u0218i, deoarece trebuie s\u0103 fie realimentat mult mai rar, munca sa poate deveni principal\u0103 pentru toate celelalte sisteme. Principala prioritate \u00een acest model este precizia, deoarece antrenarea modelului cu date inexacte implic\u0103 riscuri semnificative. \n<\/li>\n<\/ul>\n<p>\nC\u00e2t timp cur\u0103\u021b\u0103m datele \u0219i realiment\u0103m sistemele noastre ML, nu trebuie s\u0103 uit\u0103m de utilizatori, deoarece pentru noi, mii, milioane de erori pe grafic reprezint\u0103 statistici, iar pentru utilizator, fiecare bug este o tragedie. \u00cen plus fa\u021b\u0103 de faptul c\u0103 utilizatorul trebuie s\u0103 supravie\u021buiasc\u0103 cu eroarea din produsul vostru, el a\u0219teapt\u0103, dup\u0103 feedback, excluderea unei situa\u021bii similare \u00een viitor. De aceea, este \u00eentotdeauna recomandabil s\u0103 oferi utilizatorilor nu doar posibilitatea de a vota, ci \u0219i de a corecta comportamentul sistemelor ML, cre\u00e2nd, de exemplu, heuritici personale pentru fiecare clic de feedback; \u00een cazul e-mailului, aceasta ar putea fi capacitatea de a filtra astfel de mesaje \u00een func\u021bie de expeditor \u0219i subiect pentru acel utilizator.<\/p>\n<p>De asemenea, trebuie s\u0103 construim modelul pe baza unor rapoarte sau solicit\u0103ri \u00een suport, \u00eentr-un mod semi-automat sau manual, pentru a evita ca al\u021bi utilizatori s\u0103 sufere din cauza unor probleme similare.<\/p>\n<h3>Heuritici pentru antrenare<\/h3>\n<p>\nCu aceste heuristici \u0219i solu\u021bii temporare exist\u0103 dou\u0103 probleme. Prima este c\u0103 num\u0103rul \u00een continu\u0103 cre\u0219tere de solu\u021bii temporare este greu de \u00eentre\u021binut, f\u0103r\u0103 a men\u021biona calitatea \u0219i func\u021bionarea lor pe termen lung. A doua problem\u0103 este c\u0103 eroarea poate s\u0103 nu fie frecvent\u0103, iar c\u00e2teva clicuri pentru realimentarea modelului nu vor fi suficiente. Ar p\u0103rea c\u0103 aceste dou\u0103 efecte neconectate pot fi semnificativ reduse dac\u0103 aplic\u0103m urm\u0103toarea abordare.<\/p>\n<ol>\n<li>Cre\u0103m o solu\u021bie temporar\u0103. \n<\/li>\n<li>Direc\u021bion\u0103m datele din aceasta c\u0103tre model, care se realimenteaz\u0103 regulat, inclusiv pe baza datelor ob\u021binute. Aici, desigur, este important ca heuristica s\u0103 aib\u0103 o precizie ridicat\u0103, pentru a nu reduce calitatea datelor din setul de antrenament. \n<\/li>\n<li>Apoi, configur\u0103m monitorizarea pentru declan\u0219area suportului temporar, \u0219i dac\u0103 dup\u0103 un timp suportul temporar nu mai este necesar \u0219i este complet acoperit de model, atunci \u00eel putem \u0219terge f\u0103r\u0103 ezitare. Acum, aceast\u0103 problem\u0103 nu ar mai trebui s\u0103 reapar\u0103.\n<\/li>\n<\/ol>\n<p>\nDeci, armata suporturilor temporare este foarte util\u0103. Principalul lucru este ca serviciul lor s\u0103 fie urgent, nu permanent. <\/p>\n<h2>Re\u00eenv\u0103\u021bare<\/h2>\n<p>\nRe\u00eenv\u0103\u021barea este procesul de ad\u0103ugare a unor date noi, ob\u021binute ca rezultat al feedback-ului de la utilizatori sau alte sistem, \u0219i de antrenare a modelului existent pe acestea. Exist\u0103 c\u00e2teva probleme cu re\u00eenv\u0103\u021barea:<\/p>\n<ol>\n<li>Modelul poate s\u0103 nu suporte pur \u0219i simplu re\u00eenv\u0103\u021barea \u0219i s\u0103 poat\u0103 \u00eenv\u0103\u021ba doar de la zero. \n<\/li>\n<li>\u00cen cartea naturii nu este scris nic\u0103ieri c\u0103 re\u00eenv\u0103\u021barea va \u00eembun\u0103t\u0103\u021bi neap\u0103rat calitatea func\u021bion\u0103rii \u00een produc\u021bie. Deseori se \u00eent\u00e2mpl\u0103 chiar opusul, adic\u0103 poate ap\u0103rea o deteriorare.\n<\/li>\n<li>Schimb\u0103rile pot fi imprevizibile. Acesta este un punct destul de delicat pe care l-am descoperit. Chiar dac\u0103 un model nou \u00een testul A\/B arat\u0103 rezultate similare cu cel actual, acest lucru nu \u00eenseamn\u0103 deloc c\u0103 va func\u021biona identic. Func\u021bionarea lor poate diferi cu un anumit procent, care poate aduce erori noi sau poate readuce erori vechi deja rezolvate. Cu erorile actuale, noi \u0219i utilizatorii am \u00eenv\u0103\u021bat deja s\u0103 tr\u0103im, \u0219i atunci c\u00e2nd apar multe erori noi, utilizatorul poate s\u0103 nu \u00een\u021beleag\u0103 ce se \u00eent\u00e2mpl\u0103, deoarece se a\u0219teapt\u0103 la un comportament predictibil.\n<\/li>\n<\/ol>\n<p>\nDe aceea, cel mai important \u00een re\u00eenv\u0103\u021bare este s\u0103 \u00eembun\u0103t\u0103\u021bim garantat modelul sau, cel pu\u021bin, s\u0103 nu-l deterior\u0103m. <\/p>\n<p>Primul lucru care \u00eemi vine \u00een minte c\u00e2nd vorbim despre re\u00eenv\u0103\u021bare este abordarea Active Learning. Ce \u00eenseamn\u0103 asta? De exemplu, un clasificator determin\u0103 dac\u0103 un e-mail apar\u021bine categoriei financiar\u0103, \u0219i \u00een jurul limitei sale de decizie ad\u0103ug\u0103m un e\u0219antion din exemplele etichetate. Acest lucru func\u021bioneaz\u0103 bine, de exemplu, \u00een publicitate, unde exist\u0103 foarte mult feedback \u0219i se poate antrena modelul \u00een timp real. Dar dac\u0103 feedback-ul este pu\u021bin, atunci ob\u021binem un e\u0219antion foarte p\u0103rtinitor \u00een raport cu distribu\u021bia datelor de produc\u021bie, pe baza c\u0103ruia nu se poate evalua comportamentul modelului \u00een procesul de exploatare.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/fd1b3e07bfaf896dde3248e43537f61a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen realitate, scopul nostru este s\u0103 p\u0103str\u0103m vechile modele, modelele deja cunoscute, \u0219i s\u0103 dob\u00e2ndim altele noi. Aici, continuitatea este important\u0103. Modelul pe care l-am lansat cu multe dificult\u0103\u021bi func\u021bioneaz\u0103 deja, a\u0219a c\u0103 ne putem orienta dup\u0103 performan\u021ba sa. <\/p>\n<p>\u00cen e-mail se aplic\u0103 diferite modele: arbori, liniare, re\u021bele neuronale. Pentru fiecare cre\u0103m propriul algoritm de re\u00eenv\u0103\u021bare. \u00cen procesul de re\u00eenv\u0103\u021bare, ob\u021binem nu doar date noi, ci \u0219i adesea noi caracteristici pe care le vom lua \u00een considerare \u00een toate algoritmii de mai jos.<\/p>\n<h3>Modele liniare<\/h3>\n<p>\nS\u0103 zicem c\u0103 avem regresie logistic\u0103. Form\u0103m func\u021bia de pierdere a modelului din urm\u0103toarele componente:<\/p>\n<ul>\n<li>LogLoss pe datele noi;\n<\/li>\n<li>regulariz\u0103m greut\u0103\u021bile noilor caracteristici (nu atingem vechile);\n<\/li>\n<li>\u00eenv\u0103\u021b\u0103m \u0219i pe datele vechi, pentru a p\u0103stra vechile modele;\n<\/li>\n<li>\u0219i, poate cel mai important: aplic\u0103m Regularizarea Harmonic\u0103, care garanteaz\u0103 o modificare moderat\u0103 a greut\u0103\u021bilor \u00een raport cu modelul vechi din punct de vedere al normei.\n<\/li>\n<\/ul>\n<p>\nDeoarece fiecare component\u0103 a pierderii are coeficien\u021bi, putem ajusta valorile optime pentru sarcina noastr\u0103 pe baza valid\u0103rii \u00eencruci\u0219ate sau \u00een func\u021bie de cerin\u021bele de produs.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/00ae86d23afb780f5e260e61f833d4bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Arbori<\/h3>\n<p>\nS\u0103 trecem la arbori de decizie. Am implementat urm\u0103torul algoritm de re\u00eenv\u0103\u021bare pentru arbori:<\/p>\n<ol>\n<li>\u00cen produc\u021bie func\u021bioneaz\u0103 o p\u0103dure de 100\u2014300 de arbori, care a fost antrenat\u0103 pe un set de date vechi.\n<\/li>\n<li>La final, elimin\u0103m M = 5 arbori \u0219i ad\u0103ug\u0103m 2M = 10 noi, antrena\u021bi pe \u00eentregul set de date, dar cu un coeficient ridicat pentru datele noi, ceea ce garanteaz\u0103 \u00een mod natural o modificare incremental\u0103 a modelului.\n<\/li>\n<\/ol>\n<p>\nEste evident c\u0103, de-a lungul timpului, num\u0103rul arborilor cre\u0219te semnificativ, iar ace\u0219tia trebuie periodic reduceri pentru a ne men\u021bine \u00een limitele temporale. Pentru aceasta, folosim acum bine-cunoscuta Distilare a Cuno\u0219tin\u021belor (KD). Pe scurt, despre principiul de func\u021bionare.<\/p>\n<ol>\n<li>Avem modelul \u201ecomplex\u201d curent. \u00cel rul\u0103m pe setul de date de antrenament \u0219i ob\u021binem distribu\u021bia probabilit\u0103\u021bilor pentru clase la ie\u0219ire.\n<\/li>\n<li>Apoi, antren\u0103m modelul elev (un model cu un num\u0103r mai mic de arbori \u00een acest caz) s\u0103 reproduc\u0103 rezultatele modelului, folosind distribu\u021bia claselor ca variabil\u0103 \u021bint\u0103.\n<\/li>\n<li>Este important de men\u021bionat c\u0103 nu folosim deloc eticheta dataset-ului, a\u0219a c\u0103 putem folosi date arbitrare. Bine\u00een\u021beles, utiliz\u0103m un e\u0219antion de date din fluxul de produc\u021bie ca set de antrenament pentru modelul elev. Astfel, setul de antrenament ne permite s\u0103 asigur\u0103m exactitatea modelului, iar e\u0219antionul din flux garanteaz\u0103 o performan\u021b\u0103 similar\u0103 \u00een distribu\u021bia de produc\u021bie, compens\u00e2nd devierea setului de antrenament.\n<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/3fdfcb9b1e5a6fa824226a429afc475a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCombinarea acestor dou\u0103 tehnici (ad\u0103ugarea de copaci \u0219i reducerea periodic\u0103 a acestora prin Knowledge Distillation) asigur\u0103 introducerea de noi modele \u0219i continuitate complet\u0103.<\/p>\n<p>Prin KD, realiz\u0103m de asemenea distinc\u021bia opera\u021biunilor cu caracteristici ale modelului, cum ar fi eliminarea caracteristicilor \u0219i operarea cu absen\u021be. \u00cen cazul nostru, avem o serie de caracteristici statistice importante (pe baza expeditorilor, hash-urilor de text, URL-urilor etc.), care sunt stocate \u00eentr-o baz\u0103 de date cu proprietatea de a refuza. La o astfel de desf\u0103\u0219urare a evenimentelor, modelul nu este preg\u0103tit, deoarece \u00een setul de antrenament nu apar situa\u021bii de refuz. \u00cen astfel de cazuri, combin\u0103m tehnicile KD \u0219i augmentarea: pentru antrenamentul unui subset de date, elimin\u0103m sau reset\u0103m caracteristicile necesare, iar etichetele (ie\u0219irile modelului curent) r\u0103m\u00e2n ini\u021biale, modelul elev \u00eenva\u021b\u0103 s\u0103 reproduc\u0103 aceast\u0103 distribu\u021bie.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/5e1f5af9a359646a49f4fe88ffed1025.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAm observat c\u0103 cu c\u00e2t manipularea modelelor este mai serioas\u0103, cu at\u00e2t mai mult este necesar un e\u0219antion din flux ca propor\u021bie procentual\u0103.<\/p>\n<p>Pentru a elimina caracteristicile, cea mai simpl\u0103 opera\u021biune, este necesar\u0103 doar o mic\u0103 parte din flux, deoarece se schimb\u0103 doar c\u00e2teva caracteristici, iar modelul curent a fost antrenat pe acela\u0219i set - diferen\u021ba este minim\u0103. Pentru simplificarea modelului (reducerea num\u0103rului de copaci de c\u00e2teva ori) este necesar deja un raport de 50 la 50. Iar pentru absen\u021bele caracteristicilor statistice importante, care influen\u021beaz\u0103 serios performan\u021ba modelului, este necesar \u0219i mai mult flux pentru a uniformiza func\u021bionarea noului model rezistent la absen\u021be pe toate tipurile de e-mailuri. <\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la 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>\nS\u0103 trecem la FastText. Amintesc c\u0103 reprezentarea (Embedding) unui cuv\u00e2nt const\u0103 din suma embedding-ului cuv\u00e2ntului \u00een sine \u0219i a tuturor N-gram-urilor sale literale, de obicei trigramuri. Deoarece pot exista multe trigramuri, se folose\u0219te Bucket Hashing, adic\u0103 transformarea \u00eentregului spa\u021biu \u00eentr-un harta hash fix\u0103. \u00cen rezultat, matricea greut\u0103\u021bilor iese cu dimensiunea straturilor interne \u00een func\u021bie de num\u0103rul de cuvinte + bucket-uri. <\/p>\n<p>\u00cen timpul antrenamentului suplimentar apar noi caracteristici: cuvinte \u0219i trigramuri. \u00cen antrenamentul standard suplimentar de la Facebook nu se \u00eent\u00e2mpl\u0103 nimic semnificativ. Numai greut\u0103\u021bile vechi sunt ajustate cu entropia \u00eencruci\u0219at\u0103 pe date noi. Astfel, noile caracteristici nu sunt folosite, desigur, aceast\u0103 abordare are toate dezavantajele men\u021bionate anterior legate de imprevizibilitatea modelului \u00een produc\u021bie. Prin urmare, am f\u0103cut c\u00e2teva ajust\u0103ri la FastText. Ad\u0103ug\u0103m toate greut\u0103\u021bile noi (cuvinte \u0219i trigramuri), antren\u0103m \u00eentreaga matrice cu entropia \u00eencruci\u0219at\u0103 \u0219i ad\u0103ug\u0103m regularizare armonic\u0103, similar cu modelul liniar, care garanteaz\u0103 o modificare nesemnificativ\u0103 a greut\u0103\u021bilor vechi.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la 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>\nCu re\u021belele convolu\u021bionale este pu\u021bin mai complicat. Dac\u0103 \u00een CNN se antreneaz\u0103 ultimele straturi, atunci, desigur, se poate aplica regularizarea armonic\u0103 \u0219i se poate garanta continuitatea. Dar \u00een cazul \u00een care este necesar\u0103 antrenarea \u00eentregii re\u021bele, atunci o astfel de regularizare nu poate fi aplicat\u0103 pe toate straturile. Totu\u0219i, exist\u0103 o op\u021biune de a \u00eenv\u0103\u021ba embedding-uri complementare prin Triplet Loss (<noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1503.03832\">articolul original<\/a><\/noindex>).<\/p>\n<h4>Triplet Loss<\/h4>\n<p>\nPe exemplul sarcinii de anti-phishing vom analiza \u00een linii mari Triplet Loss. Lu\u0103m logo-ul nostru \u0219i exemple pozitive \u0219i negative de logo-uri ale altor companii. Minimaliz\u0103m distan\u021ba dintre primele \u0219i maximiz\u0103m distan\u021ba dintre celelalte, f\u0103c\u00e2nd acest lucru cu un mic interval pentru a asigura o compactitate mai mare a claselor. <\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/dc8547fa042286798eb5c2f0887c4da6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDac\u0103 antren\u0103m re\u021beaua, atunci ne schimb\u0103 complet spa\u021biul metric, iar acesta devine complet incompatibil cu cel anterior. Aceasta este o problem\u0103 serioas\u0103 \u00een sarcinile care utilizeaz\u0103 vectori. Pentru a o ocoli, vom amesteca \u00een timpul antrenamentului embedding-uri vechi.<\/p>\n<p>Am ad\u0103ugat date noi \u00een setul de antrenament \u0219i instruim de la zero a doua versiune a modelului. \u00cen a doua etap\u0103, ne continu\u0103m antrenarea re\u021belei (Finetuning): mai \u00eent\u00e2i se antreneaz\u0103 ultimul strat, apoi se decongeleaz\u0103 \u00eentreaga re\u021bea. \u00cen procesul de generare a tripletelor, doar o parte din embedding-uri sunt calculate folosind modelul antrenat, restul fiind ob\u021binute cu ajutorul celui vechi. \u00cen acest fel, \u00een timpul antren\u0103rii suplimentare, asigur\u0103m compatibilitatea spa\u021biilor metrice v1 \u0219i v2. O variant\u0103 unic\u0103 de regularizare armonic\u0103.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/854d4fcc97775b24e6863cc38743cd27.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Arhitectura integral\u0103<\/h3>\n<p>\nDac\u0103 analiz\u0103m \u00eentreaga sistem\u0103 folosind exemplul anti-spamului, modelele nu sunt izolate, ci integrate una \u00een alta. Lu\u0103m imagini, text \u0219i alte semne, ob\u021binem embedding-uri folosind CNN \u0219i Fast Text. Apoi, deasupra embedding-urilor se aplic\u0103 clasificatoare care ofer\u0103 scoruri pentru diferite clase (tipuri de mesaje, spam, prezen\u021ba logo-ului). Scorurile \u0219i semnalele ajung \u00eentr-o p\u0103dure de copaci pentru a lua decizia final\u0103. Clasificatoarele separate din aceast\u0103 schem\u0103 permit o interpretare mai bun\u0103 a rezultatelor sistemului \u0219i o ajustare mai precis\u0103 a componentelor \u00een cazul apari\u021biei problemelor, mai degrab\u0103 dec\u00e2t a furniza toate datele brute \u00een copacii deciziilor.<\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/30effc5ef7398db5f085b6dd415647d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cen final, garant\u0103m continuitatea la fiecare nivel. La nivelul de baz\u0103 \u00een CNN \u0219i Fast Text folosim regularizare armonic\u0103, iar pentru clasificatoarele de mijloc - de asemenea, regularizare armonic\u0103 \u0219i calibrarea scorului pentru compatibilitatea distribu\u021biei probabilit\u0103\u021bilor. \u00cen plus, boostingul copacilor se antreneaz\u0103 incremental sau folosind Knowledge Distillation.<\/p>\n<p>\u00cen general, suportarea unui astfel de sistem integrat de \u00eenv\u0103\u021bare automat\u0103 este adesea problematic\u0103, deoarece orice component\u0103 de la nivelul inferior duce la actualizarea \u00eentregului sistem de la niveluri superioare. \u00cens\u0103, deoarece \u00een setup-ul nostru fiecare component\u0103 se schimb\u0103 nesemnificativ \u0219i este compatibil\u0103 cu cea anterioar\u0103, \u00eentregul sistem poate fi actualizat pe buc\u0103\u021bi f\u0103r\u0103 a necesita reantrenarea \u00eentregii structuri, ceea ce permite men\u021binerea acestuia f\u0103r\u0103 un overhead semnificativ. <\/p>\n<h2>Deploy<\/h2>\n<p>\nAm discutat despre colectarea datelor \u0219i antrenarea diferitelor tipuri de modele, a\u0219a c\u0103 trecem la implementarea lor \u00een mediu de produc\u021bie.<\/p>\n<h3>A\/B-testare<\/h3>\n<p>\nA\u0219a cum am men\u021bionat anterior, \u00een procesul de colectare a datelor, de obicei, ob\u021binem un e\u0219antion distorsionat, pe baza c\u0103ruia nu putem evalua performan\u021ba modelului \u00een produc\u021bie. Prin urmare, la implementare, este esen\u021bial s\u0103 compar\u0103m modelul cu versiunea anterioar\u0103, pentru a \u00een\u021belege cum stau lucrurile de fapt, adic\u0103 s\u0103 realiz\u0103m teste A\/B. De fapt, procesul de lansare \u0219i analiza graficelor este destul de rutin\u0103 \u0219i se preteaz\u0103 foarte bine la automatizare. Lanseaz\u0103 modelele noastre gradual, pe 5 %, 30 %, 50 % \u0219i 100 % din utilizatori, \u00een timp ce colect\u0103m toate metriile disponibile despre r\u0103spunsurile modelului \u0219i feedback-ul utilizatorilor. \u00cen caz de abateri semnificative, revenim automat la model, iar pentru celelalte cazuri, odat\u0103 ce acumul\u0103m un num\u0103r suficient de clicuri din partea utilizatorilor, lu\u0103m o decizie cu privire la cre\u0219terea procentului. \u00cen final, ajungem s\u0103 lans\u0103m noul model la 50 % din utilizatori complet automat, iar aprobarea lans\u0103rii pentru \u00eentreaga audien\u021b\u0103 este realizat\u0103 de o persoan\u0103, de\u0219i \u0219i acest pas poate fi automatizat.<\/p>\n<p>Cu toate acestea, procesul de teste A\/B ofer\u0103 oportunit\u0103\u021bi pentru optimizare. Problema este c\u0103 orice test A\/B dureaz\u0103 destul de mult (\u00een cazul nostru, \u00eentre 6 \u0219i 24 de ore, \u00een func\u021bie de cantitatea de feedback), ceea ce \u00eel face destul de costisitor \u0219i cu resurse limitate. \u00cen plus, este necesar un procent suficient de mare de flux pentru test, pentru a accelera \u00een esen\u021b\u0103 timpul total al testului A\/B (a acumula un e\u0219antion statistic semnificativ pentru evaluarea metricilor la un procent mic poate dura foarte mult), ceea ce face ca num\u0103rul de sloturi A\/B s\u0103 fie extrem de limitat. Este evident c\u0103 trebuie s\u0103 scoatem la test doar cele mai promi\u021b\u0103toare modele, de care avem destul de multe \u00een procesul de antrenare suplimentar\u0103.<\/p>\n<p>Pentru a aborda aceast\u0103 problem\u0103, am instruit un clasificator separat care prezice succesul testului A\/B. \u00cen acest scop, lu\u0103m ca tr\u0103s\u0103turi statistica deciziilor, Precision, Recall \u0219i alte metrici pe setul de antrenament, pe setul de validare \u0219i pe e\u0219antionul din flux. De asemenea, compar\u0103m modelul cu cel actual \u00een produc\u021bie, cu euristicile, \u0219i lu\u0103m \u00een considerare complexitatea (Complexity) modelului. Folosind toate aceste tr\u0103s\u0103turi, clasificatorul instruit pe istoricul testelor evalueaz\u0103 modelele-candidat\u0103, \u00een cazul nostru fiind vorba de p\u0103duri de arbori, \u0219i ia o decizie cu privire la care dintre ele s\u0103 fie inclus \u00een testul A\/B. <\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/41b121987209a663075be399e83f5a50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa momentul implement\u0103rii, aceast\u0103 abordare a permis cre\u0219terea de c\u00e2teva ori a num\u0103rului de teste A\/B reu\u0219ite.<\/p>\n<h3>Testare &amp; monitorizare<\/h3>\n<p>\nTestarea \u0219i monitorizarea, surprinz\u0103tor, nu d\u0103uneaz\u0103 s\u0103n\u0103t\u0103\u021bii noastre, ci, dimpotriv\u0103, \u00eembun\u0103t\u0103\u021besc \u0219i ne scap\u0103 de stresuri inutile. Testarea permite prevenirea defec\u021biunilor, iar monitorizarea \u2013 identificarea acestora la timp pentru a reduce impactul asupra utilizatorilor.<\/p>\n<p>Aici este important s\u0103 \u00een\u021belegem c\u0103, mai devreme sau mai t\u00e2rziu, sistemul vostru va face \u00eentotdeauna gre\u0219eli \u2013 aceasta este legat\u0103 de ciclul de dezvoltare al oric\u0103rui software. La \u00eenceputul dezvolt\u0103rii sistemului, exist\u0103 \u00eentotdeauna multe erori p\u00e2n\u0103 c\u00e2nd totul se stabile\u0219te \u0219i se finalizeaz\u0103 etapa principal\u0103 a inova\u021biilor. Dar, cu timpul, entropia \u00ee\u0219i face sim\u021bit\u0103 prezen\u021ba \u0219i apar din nou gre\u0219eli \u2013 din cauza degrad\u0103rii componentelor din jur \u0219i modific\u0103rii datelor, despre care am vorbit la \u00eenceput.<\/p>\n<p>Aici a\u0219 dori s\u0103 subliniez c\u0103 orice sistem de \u00eenv\u0103\u021bare automat\u0103 trebuie considerat din perspectiva profitabilit\u0103\u021bii sale pe toat\u0103 durata ciclului de via\u021b\u0103. Mai jos, graficul ilustreaz\u0103 exemplul func\u021bion\u0103rii unui sistem de detectare a unui tip rar de spam (linia este aproape de zero pe grafic). Odat\u0103, din cauza unei caracteristici cache-uite gre\u0219it, a \u00eennebunit. Din p\u0103cate, nu a existat monitorizare pentru activarea anormal\u0103, iar sistemul a \u00eenceput s\u0103 salveze mesajele \u00een folderul \u201espam\u201d \u00een cantit\u0103\u021bi mari la limita lu\u0103rii unei decizii. \u00cen ciuda remedierii consecin\u021belor, sistemul a gre\u0219it at\u00e2t de mult \u00eenc\u00e2t nu se va amortiza nici m\u0103car \u00een cinci ani. Acesta este un e\u0219ec total din perspectiva ciclului de via\u021b\u0103 al modelului. <\/p>\n<p><img decoding=\"async\" alt=\"Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/65efd799537ceea3761cabc3a764ba90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe aceea, o activitate at\u00e2t de simpl\u0103 precum monitorizarea poate deveni esen\u021bial\u0103 \u00een via\u021ba modelului. Pe l\u00e2ng\u0103 metricile standard \u0219i evidente, lu\u0103m \u00een calcul distribu\u021bia r\u0103spunsurilor \u0219i scorurilor modelului, precum \u0219i distribu\u021bia valorilor caracteristicilor cheie. Folosind divergen\u021ba KL, putem compara distribu\u021bia actual\u0103 cu cea istoric\u0103 sau valorile din testul A\/B cu restul fluxului, ceea ce permite observarea anomaliilor \u00een model \u0219i \u00eentoarcerea modific\u0103rilor la timp.<\/p>\n<p>\u00cen cele mai multe cazuri, lans\u0103m primele versiuni ale sistemelor noastre folosind simple heuristici sau modele, pe care \u00een viitor le folosim ca monitorizare. De exemplu, monitoriz\u0103m modelul NER \u00een compara\u021bie cu regex-urile pentru magazine online specifice, iar dac\u0103 acoperirea clasificatorului scade \u00een compara\u021bie cu acestea, investig\u0103m cauzele. O alt\u0103 utilizare util\u0103 a heuristicii!<\/p>\n<h2>Concluzii<\/h2>\n<p>\nS\u0103 trecem din nou prin ideile cheie ale articolului.<\/p>\n<ul>\n<li><b>Fibd\u00e6k<\/b>. \u00centotdeauna ne g\u00e2ndim la utilizator: cum va tr\u0103i el cu gre\u0219elile noastre, cum va putea s\u0103 le raporteze. Nu uit\u0103m c\u0103 utilizatorii nu sunt o surs\u0103 de feedback curat pentru antrenarea modelelor \u0219i c\u0103 acesta trebuie cur\u0103\u021bat cu ajutorul sistemelor ML auxiliare. Dac\u0103 nu exist\u0103 posibilitatea de a colecta un semnal de la utilizator, c\u0103ut\u0103m surse alternative de feedback, de exemplu, sisteme conexe. \n<\/li>\n<li><b>Re\u00eenv\u0103\u021bare<\/b>. Aici, esen\u021bial\u0103 este continuitatea, a\u0219a c\u0103 ne baz\u0103m pe modelul actual \u00een produc\u021bie. Antren\u0103m noile modele astfel \u00eenc\u00e2t s\u0103 nu se abat\u0103 prea mult de la precedentul, prin regularizare armonic\u0103 \u0219i trucuri similare.<\/li>\n<li><b>Deploy<\/b>. Autodezvoltarea pe baza metricilor reduce semnificativ timpul de implementare a modelelor. Monitorizarea statisticilor \u0219i distribu\u021biei deciziilor, num\u0103rul de false pozitive din partea utilizatorilor este esen\u021bial\u0103 pentru somnul dumneavoastr\u0103 lini\u0219tit \u0219i weekendurile productive.\n<\/li>\n<\/ul>\n<p>\nEi bine, sper c\u0103 ceea ce a\u021bi citit v\u0103 va ajuta s\u0103 \u00eembun\u0103t\u0103\u021bi\u021bi mai repede sistemele voastre ML, s\u0103 le accelera\u021bi lansarea pe pia\u021b\u0103 \u0219i s\u0103 le face\u021bi mai fiabile, reduc\u00e2nd stresul de la munc\u0103.<br \/>\n<br \/>Sursa: <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.2.1 - 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\/ro\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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\udd47Exploatarea \u00eenv\u0103\u021b\u0103rii automate la Mail.ru | ProHoster","description":"Pe baza prezent\u0103rilor mele de la.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/53143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=53143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/53143\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=53143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=53143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=53143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}