Funzionamento dell'apprendimento automatico in Mail.ru Mail

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Basato sui miei discorsi a Highload++ e DataFest Minsk 2019.

Per molti oggi la posta è parte integrante della vita online. Con il suo aiuto, conduciamo corrispondenza commerciale, memorizziamo tutti i tipi di informazioni importanti relative alle finanze, alle prenotazioni alberghiere, agli ordini e molto altro. A metà del 2018 abbiamo formulato una strategia di prodotto per lo sviluppo della posta. Come dovrebbe essere la posta moderna?

La posta deve essere inteligente, ovvero aiutare gli utenti a orientarsi nel crescente volume di informazioni: filtrarle, strutturarle e fornirle nel modo più conveniente. Lei deve essere utile, permettendoti di risolvere varie attività direttamente nella tua casella di posta, ad esempio pagare le multe (una funzione che, purtroppo, utilizzo). E allo stesso tempo, ovviamente, la posta deve fornire protezione delle informazioni, eliminare lo spam e proteggere dagli hacker, ovvero essere sicuro.

Queste aree definiscono una serie di problemi chiave, molti dei quali possono essere risolti efficacemente utilizzando l’apprendimento automatico. Ecco alcuni esempi di funzionalità già esistenti sviluppate come parte della strategia, una per ciascuna direzione.

  • Risposta intelligente. Mail ha una funzione di risposta intelligente. La rete neurale analizza il testo della lettera, ne comprende il significato e lo scopo e di conseguenza offre le tre opzioni di risposta più appropriate: positiva, negativa e neutra. Ciò aiuta a risparmiare notevolmente tempo quando si risponde alle lettere e spesso risponde anche in modo non standard e divertente.
  • Raggruppamento delle emailrelativi agli ordini nei negozi online. Spesso facciamo acquisti online e, di norma, i negozi possono inviare più e-mail per ciascun ordine. Ad esempio, da AliExpress, il servizio più grande, arrivano molte lettere per un ordine e abbiamo calcolato che nel caso terminale il loro numero potrebbe arrivare fino a 29. Pertanto, utilizzando il modello Named Entity Recognition, estraiamo il numero dell'ordine e altre informazioni dal testo e raggruppare tutte le lettere in un unico thread. Mostriamo anche le informazioni di base sull'ordine in una casella separata, il che rende più semplice lavorare con questo tipo di email.

    Funzionamento dell'apprendimento automatico in Mail.ru Mail

  • Anti Phishing. Il phishing è una forma di posta elettronica fraudolenta particolarmente pericolosa, con l’aiuto della quale gli aggressori cercano di ottenere informazioni finanziarie (comprese le carte bancarie dell’utente) e login. Tali lettere imitano quelle reali inviate dal servizio, anche visivamente. Pertanto, con l'aiuto della visione artificiale, riconosciamo i loghi e lo stile di design delle lettere di grandi aziende (ad esempio Mail.ru, Sber, Alfa) e ne teniamo conto insieme al testo e ad altre caratteristiche nei nostri classificatori di spam e phishing .

Apprendimento automatico

Qualcosa sull'apprendimento automatico nella posta elettronica in generale. La posta è un sistema ad alto carico: una media di 1,5 miliardi di lettere al giorno passano attraverso i nostri server per 30 milioni di utenti DAU. Circa 30 sistemi di machine learning supportano tutte le funzioni e le caratteristiche necessarie.

Ogni lettera passa attraverso un'intera pipeline di classificazione. Per prima cosa eliminiamo lo spam e lasciamo email valide. Spesso gli utenti non si accorgono dell'operato dell'antispam, perché il 95-99% dello spam non finisce nemmeno nella cartella apposita. Il riconoscimento dello spam è una parte molto importante del nostro sistema, e la più difficile, poiché nel campo dell'anti-spam c'è un costante adattamento tra i sistemi di difesa e di attacco, il che rappresenta una continua sfida ingegneristica per il nostro team.

