Utilizzo del machine learning in Mail.ru

Utilizzo del machine learning in Mail.ru

Sulla base dei miei interventi a Highload++ e DataFest Minsk 2019.

Per molte persone oggi l'email è una parte essenziale della vita online. Con essa gestiamo la corrispondenza commerciale, conserviamo informazioni importanti legate a finanze, prenotazioni alberghiere, ordini e molto altro. A metà del 2018 abbiamo delineato una strategia di sviluppo del prodotto per l'email. Come dovrebbe essere l'email moderna?

L'email deve essere intelligente, cioè deve aiutare gli utenti a orientarsi nel crescente volume di informazioni: filtrare, strutturare e fornire contenuti nel modo più conveniente possibile. Deve essere utile, consentendo di risolvere diverse problematiche direttamente nella casella di posta, ad esempio il pagamento delle multe (una funzione che uso, con rammarico). E, naturalmente, l'email deve garantire la protezione delle informazioni, bloccando lo spam e proteggendo dagli hack, ovvero deve essere sicura.

Questi obiettivi determinano una serie di compiti chiave, molti dei quali possono essere affrontati in modo efficace tramite il machine learning. Ecco alcuni esempi di funzionalità già implementate nell'ambito della strategia - uno per ciascun obiettivo.

  • Smart Reply. Nella posta è presente la funzione di risposta intelligente. La rete neurale analizza il testo dell'email, ne comprende il significato e l'obiettivo, e propone tre risposte più appropriate: positiva, negativa e neutrale. Questo contribuisce a risparmiare notevolmente tempo nelle risposte alle email e permette anche di rispondere in modo originale e divertente.
  • Raggruppamento delle email, relative agli ordini nei negozi online. Spesso acquistiamo online e, di solito, i negozi possono inviare più email per ogni ordine. Ad esempio, da AliExpress, il servizio più grande, possono arrivare molte email per un unico ordine e abbiamo calcolato che in alcuni casi possono arrivare fino a 29. Pertanto, usando un modello di Named Entity Recognition, estraiamo il numero d'ordine e altre informazioni dal testo e raggruppiamo tutte le email in un unico thread. Mostriamo anche le informazioni principali sull'ordine in un riquadro separato, facilitando la gestione di questo tipo di email.

    Utilizzo del machine learning in Mail.ru

  • Antiphishing. Il phishing è un tipo di email fraudolento particolarmente pericoloso, attraverso il quale i malintenzionati cercano di ottenere informazioni finanziarie (inclusi i dati delle carte di credito degli utenti) e le credenziali di accesso. Tali email si mascherano da vere, inviate da servizi, anche a livello visivo. Pertanto, tramite la Computer Vision, riconosciamo i loghi e lo stile delle email delle grandi aziende (ad esempio, Mail.ru, Sber, Alfa) e teniamo conto di ciò insieme al testo e ad altri segnali nei nostri classificatori di spam e phishing.

Machine Learning

Un po' di machine learning nell'email in generale. L'email è un sistema ad alta capacità: attraverso i nostri server passano in media 1,5 miliardi di email al giorno per 30 milioni di utenti DAU. Circa 30 sistemi di machine learning gestiscono tutte le funzioni e le caratteristiche necessarie.

Ogni email passa attraverso un intero processo di classificazione. Prima filtriamo lo spam e lasciamo le email buone. Gli utenti spesso non notano l'operato dell'antispam, poiché il 95-99% dello spam non finisce nemmeno nella cartella corrispondente. Il riconoscimento dello spam è una parte molto importante del nostro sistema ed è la più complessa, poiché nel campo dell'antispam c'è una continua adattamento tra sistemi di protezione e attacco, il che rappresenta una sfida ingegneristica continua per il nostro team.

In seguito, separiamo le email tra quelle inviate da persone e quelle inviate da robot. Le email delle persone sono le più importanti, quindi per esse offriamo funzioni come Smart Reply. Le email dei robot si dividono in due categorie: transazionali — email importanti dai servizi, come conferme di acquisto o prenotazione alberghiera, finanze, e informative — pubblicità aziendale, sconti.

