{"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\/it\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","title":{"rendered":"L'utilizzo del machine learning in Mail.ru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/ee5728dccb94b849ad3bfd9cf84ad74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Sulla base delle mie presentazioni a Highload++ e DataFest Minsk 2019.<\/i><\/p>\n<p>Per molti oggi la posta \u00e8 una parte indispensabile della vita online. Grazie a essa, gestiamo corrispondenza aziendale, conserviamo varie informazioni importanti relative a finanze, prenotazioni di hotel, elaborazione di ordini e molto altro. A met\u00e0 del 2018 abbiamo formulato una strategia di prodotto per lo sviluppo della posta. Come dovrebbe essere la posta moderna?<\/p>\n<p>La posta deve essere <b>intelligente<\/b>, cio\u00e8 deve aiutare gli utenti a orientarsi in un volume crescente di informazioni: filtrare, strutturare e fornire il tutto nel modo pi\u00f9 comodo possibile. Deve essere <b>utile<\/b>, permettendo di risolvere varie attivit\u00e0 direttamente nella casella di posta, ad esempio, pagando multe (una funzione che, con mio rammarico, utilizzo). E, naturalmente, la posta deve garantire la protezione delle informazioni, bloccando lo spam e proteggendo dagli attacchi, cio\u00e8 deve essere <b>sicura<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nQueste direzioni definiscono una serie di compiti chiave, molti dei quali possono essere risolti in modo efficace con l'apprendimento automatico. Ecco alcuni esempi di funzionalit\u00e0 gi\u00e0 operative, sviluppate nell'ambito della strategia \u2014 una per ogni direzione.<\/p>\n<ul>\n<li><b>Smart Reply<\/b>. Nella posta esiste la funzione di risposta intelligente. Il neural network analizza il testo dell'email, ne comprende il significato e l'obiettivo, e alla fine propone tre risposte pi\u00f9 appropriate: positiva, negativa e neutra. Questo aiuta a risparmiare notevolmente tempo nelle risposte alle email e a rispondere spesso in modo originale e divertente.\n<\/li>\n<li><b>Raggruppamento delle email<\/b>, relative agli ordini nei negozi online. Spesso facciamo acquisti su internet e, di solito, i negozi possono inviare pi\u00f9 email per ogni ordine. Ad esempio, da AliExpress, il servizio pi\u00f9 grande, arrivano molte email riguardanti un solo ordine, e abbiamo calcolato che nel caso estremo il numero pu\u00f2 arrivare fino a 29. Pertanto, grazie a un modello di Named Entity Recognition, estraiamo il numero dell'ordine e altre informazioni dal testo e raggruppiamo tutte le email in un'unica discussione. Mostriamo anche le informazioni principali sull'ordine in un apposito pannello, facilitando cos\u00ec la gestione di questo tipo di email.\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8b37b0bf0c0d152498027bc25d476128.jpg\" style=\"display:block;margin: 0 auto;\" \/>\n<\/li>\n<li><b>Antiphishing<\/b>. Il phishing \u00e8 un tipo di truffa particolarmente insidiosa, attraverso la quale i malintenzionati cercano di appropriarsi delle informazioni finanziarie (inclusi i dati delle carte di credito degli utenti) e delle credenziali. Queste email si mimetizzano dietro a comunicazioni legittime inviate da servizi, anche visivamente. Grazie al Computer Vision, riconosciamo i loghi e lo stile di design delle email delle grandi aziende (come Mail.ru, Sber, Alfa) e consideriamo questo insieme al testo e ad altri indicatori nei nostri classificatori di spam e phishing.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Apprendimento automatico<\/h2>\n<p>\nUn po' di informazione sull'apprendimento automatico nelle email in generale. La posta elettronica \u00e8 un sistema ad alta richiesta: attraverso i nostri server passano in media circa 1,5 miliardi di email al giorno per 30 milioni di utenti DAU. Circa 30 sistemi di apprendimento automatico gestiscono tutte le funzioni e le caratteristiche necessarie. <\/p>\n<p>Ogni email passa attraverso un vero e proprio processo di classificazione. All'inizio, filtriamo lo spam e lasciamo le email valide. Gli utenti spesso non si accorgono del funzionamento del sistema anti-spam, poich\u00e9 il 95-99% dello spam non viene nemmeno inviato nella cartella corrispondente. Il riconoscimento dello spam \u00e8 una parte molto importante e complessa del nostro sistema, poich\u00e9 nel campo dell'anti-spam c'\u00e8 una costante adattamento tra i sistemi di protezione e quelli di attacco, offrendo una sfida ingegneristica continua per il nostro team.<\/p>\n<p>Successivamente, separiamo le email tra quelle inviate da persone e quelle generate da robot. Le email delle persone sono le pi\u00f9 importanti, per cui forniamo funzionalit\u00e0 come Smart Reply. Le email dei robot si suddividono in due categorie: quelle transazionali, che sono email importanti da servizi, ad esempio conferme di acquisti o prenotazioni di hotel, e quelle informative, che comprendono pubblicit\u00e0 aziendale e sconti. <\/p>\n<p>Riteniamo che le email transazionali abbiano la stessa importanza della corrispondenza personale. Devono essere facilmente accessibili, poich\u00e9 spesso \u00e8 necessario trovare rapidamente informazioni su un ordine o una prenotazione di volo, e si finisce per sprecare tempo a cercare tali email. Pertanto, per comodit\u00e0, le suddividiamo automaticamente in sei categorie principali: viaggi, ordini, finanze, biglietti, registrazioni e, infine, multe.<\/p>\n<p>Le email informative sono il gruppo pi\u00f9 numeroso e, forse, meno importante, che non richiede una reazione immediata, dato che nulla di sostanziale cambier\u00e0 nella vita dell'utente se non legge questo tipo di email. Nel nostro nuovo interfaccia, le raggruppiamo in due thread: social media e newsletter, pulendo visivamente la casella e lasciando in vista solo le email importanti.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/175773879daaa29d1542a98070cb7972.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Gestione<\/h3>\n<p>\nUn gran numero di sistemi presenta diverse difficolt\u00e0 nell'uso. Infatti, i modelli nel tempo degradano, proprio come qualsiasi software: i segnali si rompono, le macchine si guastano, si accumula codice errato. Inoltre, i dati cambiano costantemente: nuovi dati vengono aggiunti, si trasforma il comportamento degli utenti ecc., pertanto un modello senza adeguato supporto nel tempo funzioner\u00e0 sempre peggio. <\/p>\n<p>Non si pu\u00f2 dimenticare che pi\u00f9 l'apprendimento automatico penetra nella vita degli utenti, maggiore \u00e8 l'influenza che esercitano sull'ecosistema e, di conseguenza, maggiori sono le perdite finanziarie o i profitti che possono ottenere gli attori del mercato. Pertanto, in un numero crescente di settori, gli attori si adattano al lavoro degli algoritmi ML (classici esempi - pubblicit\u00e0, ricerca e gi\u00e0 menzionato antispam).<\/p>\n<p>Inoltre, i compiti di apprendimento automatico hanno una caratteristica: qualsiasi, anche piccolo, cambiamento nel sistema pu\u00f2 generare molto lavoro con il modello: gestione dei dati, riaddestramento, deployment, il che pu\u00f2 richiedere settimane o mesi. Pertanto, quanto pi\u00f9 velocemente cambia l'ambiente in cui operano i vostri modelli, tanto maggiori sforzi richiede il loro supporto. Un team pu\u00f2 creare molti sistemi e rallegrarsi per questo, per poi spendere quasi tutte le risorse nel loro supporto, senza possibilit\u00e0 di fare qualcosa di nuovo. Una volta ci siamo trovati in una situazione simile nel team antispam. E abbiamo tratto la conclusione ovvia che il supporto deve essere automatizzato.<\/p>\n<h3>Automazione<\/h3>\n<p>\nCosa si pu\u00f2 automatizzare? In realt\u00e0 quasi tutto. Ho individuato quattro direzioni che definiscono l'infrastruttura dell'apprendimento automatico:<\/p>\n<ul>\n<li>raccolta dati;\n<\/li>\n<li>riaddestramento;\n<\/li>\n<li>deployment;\n<\/li>\n<li>test e monitoraggio.\n<\/li>\n<\/ul>\n<p>\nSe l'ambiente \u00e8 instabile e cambia costantemente, allora l'intera infrastruttura attorno al modello diventa molto pi\u00f9 importante del modello stesso. Pu\u00f2 trattarsi di un vecchio buon classificatore lineare, ma se vengono fornite correttamente le caratteristiche e viene stabilito un buon feedback dagli utenti, funzioner\u00e0 molto meglio rispetto ai modelli State-Of-The-Art con tutte le complicazioni.<\/p>\n<h4>Ciclo di feedback<\/h4>\n<p>\nQuesto ciclo comprende la raccolta di dati, il riaddestramento e il deployment \u2014 in sostanza, l'intero ciclo di aggiornamento del modello. Perch\u00e9 \u00e8 importante? Guarda il grafico delle registrazioni alla posta:<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/f3c98bd49a101754cf299821a40e2b8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUno sviluppatore di machine learning ha implementato un modello anti-bot che impedisce ai bot di registrarsi nella mail. Il grafico scende a un valore in cui rimangono solo utenti reali. Tutto eccellente! Ma passano quattro ore, i botmaster aggiornano i loro script e tutto torna come prima. In questa implementazione, lo sviluppatore ha impiegato un mese per aggiungere le caratteristiche e riaddestrare il modello, ma lo spammer \u00e8 riuscito ad adattarsi in quattro ore.<\/p>\n<p>Per non far s\u00ec che sia cos\u00ec doloroso e non dover rifare tutto successivamente, bisogna pensare fin dall'inizio a come apparir\u00e0 il ciclo di feedback e cosa faremo se l'ambiente cambia. Iniziamo dalla raccolta dei dati: questo \u00e8 il carburante per i nostri algoritmi.<\/p>\n<h2>Raccolta dati<\/h2>\n<p>\n\u00c8 chiaro che per le reti neurali moderne, pi\u00f9 dati ci sono, meglio \u00e8, e questi, fondamentalmente, vengono generati dagli utenti del prodotto. Gli utenti possono aiutarci etichettando i dati, ma non dobbiamo abusarne, poich\u00e9 a un certo punto gli utenti si stancheranno di riaddestrare i vostri modelli e passeranno a un altro prodotto. <\/p>\n<p>Uno degli errori pi\u00f9 comuni (qui faccio riferimento a Andrew Ng) \u00e8 una forte focalizzazione sulle metriche su un dataset di test piuttosto che sul feedback degli utenti, che in realt\u00e0 \u00e8 il principale parametro della qualit\u00e0 del lavoro, poich\u00e9 stiamo creando un prodotto per l'utente. Se il lavoro del modello non \u00e8 chiaro o non piace all'utente, allora \u00e8 tutto vano. <\/p>\n<p>Pertanto, l'utente deve sempre avere la possibilit\u00e0 di esprimere la propria opinione; bisogna fornirgli uno strumento per il feedback. Se riteniamo che nella casella sia arrivata una mail riguardante le finanze, dobbiamo marcarla come \"finanze\" e disegnare un pulsante che l'utente pu\u00f2 premere per dire che non si tratta di finanze.<\/p>\n<h3>Qualit\u00e0 del feedback<\/h3>\n<p>\nParliamo della qualit\u00e0 del feedback degli utenti. Innanzitutto, tu e l'utente potete attribuire significati diversi alla stessa parola. Per esempio, tu e i product manager ritenete che \"finanze\" si riferisca alle lettere provenienti dalla banca, mentre l'utente pensa che una lettera della nonna riguardante la pensione rientri anch'essa nel tema delle finanze. In secondo luogo, ci sono utenti che premono pulsanti senza alcuna logica. In terzo luogo, l'utente potrebbe avere idee completamente sbagliate sulle proprie conclusioni. Un esempio lampante dalla nostra esperienza \u00e8 l'implementazione di un classificatore <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\">di spam nigeriano<\/a><\/noindex>, un tipo di spam piuttosto divertente, in cui all'utente viene offerto di ritirare diversi milioni di dollari da un lontano parente trovato all'improvviso in Africa. Dopo aver implementato questo classificatore, abbiamo verificato i click su \"Non spam\" su queste lettere, e si \u00e8 rivelato che l'80% di esse era un delizioso spam nigeriano, il che dimostra che gli utenti possono essere estremamente creduloni.<\/p>\n<p>E non dimentichiamo che i pulsanti possono essere cliccati non solo da persone, ma anche da vari bot che si spacciano per browser. Quindi, il feedback grezzo non \u00e8 adatto per l'apprendimento. Cosa si pu\u00f2 fare con queste informazioni?<\/p>\n<p>Adottiamo due approcci: <\/p>\n<ul>\n<li><b>Feedback dal ML correlato<\/b>. Ad esempio, abbiamo un sistema anti-bot online che, come ho gi\u00e0 detto, prende decisioni rapide basate su un numero limitato di segnali. E c'\u00e8 un secondo sistema, pi\u00f9 lento, che opera post-factum. Esso dispone di pi\u00f9 dati sull'utente, sul suo comportamento, ecc. Di conseguenza, viene presa la decisione pi\u00f9 ponderata, e quindi ha una maggiore precisione e completezza. Possiamo indirizzare la differenza di funzionalit\u00e0 tra questi sistemi nel primo come dati per l'apprendimento. In questo modo, il sistema pi\u00f9 semplice cercher\u00e0 sempre di avvicinarsi alle prestazioni di quello pi\u00f9 complesso.\n<\/li>\n<li><b>Classificazione dei click<\/b>. \u00c8 possibile semplicemente classificare ogni clic dell'utente, valutarne la validit\u00e0 e la possibilit\u00e0 di utilizzo. Lo facciamo nell'anti-spam della posta, utilizzando segnali dell'utente, la sua cronologia, i segnali del mittente, il testo stesso e il risultato del lavoro dei classificatori. In definitiva otteniamo un sistema automatico che valida il feedback dell'utente. E poich\u00e9 deve essere ri-addestrato in modo sostanzialmente meno frequente, il suo lavoro potrebbe diventare la base per tutti gli altri sistemi. La priorit\u00e0 principale in questo modello \u00e8 la precisione, perch\u00e9 addestrare il modello su dati imprecisi pu\u00f2 avere conseguenze. \n<\/li>\n<\/ul>\n<p>\nMentre puliamo i dati e ri-addestriamo i nostri sistemi ML, non dobbiamo dimenticare gli utenti, poich\u00e9 per noi migliaia, milioni di errori sul grafico sono statistiche, mentre per l'utente ogni bug \u00e8 una tragedia. Oltre al fatto che l'utente deve in qualche modo convivere con il tuo errore nel prodotto, lui dopo il feedback si aspetta l'esclusione di situazioni simili in futuro. Pertanto, \u00e8 sempre bene dare agli utenti non solo la possibilit\u00e0 di votare, ma anche di correggere il comportamento dei sistemi ML, creando, ad esempio, euristiche personali per ogni clic di feedback; nel caso della posta, potrebbe essere la possibilit\u00e0 di filtrare tali email per mittente e oggetto per questo utente.<\/p>\n<p>Inoltre, \u00e8 necessario basarsi su rapporti o segnalazioni al supporto, in modo semi-automatico o manuale, per adattare il modello, affinch\u00e9 anche gli altri utenti non subiscano problemi simili.<\/p>\n<h3>Euristiche per l'addestramento<\/h3>\n<p>\nCon queste euristiche e adattamenti ci sono due problemi. Il primo \u00e8 che il numero crescente di adattamenti \u00e8 difficile da mantenere, per non parlare della loro qualit\u00e0 e funzionalit\u00e0 a lungo termine. Il secondo problema \u00e8 che l'errore potrebbe non essere frequente e alcuni clic per il ri-addestramento del modello potrebbero non essere sufficienti. Sembrerebbe che questi due effetti non correlati possano essere notevolmente ridotti applicando il seguente approccio.<\/p>\n<ol>\n<li>Creiamo un adattamento temporaneo. \n<\/li>\n<li>Invitiamo i dati ad esso nel modello, che viene regolarmente ri-addestrato anche sui dati ottenuti. Qui, ovviamente, \u00e8 importante che l'euristica abbia un'alta precisione, per non compromettere la qualit\u00e0 dei dati nel set di addestramento. \n<\/li>\n<li>Poi mettiamo in atto il monitoraggio per l'attivazione del bypass e, se dopo un certo periodo il bypass non si attiva pi\u00f9 e viene completamente sostituito dal modello, possiamo rimuoverlo senza problemi. Ora \u00e8 improbabile che questo problema si ripresenti.\n<\/li>\n<\/ol>\n<p>\nQuindi l'esercito di bypass \u00e8 molto utile. L'importante \u00e8 che il loro utilizzo sia temporaneo e non permanente. <\/p>\n<h2>Riaddestramento<\/h2>\n<p>\nIl riaddestramento \u00e8 il processo di aggiunta di nuovi dati, ottenuti in seguito al feedback degli utenti o di altri sistemi, e di formazione del modello esistente su di essi. Con il riaddestramento possono sorgere diversi problemi:<\/p>\n<ol>\n<li>Il modello potrebbe semplicemente non supportare il riaddestramento e dover essere addestrato solo da zero. \n<\/li>\n<li>Nella natura non \u00e8 scritto da nessuna parte che il riaddestramento migliori necessariamente la qualit\u00e0 del lavoro in produzione. Spesso succede il contrario, ovvero \u00e8 possibile solo un peggioramento.\n<\/li>\n<li>Le modifiche possono essere imprevedibili. Questo \u00e8 un aspetto piuttosto delicato che abbiamo identificato. Anche se il nuovo modello in un test A\/B mostra risultati simili rispetto a quello attuale, ci\u00f2 non significa affatto che funzioner\u00e0 in modo identico. Il loro funzionamento pu\u00f2 differire di un qualche percento che pu\u00f2 portare a nuovi errori o ripristinare vecchi errori gi\u00e0 corretti. Con gli errori attuali sia noi che gli utenti siamo gi\u00e0 abituati a convivere e quando emerge un gran numero di nuovi errori, l'utente potrebbe non capire cosa sta succedendo, dal momento che si aspetta un comportamento prevedibile.\n<\/li>\n<\/ol>\n<p>\nQuindi, la cosa pi\u00f9 importante nel riaddestramento \u00e8 garantire il miglioramento del modello, o almeno non peggiorarlo. <\/p>\n<p>La prima cosa che ci viene in mente quando parliamo di riaddestramento \u00e8 l'approccio dell'Active Learning. Cosa significa questo? Ad esempio, un classificatore determina se una email \u00e8 di natura finanziaria e intorno al suo confine di decisione aggiungiamo un campione di esempi etichettati. Questo funziona bene, ad esempio, nella pubblicit\u00e0, dove ci sono molte informazioni di feedback e si pu\u00f2 addestrare il modello in modalit\u00e0 online. Se invece il feedback \u00e8 scarso, otteniamo un campione pesantemente sbilanciato rispetto alla distribuzione dei dati in produzione, sulla quale non possiamo valutare il comportamento del modello durante l'esercizio.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/fd1b3e07bfaf896dde3248e43537f61a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn realt\u00e0, il nostro obiettivo \u00e8 preservare i vecchi modelli, quelli gi\u00e0 noti, e acquisirne di nuovi. Qui la continuit\u00e0 \u00e8 importante. Il modello che abbiamo faticato a sviluppare sta gi\u00e0 funzionando, quindi possiamo basarci sulle sue prestazioni. <\/p>\n<p>Nella posta vengono utilizzati diversi modelli: alberi, lineari, reti neurali. Per ognuno di essi creiamo il nostro algoritmo di riaddestramento. Durante il processo di riaddestramento, otteniamo non solo nuovi dati, ma anche spesso nuove caratteristiche, che terremo in considerazione in tutti gli algoritmi sottostanti.<\/p>\n<h3>Modelli lineari<\/h3>\n<p>\nSupponiamo di avere una regressione logistica. Componiamo la funzione di perdita del modello dai seguenti componenti:<\/p>\n<ul>\n<li>LogLoss sui nuovi dati;\n<\/li>\n<li>regolarizziamo i pesi delle nuove caratteristiche (non tocchiamo le vecchie);\n<\/li>\n<li>impariamo anche dai dati vecchi per preservare i vecchi modelli;\n<\/li>\n<li>e, forse, cosa pi\u00f9 importante: applichiamo la Regolarizzazione Armonica, che garantisce che i pesi non cambino drasticamente rispetto al vecchio modello secondo la norma.\n<\/li>\n<\/ul>\n<p>\nPoich\u00e9 ogni componente di Loss ha dei coefficienti, possiamo trovare valori ottimali per il nostro problema attraverso la cross-validation o in base ai requisiti di prodotto.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/00ae86d23afb780f5e260e61f833d4bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Alberi<\/h3>\n<p>\nPassiamo agli alberi decisionali. Abbiamo sviluppato il seguente algoritmo di riaddestramento per gli alberi:<\/p>\n<ol>\n<li>In produzione stiamo utilizzando una foresta di 100-300 alberi, addestrata su un vecchio dataset.\n<\/li>\n<li>Alla fine rimuoviamo M = 5 alberi e aggiungiamo 2M = 10 nuovi, addestrati su tutto il dataset, ma con un alto peso sui nuovi dati, il che garantisce naturalmente una modifica incrementale del modello.\n<\/li>\n<\/ol>\n<p>\n\u00c8 ovvio che nel tempo il numero di alberi aumenta notevolmente e devono essere ridotti periodicamente per rispettare i tempi. A tal fine utilizziamo il sempre presente Knowledge Distillation (KD). Un breve riassunto del suo funzionamento.<\/p>\n<ol>\n<li>Abbiamo l'attuale modello \"complesso\". Lo eseguiamo sul dataset di addestramento e otteniamo la distribuzione delle probabilit\u00e0 delle classi in output.\n<\/li>\n<li>Successivamente, addestriamo un modello studente (in questo caso un modello con un numero minore di alberi) a ripetere i risultati del modello, utilizzando la distribuzione delle classi come variabile target.\n<\/li>\n<li>\u00c8 importante notare che non utilizziamo in alcun modo la formattazione del dataset, e quindi possiamo utilizzare dati arbitrari. Naturalmente, usiamo un campione di dati dal flusso di produzione come set di apprendimento per il modello studente. In questo modo, il set di addestramento ci consente di garantire la precisione del modello, mentre il campione del flusso assicura prestazioni simili nella distribuzione di produzione, compensando il bias del set di apprendimento.\n<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/3fdfcb9b1e5a6fa824226a429afc475a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa combinazione di queste due metodologie (l'aggiunta di alberi e la riduzione periodica della loro quantit\u00e0 tramite Knowledge Distillation) garantisce l'introduzione di nuovi schemi e una piena continuit\u00e0.<\/p>\n<p>Con la KD eseguiamo anche la differenziazione delle operazioni con le caratteristiche del modello, ad esempio, la rimozione di caratteristiche e la gestione delle assenze. Nel nostro caso, abbiamo una serie di importanti caratteristiche statistiche (sui mittenti, sugli hash testuali, sugli URL, ecc.) che sono memorizzate in un database soggetto a fallimento. Pertanto, il modello non \u00e8 pronto a tale eventualit\u00e0, poich\u00e9 non ci sono situazioni di fallimento nel set di addestramento. In questi casi, combiniamo le tecniche di KD e di augmentazione: durante l'addestramento, per una parte dei dati, rimuoviamo o azzeriamo le caratteristiche necessarie, mentre le etichette (le uscite del modello attuale) rimangono quelle originali, e il modello studente impara a ripetere questa distribuzione.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/5e1f5af9a359646a49f4fe88ffed1025.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbbiamo notato che pi\u00f9 grave \u00e8 la manipolazione dei modelli, maggiore \u00e8 la percentuale di campione di flusso richiesta.<\/p>\n<p>Per la rimozione di caratteristiche, l'operazione pi\u00f9 semplice, \u00e8 necessario solo un piccolo flusso, poich\u00e9 cambiano solo alcune caratteristiche, e il modello attuale \u00e8 stato addestrato sullo stesso set \u2014 la differenza \u00e8 minima. Per semplificare il modello (riducendo il numero di alberi in diversi modi), \u00e8 gi\u00e0 necessario avere un rapporto di 50 su 50. E per le assenze di importanti caratteristiche statistiche che influenzano seriamente le prestazioni del modello, serve un flusso ancora maggiore per livellare il funzionamento del nuovo modello resistente alle assenze su tutti i tipi di messaggi. <\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in 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>\nPassiamo a FastText. Ricordo che la rappresentazione (Embedding) di una parola consiste nella somma dell'embedding della parola stessa e di tutti i suoi N-gram di lettere, in genere trigrammi. Poich\u00e9 possono esserci molti trigrammi, si utilizza il Bucket Hashing, ovvero la trasformazione dell'intero spazio in una certa mappa hash fissa. Di conseguenza, la matrice dei pesi ha dimensioni pari al numero di parole pi\u00f9 i bucket. <\/p>\n<p>Durante il fine-tuning emergono nuove caratteristiche: parole e trigrammi. Nel fine-tuning standard di Facebook non accade nulla di significativo. Vengono solamente aggiornati i pesi esistenti con la cross-entropy sui nuovi dati. In questo modo, le nuove caratteristiche non vengono utilizzate; chiaramente, questo approccio presenta tutti i difetti sopra descritti, legati all'imprevedibilit\u00e0 del modello in produzione. Pertanto, abbiamo apportato alcune modifiche a FastText. Aggiungiamo tutti i nuovi pesi (parole e trigrammi), addestriamo di nuovo l'intera matrice con la cross-entropy e aggiungiamo una regolarizzazione armonica, analogamente al modello lineare, che garantisce un'alterazione non sostanziale dei pesi esistenti.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in 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>\nCon le reti convoluzionali la situazione \u00e8 un po' pi\u00f9 complessa. Se in una CNN vengono aggiornati gli strati finali, ovviamente, \u00e8 possibile applicare la regolarizzazione armonica e garantire la continuit\u00e0. Ma nel caso in cui sia necessario eseguire il fine-tuning dell'intera rete, tale regolarizzazione non pu\u00f2 essere applicata a tutti gli strati. Tuttavia, esiste un'opzione per l'addestramento di embedding complementari attraverso il Triplet Loss (<noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1503.03832\">articolo originale<\/a><\/noindex>).<\/p>\n<h4>Triplet Loss<\/h4>\n<p>\nPrendiamo come esempio il compito dell'antifishing, esaminiamo in linea generale il Triplet Loss. Prendiamo il nostro logo, cos\u00ec come esempi positivi e negativi di loghi di altre aziende. Minimizzando la distanza tra i primi e massimizzando la distanza tra i secondi, facciamo questo con un piccolo margine, per garantire una maggiore compattezza delle classi. <\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/dc8547fa042286798eb5c2f0887c4da6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe addestriamo nuovamente la rete, lo spazio metrico cambia completamente e diventa assolutamente incompatibile con quello precedente. Questo \u00e8 un serio problema nei compiti che utilizzano vettori. Per aggirare questo problema, durante l'addestramento incorporeremo vecchi embedding.<\/p>\n<p>Abbiamo aggiunto nuovi dati al set di addestramento e stiamo addestrando da zero la seconda versione del modello. Nella seconda fase, perfezioniamo la nostra rete (Finetuning): prima viene addestrato l'ultimo strato, poi viene sbloccata l'intera rete. Durante la composizione dei triplet, solo una parte degli embedding viene calcolata utilizzando il modello addestrato, mentre gli altri vengono calcolati utilizzando il vecchio modello. In questo modo, nel processo di affinamento, garantiamo la compatibilit\u00e0 degli spazi metrici v1 e v2. \u00c8 una sorta di variante della regolarizzazione armonica.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/854d4fcc97775b24e6863cc38743cd27.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Architettura complessiva<\/h3>\n<p>\nSe consideriamo l'intero sistema prendendo come esempio l'antispam, i modelli non sono isolati, ma sono incorporati l'uno nell'altro. Prendiamo immagini, testo e altre caratteristiche, e tramite CNN e Fast Text otteniamo embedding. Successivamente, sui embedding vengono applicati classificatori, che forniscono score per diverse classi (tipi di email, spam, presenza del logo). Gli score e le caratteristiche vengono quindi inviati in una foresta di alberi per prendere la decisione finale. Classificatori separati in questo schema consentono una migliore interpretazione dei risultati del sistema e un affinamento pi\u00f9 mirato dei componenti in caso di problemi, piuttosto che presentare tutti i dati grezzi agli alberi decisionali.<\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/30effc5ef7398db5f085b6dd415647d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDi conseguenza, garantiamo continuit\u00e0 a ogni livello. A livello inferiore, in CNN e Fast Text, utilizziamo la regolarizzazione armonica; per i classificatori a livello medio, utilizziamo anch'essa la regolarizzazione armonica e la calibrazione dello score per la compatibilit\u00e0 della distribuzione di probabilit\u00e0. E il boosting degli alberi viene addestrato in modo incrementale o tramite Knowledge Distillation.<\/p>\n<p>In generale, il supporto di un sistema di machine learning cos\u00ec incorporato rappresenta di solito una sfida, poich\u00e9 qualsiasi componente a livello inferiore porta all'aggiornamento dell'intero sistema sovrastante. Tuttavia, poich\u00e9 nel nostro setup ogni componente cambia leggermente ed \u00e8 compatibile con il precedente, l'intero sistema pu\u00f2 essere aggiornato a blocchi senza la necessit\u00e0 di riaddestrare l'intera struttura, il che consente di mantenerlo senza un notevole sovraccarico. <\/p>\n<h2>Deploy<\/h2>\n<p>\nAbbiamo trattato la raccolta dei dati e l'affinamento di diversi tipi di modelli, quindi passiamo alla loro distribuzione nell'ambiente di produzione.<\/p>\n<h3>A\/B testing<\/h3>\n<p>\nCome ho detto in precedenza, durante il processo di raccolta dati, di solito otteniamo un campione distorto, il che rende impossibile valutare il performance model in produzione. Pertanto, durante il deployment, \u00e8 fondamentale confrontare il modello con la versione precedente per capire come stanno realmente le cose, ovvero effettuare test A\/B. In effetti, il processo di rilascio e l'analisi dei grafici \u00e8 piuttosto routinario e si presta bene all'automazione. Rilasciamo i nostri modelli gradualmente sul 5%, 30%, 50% e 100% degli utenti, raccogliendo nel contempo tutte le metriche disponibili sulle risposte del modello e sul feedback degli utenti. In caso di picchi significativi, ripristiniamo automaticamente il modello, mentre per gli altri casi, dopo aver raccolto un numero sufficiente di clic da parte degli utenti, decidiamo di aumentare la percentuale. Alla fine, portiamo il nuovo modello al 50% degli utenti in modo completamente automatico, e una persona approva il rilascio a tutto il pubblico, anche se questo passaggio pu\u00f2 essere automatizzato.<\/p>\n<p>Tuttavia, il processo di test A\/B offre ampie possibilit\u00e0 di ottimizzazione. Il fatto \u00e8 che qualsiasi test A\/B \u00e8 piuttosto lungo (nel nostro caso dura da 6 a 24 ore a seconda della quantit\u00e0 di feedback), il che lo rende piuttosto costoso e con risorse limitate. Inoltre, \u00e8 necessario un flusso di utenti sufficientemente alto per il test, per accelerare il tempo totale del test A\/B (raccogliere un campione statisticamente significativo per la valutazione delle metriche su una piccola percentuale pu\u00f2 richiedere molto tempo), il che rende il numero di slot A\/B estremamente limitato. \u00c8 evidente che dobbiamo testare solo i modelli pi\u00f9 promettenti, di cui ne otteniamo numerosi durante il processo di affinamento.<\/p>\n<p>Per affrontare questo problema, abbiamo addestrato un classificatore separato che prevede il successo del test A\/B. Per questo utilizziamo come caratteristiche le statistiche di decisione, Precision, Recall e altre metriche sui dati di addestramento, su un set di convalida e su un campione proveniente dal flusso. Confrontiamo anche il modello con quello attuale in produzione, con le euristiche e consideriamo la complessit\u00e0 (Complexity) del modello. Utilizzando tutte queste caratteristiche, il classificatore addestrato sulla storia dei test valuta i modelli candidati, nel nostro caso si tratta di foreste di alberi, e prende decisione su quale di essi far passare al test A\/B. <\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/41b121987209a663075be399e83f5a50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl momento dell'implementazione, questo approccio ha consentito di aumentare notevolmente il numero di A\/B test di successo.<\/p>\n<h3>Test e monitoraggio<\/h3>\n<p>\nStranamente, il testing e il monitoraggio non danneggiano la nostra salute, anzi, migliorano e alleviano lo stress. Il testing consente di prevenire i guasti, mentre il monitoraggio aiuta a rilevarli in tempo per ridurre l'impatto sugli utenti.<\/p>\n<p>\u00c8 importante comprendere che prima o poi il vostro sistema presenter\u00e0 sempre errori: questo \u00e8 legato al ciclo di sviluppo di qualsiasi software. All'inizio dello sviluppo, ci sono sempre molti bug fino a quando tutto non si stabilizza e non si conclude la fase principale delle innovazioni. Ma col tempo, l'entropia prende piede e riappaiono gli errori, a causa della degradazione dei componenti circostanti e della modifica dei dati, come ho accennato all'inizio.<\/p>\n<p>Qui vorrei sottolineare che ogni sistema di machine learning deve essere considerato in termini di vantaggio durante tutto il ciclo di vita. Di seguito, il grafico mostra un esempio di un sistema di rilevamento di un raro tipo di spam (nel grafico, la linea si trova intorno allo zero). Una volta, a causa di una caratteristica erroneamente memorizzata nella cache, \u00e8 impazzito. Purtroppo, non c'era monitoraggio per attivazioni anomale, quindi il sistema ha iniziato a salvare le email nella cartella \"spam\" al confine della decisione in gran numero. Nonostante la correzione delle conseguenze, il sistema aveva gi\u00e0 commesso cos\u00ec tanti errori che non si ripagherebbe nemmeno in cinque anni. Questo rappresenta un completo fallimento dal punto di vista del ciclo di vita del modello. <\/p>\n<p><img decoding=\"async\" alt=\"L&#039;utilizzo del machine learning in Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/65efd799537ceea3761cabc3a764ba90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPertanto, una cosa cos\u00ec semplice come il monitoraggio pu\u00f2 diventare fondamentale nella vita del modello. Oltre alle metriche standard e ovvie, consideriamo la distribuzione delle risposte e i punteggi del modello, nonch\u00e9 la distribuzione dei valori delle caratteristiche chiave. Utilizzando la divergenza di KL, possiamo confrontare la distribuzione attuale con quella storica o i valori nel test A\/B con il resto del flusso, il che ci consente di rilevare anomalia nel modello e ripristinare le modifiche in tempo.<\/p>\n<p>Nella maggior parte dei casi, lanciamo le nostre prime versioni dei sistemi utilizzando semplici euristiche o modelli, che in futuro utilizzeremo come monitoraggio. Ad esempio, monitoriamo un modello NER rispetto a espressioni regolari per negozi online specifici e se la copertura del classificatore diminuisce in confronto a queste, cerchiamo di comprendere le ragioni. Un altro utilizzo utile delle euristiche!<\/p>\n<h2>Conclusioni<\/h2>\n<p>\nRipercorriamo ancora una volta i punti chiave dell'articolo.<\/p>\n<ul>\n<li><b>Fibd\u044d\u043a<\/b>. Pensiamo sempre all'utente: come vivr\u00e0 con i nostri errori, come potr\u00e0 segnalarli. Non dimentichiamo che gli utenti non sono una fonte di feedback puro per l'apprendimento dei modelli, e questo deve essere ripulito con l'ausilio di sistemi ML complementari. Se non \u00e8 possibile raccogliere segnali dagli utenti, cerchiamo fonti alternative di feedback, ad esempio, sistemi correlati. \n<\/li>\n<li><b>Riaddestramento<\/b>. Qui l'elemento principale \u00e8 la continuit\u00e0, quindi ci basiamo sul modello attuale in produzione. Alleniamo nuovi modelli in modo che non si discostino molto da quello precedente grazie alla regolarizzazione armonica e ad altri trucchi simili.<\/li>\n<li><b>Deploy<\/b>. L'autodeploy delle metriche riduce drasticamente il tempo di implementazione dei modelli. Il monitoraggio delle statistiche e della distribuzione delle decisioni, il numero di errori da parte degli utenti \u00e8 essenziale per il vostro sonno tranquillo e per weekend produttivi.\n<\/li>\n<\/ul>\n<p>\nBeh, spero che quanto letto vi aiuti a migliorare pi\u00f9 rapidamente i vostri sistemi ML, a accelerare il loro lancio sul mercato e a renderli pi\u00f9 affidabili, riducendo lo stress legato al lavoro.<br \/>\n<br \/>Fonte: <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.1.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\/it\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Utilizzo del machine learning in Mail.ru | ProHoster","description":"Ispirato dai miei interventi su.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/53143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=53143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/53143\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=53143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=53143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=53143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}