Successivamente, separiamo le lettere da persone e robot. Le email delle persone sono le più importanti, quindi forniamo loro funzionalità come la risposta intelligente. Le lettere dei robot sono divise in due parti: transazionali: si tratta di lettere importanti di servizi, ad esempio conferme di acquisti o prenotazioni alberghiere, finanziarie e informative: pubblicità aziendale, sconti.

Riteniamo che le e-mail transazionali abbiano la stessa importanza della corrispondenza personale. Dovrebbero essere a portata di mano, perché spesso abbiamo bisogno di trovare rapidamente informazioni su un ordine o sulla prenotazione di un biglietto aereo e passiamo il tempo a cercare queste lettere. Quindi, per comodità, li dividiamo automaticamente in sei categorie principali: viaggi, ordini, finanza, biglietti, registrazioni e, infine, multe.

Il gruppo più numeroso e probabilmente meno importante è rappresentato dalle lettere informative che non richiedono una risposta immediata, poiché se non legge tale lettera non cambierà nulla di significativo nella vita dell’utente. Nella nostra nuova interfaccia, li comprimiamo in due thread: social network e newsletter, cancellando così visivamente la casella di posta e lasciando visibili solo i messaggi importanti.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Sfruttamento

Un gran numero di sistemi causa molte difficoltà di funzionamento. Dopotutto, i modelli si deteriorano nel tempo, come qualsiasi software: le funzionalità si interrompono, le macchine si guastano, il codice diventa storto. Inoltre, i dati cambiano costantemente: ne vengono aggiunti di nuovi, i modelli di comportamento degli utenti vengono trasformati, ecc., quindi un modello senza un supporto adeguato funzionerà sempre peggio nel tempo.

Non dobbiamo dimenticare che più il machine learning penetra in profondità nella vita degli utenti, maggiore è l’impatto che ha sull’ecosistema e, di conseguenza, maggiori sono le perdite finanziarie o i profitti che gli operatori del mercato possono ricevere. Pertanto, in un numero crescente di settori, gli operatori si stanno adattando al lavoro degli algoritmi ML (esempi classici sono la pubblicità, la ricerca e il già citato antispam).

Inoltre, le attività di machine learning hanno una peculiarità: qualsiasi modifica, anche minima, nel sistema può generare molto lavoro con il modello: lavoro con i dati, riqualificazione, implementazione, che può richiedere settimane o mesi. Pertanto, più velocemente cambia l'ambiente in cui operano i modelli, maggiore sarà lo sforzo richiesto per mantenerli. Un team può creare molti sistemi ed esserne felice, ma poi spendere quasi tutte le sue risorse per mantenerli, senza avere l'opportunità di fare nulla di nuovo. Una volta abbiamo riscontrato una situazione del genere nel team antispam. E sono giunti all’ovvia conclusione che il supporto deve essere automatizzato.

Automazione

Cosa può essere automatizzato? Quasi tutto, in realtà. Ho identificato quattro aree che definiscono l'infrastruttura di machine learning:

  • raccolta dati;
  • Addestramento supplementare;
  • distribuire;
  • test e monitoraggio.

Se l'ambiente è instabile e in costante cambiamento, l'intera infrastruttura attorno al modello risulta essere molto più importante del modello stesso. Potrebbe essere un buon vecchio classificatore lineare, ma se gli dai le giuste funzionalità e ottieni un buon feedback dagli utenti, funzionerà molto meglio dei modelli all'avanguardia con tutti i fronzoli.

Ciclo di feedback

Questo ciclo combina la raccolta dei dati, la formazione aggiuntiva e l'implementazione: di fatto, l'intero ciclo di aggiornamento del modello. Perché è importante? Guarda il programma di registrazione nella posta:

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Uno sviluppatore di machine learning ha implementato un modello anti-bot che impedisce ai bot di registrarsi nelle e-mail. Il grafico scende a un valore in cui rimangono solo gli utenti reali. È tutto bellissimo! Ma passano quattro ore, i robot modificano i loro script e tutto torna alla normalità. In questa implementazione, lo sviluppatore ha impiegato un mese ad aggiungere funzionalità e riqualificare il modello, ma lo spammer è riuscito ad adattarsi in quattro ore.