Riteniamo che le email transazionali abbiano la stessa importanza della corrispondenza personale. Devono essere facilmente accessibili, poiché può essere necessario trovare rapidamente informazioni su un ordine o una prenotazione aerea, e non vogliamo sprecare tempo a cercare queste email. Pertanto, per comodità, le suddividiamo automaticamente in sei categorie principali: viaggi, ordini, finanze, biglietti, registrazioni e, infine, multe.

Le email informative sono il gruppo più numeroso e probabilmente meno importante, che non richiede una reazione immediata, poiché non ci saranno cambiamenti significativi nella vita dell'utente se non legge tale email. Nel nostro nuovo interfaccia, le raggruppiamo in due thread: social e newsletter, pulendo visivamente la casella e mostrando solo le email importanti.

Utilizzo del machine learning in Mail.ru

Operatività

Un gran numero di sistemi presenta diverse difficoltà nella gestione. Col passare del tempo, i modelli tendono a degradarsi, proprio come qualsiasi software: si rompono i segnali, le macchine smettono di funzionare, si accumula codice errato. Inoltre, i dati cambiano continuamente: nuove informazioni vengono aggiunte, evolve il comportamento degli utenti, ecc., quindi un modello senza un adeguato supporto funzionerà sempre peggio nel tempo.

Non si può dimenticare che più l'apprendimento automatico penetra nella vita degli utenti, maggiore è l'influenza che esercitano sull'ecosistema, e di conseguenza, maggiori sono le perdite finanziarie o i profitti che i protagonisti del mercato possono ottenere. Pertanto, in molte aree, gli attori si adattano all'utilizzo degli algoritmi di ML (classici esempi includono la pubblicità, la ricerca e il già citato antispam).

Inoltre, le sfide dell'apprendimento automatico hanno una peculiarità: qualsiasi, anche insignificante, cambiamento nel sistema può generare molto lavoro con il modello: gestione dei dati, riaddestramento, deployment, il che può richiedere settimane o mesi. Pertanto, più rapidamente cambia l'ambiente in cui operano i tuoi modelli, maggiore sarà lo sforzo necessario per il loro supporto. Un team può creare numerosi sistemi e gioire per questo, per poi spendere quasi tutte le risorse nel loro supporto, senza possibilità di innovare. Ci siamo trovati in una situazione simile nel nostro team antispam e abbiamo tratto una conclusione ovvia: è necessario automatizzare il supporto.

Automazione

Cosa si può automatizzare? In realtà, quasi tutto. Ho identificato quattro aree che definiscono l'infrastruttura dell'apprendimento automatico:

  • raccolta dati;
  • riaddestramento;
  • deployment;
  • test e monitoraggio.

Se l'ambiente è instabile e cambia costantemente, l'intera infrastruttura attorno al modello diventa molto più importante del modello stesso. Potrebbe essere un classico classificatore lineare, ma se i segnali vengono forniti correttamente e si stabilisce un buon feedback dagli utenti, funzionerà molto meglio rispetto ai modelli all'avanguardia con tutte le complicazioni.

Ciclo di feedback

Questo ciclo unisce raccolta dati, riaddestramento e deployment — in sostanza, l'intero ciclo di aggiornamento del modello. Perché è importante? Guardiamo il grafico delle registrazioni nella posta:

Utilizzo del machine learning in Mail.ru

Un sviluppatore di apprendimento automatico ha implementato un modello anti-bot che impedisce ai bot di registrarsi nella posta. Il grafico scende a un valore in cui rimangono solo utenti reali. Perfetto! Ma dopo quattro ore, i bot scrittori affilano i loro script e tutto torna come prima. In questa implementazione, lo sviluppatore ha impiegato un mese per aggiungere segnali e riaddestrare il modello, ma lo spammer è riuscito ad adattarsi in quattro ore.