Per non essere così terribilmente doloroso e non dover rifare tutto in seguito, dobbiamo inizialmente pensare a come apparirà il ciclo di feedback e cosa faremo se l'ambiente cambia. Cominciamo con la raccolta dei dati: questo è il carburante per i nostri algoritmi.

Raccolta dati

È chiaro che per le moderne reti neurali, più dati sono, meglio è, e questi sono, infatti, generati dagli utenti del prodotto. Gli utenti possono aiutarci contrassegnando i dati, ma non possiamo abusarne, perché ad un certo punto gli utenti si stancheranno di completare i tuoi modelli e passeranno ad un altro prodotto.

Uno degli errori più comuni (qui faccio riferimento ad Andrew Ng) è concentrarsi troppo sulle metriche del dataset di test e non sul feedback dell'utente, che in realtà è la misura principale della qualità del lavoro, dal momento che creiamo un prodotto per l'utente. Se l'utente non capisce o non gli piace il lavoro del modello, tutto è rovinato.

Pertanto, l'utente dovrebbe sempre avere la possibilità di votare e dovrebbe avere a disposizione uno strumento per il feedback. Se pensiamo che nella casella di posta è arrivata una lettera relativa alla finanza, dobbiamo contrassegnarla come "finanza" e disegnare un pulsante su cui l'utente può cliccare e dire che non si tratta di finanza.

Qualità del feedback

Parliamo della qualità del feedback degli utenti. In primo luogo, tu e l'utente potete inserire significati diversi in un unico concetto. Ad esempio, tu e i tuoi product manager pensate che "finanza" significhi lettere dalla banca, e l'utente pensa che anche una lettera della nonna sulla sua pensione si riferisca alla finanza. In secondo luogo, ci sono utenti che amano premere i pulsanti senza alcuna logica. In terzo luogo, l'utente potrebbe sbagliarsi profondamente nelle sue conclusioni. Un esempio lampante della nostra pratica è l'implementazione di un classificatore Spam nigeriano, un tipo di spam molto divertente in cui all'utente viene chiesto di prendere diversi milioni di dollari da un lontano parente trovato improvvisamente in Africa. Dopo aver implementato questo classificatore, abbiamo controllato i clic "Non spam" su queste e-mail e abbiamo scoperto che l'80% di essi erano succosi spam nigeriani, il che suggerisce che gli utenti possono essere estremamente creduloni.

E non dimentichiamo che i pulsanti possono essere cliccati non solo dalle persone, ma anche da tutti i tipi di bot che fingono di essere un browser. Quindi il feedback grezzo non è utile per l’apprendimento. Cosa puoi fare con queste informazioni?

Utilizziamo due approcci:

  • Feedback dal ML collegato. Ad esempio, abbiamo un sistema anti-bot online che, come ho già detto, prende una decisione rapida sulla base di un numero limitato di segnali. E c'è un secondo sistema lento che funziona a posteriori. Contiene più dati sull'utente, sul suo comportamento, ecc. Di conseguenza, viene presa la decisione più informata e, di conseguenza, ha una maggiore precisione e completezza. È possibile indirizzare la differenza nel funzionamento di questi sistemi al primo come dati di addestramento. Pertanto, un sistema più semplice cercherà sempre di avvicinarsi alle prestazioni di uno più complesso.
  • Fare clic sulla classificazione. Puoi semplicemente classificare ogni clic dell'utente, valutarne la validità e l'usabilità. Lo facciamo nella posta antispam, utilizzando gli attributi dell'utente, la sua cronologia, gli attributi del mittente, il testo stesso e il risultato dei classificatori. Di conseguenza, otteniamo un sistema automatico che convalida il feedback degli utenti. E poiché necessita di essere riqualificato 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 il modello su dati imprecisi è carico di conseguenze.

Mentre ripuliamo i dati e addestriamo ulteriormente i nostri sistemi ML, non dobbiamo dimenticarci degli utenti, perché per noi migliaia, milioni di errori sul grafico sono statistiche e per l'utente ogni bug è una tragedia. Oltre al fatto che l'utente deve in qualche modo convivere con il proprio errore nel prodotto, dopo aver ricevuto feedback, si aspetta che una situazione simile venga eliminata in futuro. Vale quindi sempre la pena 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, questa potrebbe essere la possibilità di filtrare tali lettere per mittente e titolo per questo utente.

È inoltre necessario costruire un modello basato su alcune segnalazioni o richieste di supporto in modalità semiautomatica o manuale in modo che altri utenti non soffrano di problemi simili.

Euristiche per l'apprendimento

Ci sono due problemi con queste euristiche e queste stampelle. Il primo è che il numero sempre crescente di stampelle è difficile da mantenere, per non parlare della loro qualità e prestazione nel lungo periodo. Il secondo problema è che l’errore potrebbe non essere frequente e pochi clic per addestrare ulteriormente il modello non saranno sufficienti. Sembrerebbe che questi due effetti non correlati possano essere significativamente neutralizzati se si applica il seguente approccio.

  1. Creiamo una stampella temporanea.
  2. Inviamo i dati da esso al modello, che si aggiorna regolarmente, anche sui dati ricevuti. Qui, ovviamente, è importante che le euristiche abbiano un'elevata precisione in modo da non ridurre la qualità dei dati nel set di addestramento.
  3. Quindi impostiamo il monitoraggio per attivare la stampella e, se dopo un po' di tempo la stampella non funziona più ed è completamente coperta dal modello, puoi rimuoverla in tutta sicurezza. Ora è improbabile che questo problema si ripeta.

Quindi un esercito di stampelle è molto utile. La cosa principale è che il loro servizio è urgente e non permanente.

Addestramento supplementare

Il riaddestramento è il processo di aggiunta di nuovi dati ottenuti come risultato del feedback degli utenti o di altri sistemi e di addestramento di un modello esistente su di essi. Potrebbero esserci diversi problemi con la formazione aggiuntiva:

  1. Il modello potrebbe semplicemente non supportare una formazione aggiuntiva, ma imparare solo da zero.
  2. Da nessuna parte nel libro della natura è scritto che una formazione aggiuntiva migliorerà sicuramente la qualità del lavoro nella produzione. Spesso accade il contrario, cioè è possibile solo il deterioramento.
  3. I cambiamenti possono essere imprevedibili. Questo è un punto piuttosto sottile che abbiamo identificato da soli. Anche se un nuovo modello in un test A/B mostra risultati simili rispetto a quello attuale, ciò non significa che funzionerà in modo identico. Il loro lavoro può differire solo dell'XNUMX%, il che può portare a nuovi errori o restituirne di vecchi che sono già stati corretti. Sia noi che gli utenti sappiamo già come convivere con gli errori attuali e quando si presentano un gran numero di nuovi errori, l'utente potrebbe anche non capire cosa sta succedendo, perché si aspetta un comportamento prevedibile.

Pertanto, la cosa più importante nella formazione aggiuntiva è garantire che il modello venga migliorato, o almeno non peggiorato.

La prima cosa che viene in mente quando parliamo di formazione aggiuntiva è l’approccio Active Learning. Cosa significa questo? Ad esempio, il classificatore determina se un'e-mail è correlata alla finanza e attorno al suo limite decisionale aggiungiamo un campione di esempi etichettati. Funziona bene, ad esempio, nella pubblicità, dove c'è molto feedback e puoi addestrare il modello online. E se il feedback è scarso, otteniamo un campione altamente distorto rispetto alla distribuzione dei dati di produzione, sulla base del quale è impossibile valutare il comportamento del modello durante il funzionamento.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Il nostro obiettivo, infatti, è preservare vecchi schemi, modelli già conosciuti, e acquisirne di nuovi. La continuità è importante qui. Il modello, che spesso abbiamo impiegato molta fatica a implementare, è già funzionante, quindi possiamo concentrarci sulle sue prestazioni.