Per evitare che sia così doloroso e non dover poi rifare tutto, è necessario pensare inizialmente a come si presenterà il ciclo di feedback e cosa faremo se l'ambiente cambierà. Iniziamo con la raccolta dei dati: è il carburante per i nostri algoritmi.

Raccolta dati

È chiaro che per le moderne reti neurali, più dati si hanno, meglio è, e questi, in sostanza, sono generati dagli utenti del prodotto. Gli utenti possono aiutarci etichettando i dati, ma non bisogna abusare di questo, perché a un certo punto agli utenti potrebbe venire a noia di perfezionare i tuoi modelli e potrebbero passare a un altro prodotto.

Uno degli errori più comuni (qui faccio riferimento ad Andrew Ng) è avere una troppo forte orientamento alle metriche sul dataset di test, anziché al feedback dell'utente, che è realmente la principale misura della qualità del lavoro, poiché stiamo creando un prodotto per l'utente. Se il funzionamento del modello non è chiaro o non piace all'utente, allora è tutto inutile.

Pertanto, l'utente deve sempre avere la possibilità di esprimere un voto; dobbiamo dargli uno strumento per il feedback. Se riteniamo che in una casella sia arrivata una mail relativa alle finanze, dovrà essere contrassegnata come "finanze" e disegnata una pulsante che l'utente può premere per dire che non si tratta di finanze.

Qualità del feedback

Parliamo della qualità del feedback degli utenti. In primo luogo, tu e l'utente potete attribuire significati diversi allo stesso concetto. Ad esempio, tu e i product manager pensate che “finanze” si riferisca a mail dalla banca, mentre l'utente pensa che una mail della nonna sulla pensione rientri anche nelle finanze. In secondo luogo, ci sono utenti che premono impulsivamente i pulsanti senza alcuna logica. In terzo luogo, l'utente può essere profondamente fuorviato nelle proprie conclusioni. Un chiaro esempio dalla nostra pratica è l'implementazione del classificatore spammatico nigeriano, molto divertente tipo di spam, dove si offre all'utente la possibilità di riscattare milioni di dollari da un parente lontano appena scoperto in Africa. Dopo l'implementazione di questo classificatore, abbiamo controllato i clic su "Non spam" per queste email, e si è scoperto che l'80% di esse era succulento spam nigeriano, il che suggerisce che gli utenti possono essere estremamente fiduciosi.

E non dimentichiamo che sui bottoni possono cliccare non solo le persone, ma anche vari bot che si spacciano per un browser. Quindi il feedback grezzo non è adatto per l'apprendimento. Cosa si può fare con queste informazioni?

Applichiamo due approcci:

  • Feedback da ML correlato. Ad esempio, abbiamo un sistema anti-bot online che, come ho già accennato, prende decisioni rapide basate su un numero limitato di caratteristiche. E c'è un secondo sistema, più lento, che opera successivamente. Ha più dati sull'utente, sul suo comportamento, ecc. Di conseguenza, si prende una decisione più ponderata, quindi ha maggiore accuratezza e completezza. Si può utilizzare la differenza di funzionamento di questi sistemi come dati per l'apprendimento del primo. In questo modo, il sistema più semplice cercherà sempre di avvicinarsi alle prestazioni di quello più complesso.
  • Classificazione dei clic. Si può semplicemente classificare ogni clic dell'utente, valutando la sua validità e possibilità di utilizzo. Fai così nell'anti-spam della posta, utilizzando le caratteristiche dell'utente, la sua storia, le caratteristiche del mittente, il testo stesso e il risultato del lavoro dei classificatori. Alla fine otteniamo un sistema automatico che convalida il feedback dell'utente. E poiché deve essere riaddestrato molto meno frequentemente, il suo lavoro può diventare la base per tutti gli altri sistemi. La priorità principale in questo modello è la precisione, perché addestrare un modello su dati imprecisi comporta conseguenze.