Nella posta vengono utilizzati diversi modelli: alberi, reti lineari e neurali. Per ognuno creiamo il nostro algoritmo di allenamento aggiuntivo. Nel processo di formazione aggiuntiva, riceviamo non solo nuovi dati, ma spesso anche nuove funzionalità, di cui terremo conto in tutti gli algoritmi seguenti.

Modelli lineari

Diciamo che abbiamo una regressione logistica. Creiamo un modello di perdita dai seguenti componenti:

  • LogLoss su nuovi dati;
  • regolarizziamo i pesi delle nuove funzionalità (non tocchiamo quelle vecchie);
  • impariamo anche dai vecchi dati per preservare i vecchi modelli;
  • e, forse, la cosa più importante: aggiungiamo la regolarizzazione armonica, che garantisce che i pesi non cambieranno molto rispetto al vecchio modello secondo la norma.

Poiché ogni componente di perdita ha coefficienti, possiamo selezionare i valori ottimali per il nostro compito attraverso la convalida incrociata o in base ai requisiti del prodotto.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Деревья

Passiamo agli alberi decisionali. Abbiamo compilato il seguente algoritmo per l'addestramento aggiuntivo degli alberi:

  1. La produzione gestisce una foresta di 100-300 alberi, addestrata su un vecchio set di dati.
  2. Alla fine rimuoviamo M = 5 pezzi e ne aggiungiamo 2M = 10 nuovi, addestrati sull'intero set di dati, ma con un peso elevato per i nuovi dati, che naturalmente garantisce un cambiamento incrementale nel modello.

Ovviamente, con il passare del tempo, il numero degli alberi aumenta notevolmente, e devono essere periodicamente ridotti per rispettare le tempistiche. Per fare ciò, utilizziamo l’ormai onnipresente Knowledge Distillation (KD). Brevemente sul principio del suo funzionamento.

  1. Abbiamo l'attuale modello "complesso". Lo eseguiamo sul set di dati di addestramento e otteniamo la distribuzione di probabilità della classe in output.
  2. Successivamente, addestriamo il modello studentesco (il modello con meno alberi in questo caso) a ripetere i risultati del modello utilizzando la distribuzione delle classi come variabile target.
  3. È importante notare qui che non utilizziamo in alcun modo il markup del set di dati e quindi possiamo utilizzare dati arbitrari. Naturalmente utilizziamo un campione di dati dal flusso di combattimento come campione di addestramento per il modello studentesco. Pertanto, il training set ci consente di garantire l'accuratezza del modello, e il campione di flusso garantisce prestazioni simili sulla distribuzione della produzione, compensando la distorsione del training set.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

La combinazione di queste due tecniche (aggiunta di alberi e riduzione periodica del loro numero utilizzando la distillazione della conoscenza) garantisce l'introduzione di nuovi modelli e la completa continuità.

Con l'aiuto di KD, eseguiamo anche diverse operazioni sulle caratteristiche del modello, come la rimozione delle caratteristiche e il lavoro sugli spazi vuoti. Nel nostro caso, abbiamo una serie di importanti caratteristiche statistiche (tra cui mittenti, hash di testo, URL, ecc.) archiviate nel database, che tendono a fallire. Il modello, ovviamente, non è pronto per un simile sviluppo di eventi, poiché nel training set non si verificano situazioni di fallimento. In questi casi, combiniamo KD e tecniche di aumento: durante l'addestramento per una parte dei dati, rimuoviamo o reimpostiamo le funzionalità necessarie e prendiamo le etichette originali (output del modello corrente) e il modello studentesco impara a ripetere questa distribuzione .

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Abbiamo notato che più grave è la manipolazione del modello, maggiore è la percentuale di campione di filo richiesta.

La rimozione delle funzionalità, l'operazione più semplice, richiede solo una piccola parte del flusso, poiché cambiano solo un paio di funzionalità e il modello corrente è stato addestrato sullo stesso set: la differenza è minima. Per semplificare il modello (riducendo più volte il numero di alberi), ne sono già necessari da 50 a 50. E per omissioni di importanti caratteristiche statistiche che influenzeranno seriamente le prestazioni del modello, è necessario un flusso ancora maggiore per livellare il lavoro del modello. nuovo modello anti-omissione su tutti i tipi di lettere.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Testo veloce

Passiamo a FastText. Ti ricordo che la rappresentazione (Embedding) di una parola consiste nella somma dell'incorporamento della parola stessa e di tutte le sue lettere N-grammi, solitamente trigrammi. Poiché possono esserci molti trigrammi, viene utilizzato il Bucket Hashing, ovvero la conversione dell'intero spazio in una determinata hashmap fissa. Di conseguenza, si ottiene la matrice del peso con la dimensione dello strato interno per numero di parole + secchi.

Con l'addestramento aggiuntivo compaiono nuovi segni: parole e trigrammi. Non succede nulla di significativo nella formazione di follow-up standard di Facebook. Solo i vecchi pesi con entropia incrociata vengono riqualificati sui nuovi dati. Pertanto, non vengono utilizzate nuove funzionalità; ovviamente, questo approccio presenta tutti gli svantaggi sopra descritti associati all'imprevedibilità del modello in produzione. Ecco perché abbiamo modificato leggermente FastText. Aggiungiamo tutti i nuovi pesi (parole e trigrammi), espandiamo l'intera matrice con entropia incrociata e aggiungiamo la regolarizzazione armonica per analogia con il modello lineare, che garantisce un cambiamento insignificante nei vecchi pesi.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

CNN

Le reti convoluzionali sono un po’ più complicate. Se gli ultimi strati sono completati nella CNN, allora, ovviamente, è possibile applicare la regolarizzazione armonica e garantire la continuità. Ma se è necessaria una formazione aggiuntiva dell’intera rete, tale regolarizzazione non può più essere applicata a tutti i livelli. Tuttavia, esiste un'opzione per addestrare incorporamenti complementari tramite Triplet Loss (articolo originale).

Tripla perdita

Utilizzando un'attività anti-phishing come esempio, esaminiamo la Triplet Loss in termini generali. Prendiamo il nostro logo, nonché esempi positivi e negativi di loghi di altre società. Minimizziamo la distanza tra i primi e massimizziamo la distanza tra i secondi, lo facciamo con un piccolo gap per garantire una maggiore compattezza delle classi.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Se alleniamo ulteriormente la rete, il nostro spazio metrico cambia completamente e diventa completamente incompatibile con quello precedente. Questo è un problema serio nei problemi che utilizzano i vettori. Per aggirare questo problema, mescoleremo i vecchi incorporamenti durante l'addestramento.

Abbiamo aggiunto nuovi dati al set di training e stiamo addestrando da zero la seconda versione del modello. Nella seconda fase addestriamo ulteriormente la nostra rete (Finetuning): prima viene completato l'ultimo strato, quindi l'intera rete viene sbloccata. Nel processo di composizione delle terzine, calcoliamo solo una parte degli incorporamenti utilizzando il modello addestrato, il resto utilizzando quello vecchio. Pertanto, nel processo di formazione aggiuntiva, garantiamo la compatibilità degli spazi metrici v1 e v2. Una versione unica di regolarizzazione armonica.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Intera architettura