Mentre puliamo i dati e riaddestriamo i nostri sistemi ML, non dobbiamo dimenticare gli utenti, perché per noi migliaia, milioni di errori nel grafico sono statistiche, mentre per l'utente ogni bug è una tragedia. Oltre al fatto che l'utente deve convivere con il tuo errore nel prodotto, si aspetta che dopo il feedback, situazioni simili vengano escluse in futuro. Pertanto, è sempre importante dare agli utenti non solo la possibilità 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à di filtrare tali email in base al mittente e all'oggetto per quell'utente.

Inoltre, è necessario basarsi su rapporti o richieste di supporto per aggiungere nella modalità semi-automatica o manuale delle soluzioni temporanee in modo che anche gli altri utenti non soffrano di problemi simili.

Euristiche per l'apprendimento

Con queste euristiche e soluzioni ci sono due problemi. Il primo è che il numero sempre crescente di soluzioni temporanee è difficile da mantenere, per non parlare della loro qualità e funzionalità a lungo termine. Il secondo problema è che l'errore potrebbe non essere frequente e pochi clic non saranno sufficienti per riaddestrare il modello. Potrebbe sembrare che questi due effetti non correlati possano essere significativamente mitigati applicando il seguente approccio.

  1. Creiamo una soluzione temporanea.
  2. Inviamo i dati ad essa nel modello, che viene regolarmente riaddestrato, incluso sui dati ricevuti. Qui, ovviamente, è importante che l'euristica abbia alta precisione, per non abbassare la qualità dei dati nel set di addestramento.
  3. Poi, attacchiamo un monitoraggio alle attivazioni della soluzione temporanea, e se dopo un certo periodo la soluzione non viene più attivata e viene completamente coperta dal modello, allora può essere rimossa senza problemi. Ora questo problema difficilmente si ripeterà.

Quindi, un esercito di soluzioni temporanee è davvero utile. L'importante è che il loro servizio sia urgente e non costante.

Riaddestramento

Il riaddestramento è il processo di aggiunta di nuovi dati ottenuti dal feedback degli utenti o di altri sistemi, e di addestramento del modello esistente su di essi. Possono esserci vari problemi con il riaddestramento:

  1. Il modello potrebbe semplicemente non supportare il riaddestramento e quindi apprendere solo da zero.
  2. Nessuna parte del libro della natura afferma che il riaddestramento migliorerà necessariamente la qualità del lavoro in produzione. Spesso accade proprio il contrario, quindi è possibile unicamente un peggioramento.
  3. Le modifiche possono essere imprevedibili. È un aspetto abbastanza delicato che abbiamo identificato. Anche se un nuovo modello in un test A/B mostra risultati simili rispetto all'attuale, ciò non significa affatto che funzionerà in modo identico. Il loro funzionamento potrebbe differire di qualche percento, il che potrebbe portare a nuovi errori o riproporre quelli vecchi già risolti. Con gli errori attuali sia noi sia gli utenti siamo già abituati a convivere e, quando si verificano molti nuovi errori, l'utente potrebbe non capire cosa stia succedendo, poiché si aspetta un comportamento prevedibile.

Pertanto, la cosa più importante nel riaddestramento è garantire un miglioramento del modello, o almeno non peggiorarlo.

La prima cosa che viene in mente quando parliamo di riaddestramento è l'approccio Active Learning. Cosa significa? Ad esempio, un classificatore determina se una email riguarda le finanze e attorno al suo confine di decisione aggiungiamo un campione di esempi etichettati. Questo funziona bene, per esempio, nella pubblicità, dove ci sono moltissimi feedback e possiamo addestrare il modello in tempo reale. Ma se il feedback è scarso, otteniamo un campione fortemente distorto rispetto alla distribuzione dei dati in produzione, sulla base del quale non possiamo valutare il comportamento del modello durante l'uso.

Utilizzo del machine learning in Mail.ru