Se consideriamo come esempio l'intero sistema che utilizza l'antispam, i modelli non sono isolati, ma annidati l'uno nell'altro. Scattiamo foto, testo e altre funzionalità, utilizzando CNN e Fast Text otteniamo incorporamenti. Successivamente, sopra gli incorporamenti vengono applicati dei classificatori, che forniscono punteggi per varie classi (tipi di lettere, spam, presenza di un logo). I segnali e le indicazioni stanno già entrando nel bosco di alberi per prendere la decisione finale. I classificatori individuali in questo schema consentono di interpretare meglio i risultati del sistema e più specificamente di riqualificare i componenti in caso di problemi, piuttosto che inserire tutti i dati negli alberi decisionali in forma grezza.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Di conseguenza, garantiamo continuità a tutti i livelli. Al livello inferiore in CNN e Fast Text utilizziamo la regolarizzazione armonica, per i classificatori al centro utilizziamo anche la regolarizzazione armonica e la calibrazione della velocità per coerenza della distribuzione di probabilità. Bene, il potenziamento degli alberi viene addestrato in modo incrementale o utilizzando la distillazione della conoscenza.

In generale, mantenere un sistema di apprendimento automatico così annidato è solitamente una seccatura, poiché qualsiasi componente al livello inferiore porta ad un aggiornamento dell’intero sistema superiore. Ma poiché nel nostro setup ogni componente cambia leggermente ed è compatibile con il precedente, l'intero sistema può essere aggiornato pezzo per pezzo senza la necessità di riqualificare l'intera struttura, il che permette di supportarlo senza gravi spese generali.

Distribuire

Abbiamo discusso della raccolta dati e della formazione aggiuntiva di diversi tipi di modelli, quindi stiamo passando alla loro implementazione nell'ambiente di produzione.

Test A/B

Come ho detto prima, nel processo di raccolta dei dati, di solito otteniamo un campione parziale, dal quale è impossibile valutare le prestazioni di produzione del modello. Pertanto, in fase di distribuzione, il modello deve essere confrontato con la versione precedente per capire come stanno effettivamente le cose, ovvero effettuare test A/B. In effetti, il processo di implementazione e analisi dei grafici è piuttosto di routine e può essere facilmente automatizzato. Distribuiamo gradualmente i nostri modelli al 5%, 30%, 50% e 100% degli utenti, raccogliendo al contempo tutte le metriche disponibili sulle risposte del modello e sul feedback degli utenti. Nel caso di alcuni valori anomali gravi, eseguiamo automaticamente il rollback del modello e, in altri casi, dopo aver raccolto un numero sufficiente di clic degli utenti, decidiamo di aumentare la percentuale. Di conseguenza, portiamo il nuovo modello al 50% degli utenti in modo completamente automatico e l'implementazione a tutto il pubblico verrà approvata da una persona, sebbene questo passaggio possa essere automatizzato.

Tuttavia, il processo di test A/B offre spazio per l’ottimizzazione. Il fatto è che qualsiasi test A/B è piuttosto lungo (nel nostro caso ci vogliono dalle 6 alle 24 ore a seconda della quantità di feedback), il che lo rende piuttosto costoso e con risorse limitate. Inoltre, è necessaria una percentuale di flusso sufficientemente elevata per accelerare sostanzialmente il tempo complessivo del test A/B (il reclutamento di un campione statisticamente significativo per valutare le metriche con una piccola percentuale può richiedere molto tempo), il che rende il numero di slot A/B estremamente limitato. Ovviamente dobbiamo testare solo i modelli più promettenti, di cui riceviamo parecchio durante il processo di formazione aggiuntiva.

Per risolvere questo problema, abbiamo addestrato un classificatore separato che prevede il successo di un test A/B. Per fare questo prendiamo come caratteristiche le statistiche decisionali, la Precisione, il Recall e altre metriche sul training set, su quello differito e sul campione dallo stream. Confrontiamo anche il modello con quello attuale in produzione, con euristiche, e teniamo conto della Complessità del modello. Utilizzando tutte queste funzionalità, un classificatore addestrato sulla cronologia dei test valuta i modelli candidati, nel nostro caso si tratta di foreste di alberi, e decide quale utilizzare nel test A/B.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Al momento dell’implementazione, questo approccio ci ha permesso di aumentare più volte il numero di test A/B riusciti.