In realtà, il nostro obiettivo è mantenere i vecchi schemi, già noti al modello, e acquisirne di nuovi. Qui la continuità è importante. Il modello, che abbiamo spesso messo in atto con grande difficoltà, sta già funzionando, quindi possiamo orientarci sulle sue performance.

Nelle email vengono utilizzati diversi modelli: alberi decisionali, lineari, reti neurali. Per ognuno sviluppiamo il nostro algoritmo di riaddestramento. Durante il processo di riaddestramento, non solo otteniamo nuovi dati, ma spesso anche nuove caratteristiche che prenderemo in considerazione in tutti gli algoritmi sottostanti.

Modelli lineari

Supponiamo di avere una regressione logistica. Componiamo il loss del modello dai seguenti componenti:

  • LogLoss sui nuovi dati;
  • regularizziamo i pesi delle nuove caratteristiche (non tocchiamo quelli vecchi);
  • apprendiamo anche dai dati vecchi per preservare i vecchi schemi;
  • e, probabilmente, la cosa più importante: applichiamo la Harmonic Regularization, che garantisce una variazione non eccessiva dei pesi rispetto al vecchio modello per norma.

Poiché ogni componente Loss ha coefficienti, possiamo selezionare i valori ottimali per il nostro compito in base alla cross-validation o alle esigenze di prodotto.

Utilizzo del machine learning in Mail.ru

Alberi decisionali

Passiamo agli alberi decisionali. Abbiamo sviluppato il seguente algoritmo di riaddestramento per gli alberi:

  1. In produzione, abbiamo una foresta di 100–300 alberi, addestrata sul vecchio dataset.
  2. Alla fine, rimuoviamo M = 5 alberi e aggiungiamo 2M = 10 nuovi, addestrati su tutto il dataset, ma con alto peso sui nuovi dati, il che garantisce naturalmente una modifica incrementale del modello.

È ovvio che nel tempo il numero di alberi aumenta notevolmente e devono essere periodicamente ridotti per rientrare nei tempi. A tal fine, utilizziamo l'onnipresente Knowledge Distillation (KD). Brevemente sul suo funzionamento.

  1. Abbiamo attualmente un modello "complesso". Lo eseguiamo sul dataset di addestramento e otteniamo la distribuzione delle probabilità delle classi in uscita.
  2. Successivamente, addestriamo un modello studente (un modello con un numero inferiore di alberi in questo caso) a ripetere i risultati del modello, utilizzando la distribuzione delle classi come variabile target.
  3. È importante notare che non utilizziamo alcuna etichettatura del dataset, quindi possiamo usare dati arbitrari. Naturalmente, utilizziamo un campione di dati dal flusso operativo come set di addestramento per il modello studente. In questo modo, il set di addestramento ci consente di garantire l'accuratezza del modello, mentre il campione di flusso assicura performance simili sulla distribuzione di produzione, compensando lo squilibrio del campione di addestramento.

Utilizzo del machine learning in Mail.ru

La combinazione di queste due tecniche (aggiunta di alberi e riduzione periodica della loro quantità tramite Knowledge Distillation) garantisce l'introduzione di nuovi schemi e la piena continuità.

Con KD facciamo anche distinzioni nelle operazioni con le caratteristiche dei modelli, ad esempio, rimuovendo caratteristiche e gestendo i valori mancanti. Nel nostro caso, abbiamo una serie di importanti caratteristiche statistiche (sugli mittenti, hash testuali, URL, ecc.) che sono memorizzate in un database con la proprietà di fallire. Ovviamente, il modello non è pronto per un simile sviluppo, poiché nel set di addestramento non ci sono situazioni di fallimento. In tali casi utilizziamo tecniche di KD e di augumentazione: durante l'addestramento per una parte dei dati rimuoviamo o azzeriamo le caratteristiche necessarie, mentre le etichette (uscite del modello attuale) rimangono invariate, e il modello studente apprende a ripetere questa distribuzione.