Test e monitoraggio

I test e i controlli, stranamente, non danneggiano la nostra salute, anzi, la migliorano e ci liberano da stress inutili. Il test consente di prevenire un errore, mentre il monitoraggio consente di rilevarlo in tempo per ridurre l'impatto sugli utenti.

È importante capire qui che prima o poi il tuo sistema commetterà sempre degli errori: ciò è dovuto al ciclo di sviluppo di qualsiasi software. All'inizio dello sviluppo del sistema ci sono sempre molti bug finché tutto non si sistema e la fase principale dell'innovazione viene completata. Ma col passare del tempo, l'entropia prende il sopravvento e gli errori ricompaiono, a causa del degrado dei componenti circostanti e dei cambiamenti nei dati, di cui ho parlato all'inizio.

Qui vorrei sottolineare che qualsiasi sistema di apprendimento automatico dovrebbe essere considerato dal punto di vista del suo profitto durante l'intero ciclo di vita. Il grafico seguente mostra un esempio di come funziona il sistema per individuare un raro tipo di spam (la linea nel grafico è vicina allo zero). Un giorno, a causa di un attributo memorizzato in modo errato nella cache, impazzì. Per fortuna non è stato effettuato alcun monitoraggio per eventuali attivazioni anomale e di conseguenza il sistema ha iniziato a salvare grandi quantità di lettere nella cartella “Spam” al confine del processo decisionale. Nonostante abbia corretto le conseguenze, il sistema ha già commesso così tanti errori che non si ripagherà nemmeno in cinque anni. E questo è un completo fallimento dal punto di vista del ciclo di vita del modello.

Funzionamento dell'apprendimento automatico in Mail.ru Mail

Pertanto, una cosa semplice come il monitoraggio può diventare fondamentale nella vita di una modella. Oltre alle metriche standard e ovvie, consideriamo la distribuzione delle risposte e dei punteggi del modello, nonché la distribuzione dei valori delle caratteristiche chiave. Utilizzando la divergenza 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 notare anomalie nel modello e ripristinare le modifiche in modo tempestivo.

Nella maggior parte dei casi, lanciamo le nostre prime versioni di sistemi utilizzando semplici euristiche o modelli che utilizzeremo come monitoraggio in futuro. Ad esempio, monitoriamo il modello NER rispetto a quelli normali per specifici negozi online e se la copertura del classificatore diminuisce rispetto ad essi, ne comprendiamo le ragioni. Un altro uso utile delle euristiche!

Risultati di

Esaminiamo nuovamente le idee chiave dell'articolo.

  • Fibdeck. Pensiamo sempre all'utente: come conviverà con i nostri errori, come potrà segnalarceli. Non dimenticare che gli utenti non sono una fonte di puro feedback per i modelli di training e devono essere chiariti con l’aiuto di sistemi ML ausiliari. Se non è possibile raccogliere un segnale dall'utente, cerchiamo fonti alternative di feedback, ad esempio sistemi connessi.
  • Addestramento supplementare. La cosa principale qui è la continuità, quindi ci basiamo sull’attuale modello di produzione. Addestriamo nuovi modelli in modo che non differiscano molto dal precedente a causa della regolarizzazione armonica e di trucchi simili.
  • Distribuire. La distribuzione automatica basata su parametri riduce notevolmente i tempi di implementazione dei modelli. Monitoraggio delle statistiche e distribuzione del processo decisionale, il numero di cadute degli utenti è obbligatorio per il tuo sonno ristoratore e il tuo fine settimana produttivo.

Bene, spero che questo ti aiuti a migliorare i tuoi sistemi ML più velocemente, a immetterli sul mercato più velocemente e a renderli più affidabili e meno stressanti.

Fonte: habr.com

Aggiungi un commento