Utilizzo del machine learning in Mail.ru

Abbiamo notato che maggiore è la manipolazione dei modelli, maggiore è la percentuale di campionamento richiesta.

Per la rimozione delle caratteristiche, l'operazione più semplice, è necessario solo un piccolo campione, poiché vengono modificati solo un paio di attributi e il modello attuale è stato addestrato sullo stesso set — la differenza è minima. Per semplificare il modello (riducendo il numero di alberi di diversi fattori) è già necessario un 50 su 50. E per i valori mancanti di importanti caratteristiche statistiche, che influiscono significativamente sulle prestazioni del modello, è richiesto un campione ancora maggiore per allineare le prestazioni del nuovo modello resistente ai valori mancanti per tutti i tipi di messaggi.

Utilizzo del machine learning in Mail.ru

FastText

Passiamo a FastText. Ricordo che la rappresentazione (Embedding) di una parola è la somma dell'embedding stesso della parola e di tutti i suoi n-grammi letterali, in genere trigrammi. Poiché ci possono essere molti trigrammi, si utilizza il Bucket Hashing, ovvero la trasformazione dell'intero spazio in una sorta di mappa hash fissa. Di conseguenza, la matrice dei pesi ha dimensioni pari a quelle dello strato interno moltiplicate per il numero di parole più i bucket.

Durante l'ulteriore addestramento emergono nuove caratteristiche: parole e trigrammi. Nel normale fine-tuning di Facebook non accade nulla di significativo. Solo i pesi vecchi vengono rimodellati con una cross-entropy sui nuovi dati. Pertanto, le nuove caratteristiche non vengono utilizzate, questo approccio presenta évidemment tutti i difetti suddetti legati all'imprevedibilità del modello in produzione. Perciò abbiamo apportato alcune modifiche a FastText. Aggiungiamo tutti i nuovi pesi (parole e trigrammi), addestriamo nuovamente l'intera matrice con cross-entropy e introduciamo una regolarizzazione armonica in analogia con il modello lineare, che garantisce una modifica non significativa dei pesi precedenti.

Utilizzo del machine learning in Mail.ru

CNN

Con le reti convoluzionali è un po' più complesso. Se nei CNN si addestrano gli ultimi strati, ovviamente si può applicare una regolarizzazione armonica e garantire la continuità. Tuttavia, se è necessario riaddestrare l'intera rete, tale regolarizzazione non può essere applicata a tutti gli strati. Tuttavia, esiste un'opzione con l'addestramento di embedding complementari attraverso il Triplet Loss (articolo originale).

Triplet Loss

Prendiamo come esempio il problema dell'anti-phishing e analizziamo brevemente il Triplet Loss. Prendiamo il nostro logo e anche esempi positivi e negativi di loghi di altre aziende. Minimiamo la distanza tra i primi e massimizziamo la distanza tra i secondi, facendo ciò con un piccolo margine per garantire una maggiore compattezza delle classi.

Utilizzo del machine learning in Mail.ru

Se riaddestriamo la rete, cambia completamente lo spazio metrico, che diventa completamente incompatibile con il precedente. Questo rappresenta un problema serio in compiti che utilizzano vettori. Per aggirare questo problema, incorporiamo durante l'addestramento i vecchi embedding.

Abbiamo aggiunto nuovi dati nel set di addestramento e stiamo addestrando da zero la seconda versione del modello. Nel secondo passo riaddestriamo la nostra rete (Finetuning): iniziamo a riaddestrare l'ultimo strato e poi sbloccamos tutti gli strati. Durante la creazione dei triplette, solo una parte degli embedding viene calcolata tramite il modello in fase di addestramento, gli altri tramite il vecchio. In questo modo, nel processo di riaddestramento garantiamo la compatibilità degli spazi metrico v1 e v2. Una sorta di regolarizzazione armonica.

Utilizzo del machine learning in Mail.ru

Architettura completa

Se consideriamo l'intero sistema dell'anti-spam, i modelli non sono isolati, ma sono annidati l'uno nell'altro. Prendiamo immagini, testo e altre caratteristiche; tramite CNN e Fast Text otteniamo embedding. Poi, sopra gli embedding, vengono applicati classificatori che producono punteggi per diverse classi (tipi di messaggi, spam, presenza di logo). I punteggi e le caratteristiche vengono poi inviati in una foresta di alberi per prendere la decisione finale. Classificatori separati in questo schema consentono di interpretare meglio i risultati del sistema e di affinare i componenti in caso di problemi, piuttosto che fornire tutti i dati grezzi agli alberi decisionali.

Utilizzo del machine learning in Mail.ru

Alla fine, garantiamo continuità a ogni livello. Al livello più basso, in CNN e Fast Text, utilizziamo la regolarizzazione armonica, per i classificatori a livello intermedio — anch'essa regolarizzazione armonica e calibrazione dei punteggi per la compatibilità della distribuzione delle probabilità. Il boosting degli alberi viene addestrato in modo incrementale o tramite Knowledge Distillation.

In generale, il supporto di un sistema di machine learning così complesso crea normalmente delle complicazioni, poiché ogni componente a livello inferiore determina l'aggiornamento dell'intero sistema sopra. Tuttavia, poiché nel nostro setup ogni componente cambia solo marginalmente e risulta compatibile con quello precedente, l'intero sistema può essere aggiornato a pezzi senza necessità di riaddestrare l'intera struttura, cosa che consente di mantenerlo senza un sovraccarico significativo.

Deploy

Abbiamo esaminato la raccolta di dati e il riaddestramento di diversi tipi di modelli, quindi passiamo al loro deployment nell'ambiente di produzione.

A/B testing

Come ho detto in precedenza, durante la raccolta dei dati otteniamo generalmente un campione distorto, il che rende impossibile valutare le prestazioni della modello in produzione. Pertanto, durante il rilascio, è imperativo confrontare il modello con la versione precedente per capire come realmente vanno le cose, ovvero effettuare A/B test. Il processo di rollout e analisi dei grafici è piuttosto routinario e facilmente automatizzabile. Rilasciamo i nostri modelli gradualmente al 5%, al 30%, al 50% e al 100% degli utenti, raccogliendo tutte le metriche disponibili relative alle risposte del modello e ai feedback degli utenti. In caso di anomalie significative, rollback automatico del modello; per gli altri casi, dopo aver ottenuto un numero sufficiente di clic dagli utenti, decidiamo di aumentare la percentuale. Alla fine, portiamo il nuovo modello fino al 50% degli utenti in modo completamente automatico, mentre l'approvazione per il rilascio a tutta l'audience è gestita da un essere umano, anche se questo passaggio può essere automatizzato.

Tuttavia, il processo di A/B testing offre ampie possibilità di ottimizzazione. Il problema è che ogni A/B test richiede molto tempo (nel nostro caso da 6 a 24 ore, a seconda della quantità di feedback), il che lo rende piuttosto costoso e con risorse limitate. Inoltre, è necessario avere una percentuale sufficientemente alta di flusso per il test, per accelerare il tempo totale dell'A/B test (ottenere un campione statisticamente significativo per valutare le metriche su una piccola percentuale richiede molto tempo), il che rende il numero di slot A/B estremamente limitato. È ovvio che dobbiamo portare in test solo i modelli più promettenti, dei quali, durante il riaddestramento, otteniamo un numero considerevole.

Per affrontare questa problematica, abbiamo addestrato un classificatore specifico per prevedere il successo di un A/B test. A tale scopo, utilizziamo statistiche sulle decisioni, Precision, Recall e altre metriche su un insieme di addestramento, su campioni tenuti da parte e sul flusso. Comparamo anche il modello con quello attualmente in produzione e consideriamo la complessità (Complexity) del modello. Utilizzando tutte queste caratteristiche, il classificatore addestrato sulla storia dei test valuta i modelli candidati, nel nostro caso foreste di alberi, e decide quale di essi inviare all'A/B test.

Utilizzo del machine learning in Mail.ru

All'implementazione, questo approccio ha permesso di aumentare di parecchio il numero di A/B test di successo.

Testing & monitoring

Il testing e il monitoraggio, sorprendentemente, non danneggiano la nostra salute; al contrario, migliorano e alleviano lo stress. Il testing aiuta a prevenire guasti, mentre il monitoraggio consente di identificarli tempestivamente, riducendo l'impatto sugli utenti.

È importante comprendere che prima o poi il vostro sistema commetterà sempre errori; questo è 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 la fase principale di innovazione non termina. Ma col passare del tempo, l'entropia si impone e si presentano nuovamente errori, a causa della degradazione dei componenti circostanti e del cambiamento dei dati, come ho accennato in precedenza.

Vorrei sottolineare che qualsiasi sistema di apprendimento automatico deve essere considerato dal punto di vista del suo profitto nel corso dell'intero ciclo di vita. Di seguito, nel grafico, è mostrato un esempio del funzionamento di un sistema di rilevamento di un raro tipo di spam (la linea nel grafico è attorno allo zero). Una volta, a causa di una caratteristica cache errata, ha fatto un vero e proprio crollo. Purtroppo, non c'era monitoraggio per attivazioni anomale e, di conseguenza, il sistema ha cominciato a salvare un gran numero di e-mail nella cartella "spam" al limite della decisione. Nonostante le correzioni, il sistema ha già sbagliato troppe volte e non ripagherà nemmeno in cinque anni. Questo è un fallimento totale dal punto di vista del ciclo di vita del modello.

Utilizzo del machine learning in Mail.ru

Perciò, una cosa così semplice come il monitoraggio può diventare cruciale nella vita di un modello. Oltre alle metriche standard e ovvie, consideriamo anche la distribuzione delle risposte e dei punteggi del modello, nonché la distribuzione dei valori delle caratteristiche chiave. Con l'uso della divergenza KL possiamo confrontare la distribuzione attuale con quella storica o i valori di un test A/B con il resto del flusso, il che ci permette di notare anomalie nel modello e di annullare tempestivamente le modifiche.

Nella maggior parte dei casi avviamo le nostre prime versioni dei sistemi utilizzando semplici euristiche o modelli che in futuro utilizziamo per il monitoraggio. Ad esempio, monitoriamo il modello NER rispetto alle espressioni regolari per determinati negozi online, e se la copertura del classificatore diminuisce rispetto a queste, ci occupiamo delle cause. Un altro utile impiego delle euristiche!

Risultati

Rivediamo ancora una volta i punti chiave dell'articolo.

  • FibDex. Pensiamo sempre all'utente: come vivrà con i nostri errori, come potrà segnalarli. Non dimentichiamo che gli utenti non sono una fonte di feedback pulito per l'apprendimento dei modelli, e questo deve essere ripulito tramite sistemi ML ausiliari. Se non è possibile raccogliere segnali dagli utenti, cerchiamo fonti alternative di feedback, ad esempio sistemi correlati.
  • Riaddestramento. Qui l'aspetto principale è la continuità, quindi ci basiamo sul modello attuale in produzione. Addestriamo nuovi modelli in modo che non si discostino troppo dal precedente grazie a regolarizzazione armonica e trucchi simili.
  • Deploy. Il deployment automatico in base alle metriche riduce notevolmente il tempo di implementazione dei modelli. Il monitoraggio delle statistiche e della distribuzione delle decisioni, e il numero di falsi da parte degli utenti sono essenziali per il vostro sonno tranquillo e i fine settimana produttivi.

Spero che quanto letto vi aiuti a migliorare più rapidamente i vostri sistemi ML, accelerando la loro immissione sul mercato e rendendoli più affidabili, riducendo il carico di stress lavorativo.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster