L'elaborazione del linguaggio naturale (PNL) è una disciplina scientifica in sviluppo attivo che si occupa della ricerca di significato e istruzione sulla base di dati testuali.
Come può aiutarti questo articolo?
Nell'ultimo anno, il team di Insight ha partecipato a diverse centinaia di progetti, unendo la conoscenza e l'esperienza di aziende leader negli Stati Uniti. I risultati di questo lavoro riassunti nell'articolo, la cui traduzione è ora di fronte a voi, hanno dedotto approcci per risolvere i problemi più comuni applicati all'apprendimento automatico .
Inizieremo con il metodo più semplice che può funzionare - e gradualmente passeremo ad approcci più sottili, come l' ingegneria delle caratteristiche , i vettori di parole e la formazione approfondita.
Dopo aver letto l'articolo, saprai come:
raccogliere, preparare e ispezionare i dati;
costruire modelli semplici e, se necessario, trasferire alla formazione approfondita;
interpretare e comprendere i tuoi modelli per assicurarti di interpretare le informazioni, non il rumore.
Il post è scritto nel formato di una guida passo-passo; Può anche essere visto come una revisione di approcci standard altamente efficaci.
Al post originale è allegato un taccuino interattivo Jupyter , a dimostrazione dell'uso di tutte le tecniche citate. Ti incoraggiamo a usarlo mentre leggi l'articolo.
Usare l'apprendimento automatico per capire e usare il testo
L'elaborazione del linguaggio naturale ti consente di ricevere risultati nuovi ed entusiasmanti ed è un'area molto ampia. Tuttavia, Insight ha identificato i seguenti aspetti chiave delle applicazioni pratiche che si verificano molto più spesso di altri:
Identificazione di diverse coorti di utenti o clienti (ad esempio, previsione di deflusso del cliente, profitto totale del cliente, preferenze del prodotto)
Rilevamento e recupero accurati di varie categorie di revisioni (opinioni positive e negative, riferimenti a attributi individuali come la taglia dell'abbigliamento, ecc.)
Classificazione del testo secondo il suo significato (richiesta di aiuto di base, problema urgente).
Nonostante il gran numero di pubblicazioni scientifiche e manuali di formazione sulla PNL su Internet, oggi non c'è praticamente nessuna consulenza completa e suggerimenti su come efficacemente far fronte ai compiti della PNL, mentre considerando la soluzione di questi problemi con le basi.
Passaggio 1: raccogliere i dati
Sorgenti dati di esempio
Qualsiasi attività di apprendimento automatico inizia con i dati, che si tratti di un elenco di indirizzi e-mail, post o tweet. Le fonti comuni di informazioni testuali sono:
Recensioni sui prodotti (Amazon, Yelp e vari negozi di app).
Contenuti generati dagli utenti (tweet, post di Facebook, domande StackOverflow).
Informazioni di diagnostica (richieste utente, supporto ticket, registri chat).
DataNet "Disastri nei social media"
Per illustrare questi approcci, utilizzeremo il set di dati sui disastri dei social media, per gentile concessione di CrowdFlower .
Gli autori hanno esaminato oltre 10.000 tweet, che sono stati selezionati utilizzando varie query di ricerca come "on fire", "quarantine" e "pandemonium". Poi hanno segnato se il tweet aveva una relazione con l'evento-catastrofe (al contrario di battute usando queste parole, recensioni sui film o qualsiasi cosa non correlata ai disastri).
Dedichiamoci il compito di determinare quali dei tweet siano rilevanti per la catastrofe dell'evento, in contrasto con quei tweet che riguardano argomenti irrilevanti (ad esempio film). Perché dovremmo farlo? Una potenziale domanda sarebbe la notifica esclusiva dei funzionari sulle situazioni di emergenza che richiedono un'attenzione urgente - mentre le recensioni dell'ultimo film di Adam Sandler verrebbero ignorate. La particolare complessità di questo compito sta nel fatto che entrambe queste classi contengono gli stessi criteri di ricerca, quindi dovremo usare differenze più sottili per separarle.
Successivamente, faremo riferimento ai tweet relativi ai disastri come a una "catastrofe" e i tweet per tutto il resto come "irrilevanti" .
Tag (etichette)
I nostri dati sono taggati, quindi sappiamo a quali categorie appartengono i tweet. Come sottolinea Richard Socher, di solito è più veloce, più facile ed economico trovare e mettere a fuoco abbastanza dati su cui il modello verrà allenato, piuttosto che cercare di ottimizzare un metodo complesso di insegnamento senza un insegnante.
Passaggio 2. Cancella i tuoi dati
Regola numero uno: "Il tuo modello può diventare buono solo
come i tuoi dati sono buoni"
Una delle competenze chiave del Data Scientist professionale è sapere quale dovrebbe essere il prossimo passo: lavorare su un modello o sui dati. Come mostra la pratica, in un primo momento è meglio guardare i dati stessi, e solo dopo ripulirlo.
Un set di dati pulito consentirà al modello di apprendere i segni significativi e di non riqualificare il rumore irrilevante.
Poi viene la checklist, che è usata per ripulire i nostri dati (vedi il codice per i dettagli ).
Elimina tutti i simboli irrilevanti (ad esempio, eventuali caratteri non alfanumerici).
Testo Tokenizirovat , dividendolo in singole parole.
Elimina parole irrilevanti, ad esempio menzioni su Twitter o URL.
Trascrivi tutti i caratteri in minuscolo in modo che le parole "ciao", "ciao" e "PRIVET" siano la stessa parola.
Considera la possibilità di combinare parole scritte con errori o di avere uno spelling alternativo (ad esempio "cool" / "twist" / "kruuto"),
Considerare la possibilità di eseguire una lemmatizzazione , ovvero la riduzione delle varie forme di una parola in una forma di dizionario (ad esempio "macchina" anziché "macchina", "macchina", "macchine", ecc.).
Dopo aver esaminato questi passaggi ed eseguito un controllo per ulteriori errori, possiamo iniziare a utilizzare dati puliti e codificati per l'addestramento del modello.
Passaggio 3. Scegli una buona vista dati
I valori numerici sono utilizzati come input per il modello di apprendimento automatico. Ad esempio, i modelli che funzionano con le immagini accettano una matrice che visualizza l'intensità di ciascun pixel in ciascun canale di colore.
Una faccia sorridente rappresentata come una serie di numeri Il
nostro set di dati è una lista di frasi, quindi affinché il nostro algoritmo estragga i pattern dai dati, prima dobbiamo trovare un modo per rappresentarli in modo tale che il nostro algoritmo possa comprenderli.
Codifica One-hot
Il modo naturale di visualizzare il testo nei computer è codificare ciascun carattere singolarmente come un numero (un esempio di questo approccio è la codifica ASCII ). Se "alimentiamo" una rappresentazione così semplice al classificatore, dovrà imparare la struttura delle parole da zero, basandosi solo sui nostri dati, il che è impossibile sulla maggior parte dei dataset. Pertanto, dobbiamo utilizzare un approccio di livello superiore.
Ad esempio, possiamo costruire un dizionario di tutte le parole uniche nel nostro set di dati e associare un indice univoco con ogni parola nel dizionario. Ogni frase può quindi essere visualizzata come una lista, la cui lunghezza è uguale al numero di parole uniche nel nostro dizionario, e in ogni indice in questa lista verrà memorizzato quante volte la parola data appare nella frase. Questo modello è chiamato "Sword Bag" (Sacchetto di parole ), dal momento che è una mappa che ignora completamente l'ordine delle parole della frase. Di seguito è riportata un'illustrazione di questo approccio.
Presentazione di proposte sotto forma di "Sacco di parole". Le frasi originali sono a sinistra, la loro rappresentazione è sulla destra. Ogni indice in vettori è una parola specifica.
Visualizza rappresentazioni vettoriali
Il dizionario "Disastri nei social media" contiene circa 20.000 parole. Ciò significa che ogni proposta sarà riflessa dalla lunghezza del vettore di 20 000. Questo vettore conterrà prevalentemente zeri poiché ogni frase contiene solo un piccolo sottoinsieme del nostro dizionario.
Al fine di scoprire se la nostra rappresentazione portata vettore ( incastri ), rilevanti per il nostro compito informazioni (ad esempio, se i tweet relativi al disastro o no), è necessario cercare di visualizzare loro e per vedere quanto bene queste classi sono divise. Poiché i dizionari sono di solito molto grandi e la visualizzazione dei dati per 20.000 misurazioni non è possibile, approcci come il metodo del componente principale(PCA) ti aiuta a proiettare i dati in due dimensioni.
Visualizzazione di rappresentazioni vettoriali per un "sacco di parole"
A giudicare dalla grafica risultante, non sembra che le due classi siano divise come segue: questa può essere una caratteristica della nostra presentazione o semplicemente un effetto di riduzione dimensionale. Per scoprire se il "sacco di parole" è utile per noi, possiamo addestrare un classificatore basato su di esso.
Passaggio 4. Classificazione
Quando si accede all'attività per la prima volta, è prassi comune iniziare con il metodo o lo strumento più semplice in grado di risolvere questo problema. Quando si tratta di classificazione dei dati, il modo più comune è la regressione logistica a causa della sua universalità e facilità di interpretazione. È molto facile da addestrare e i suoi risultati possono essere interpretati, perché puoi facilmente estrarre tutti i coefficienti più importanti dal modello.
Dividiamo i nostri dati in un campione di addestramento, che utilizzeremo per addestrare il nostro modello e uno di prova, per vedere se il nostro modello è generalizzato a dati che non sono mai stati visti prima. Dopo l'allenamento, otteniamo un'accuratezza del 75,4%. Non così male! L'ipotesi della classe più frequente ("inaffidabile") ci darebbe solo il 57%.
Tuttavia, anche se il risultato con un'accuratezza del 75% sarebbe sufficiente per le nostre esigenze, non dovremmo mai utilizzare il modello in produzione senza cercare di capirlo.
Passaggio 5. Ispezione
Errore Matrix
Il primo passo è capire quali tipi di errori fanno il nostro modello e quali tipi di errori vorremmo vedere meno spesso in seguito. Nel caso del nostro esempio, i risultati falsi positivi classificano l'irrilevante tweet come una catastrofe, falso-negativo-classificano la catastrofe come un tweet irrilevante. Se la nostra priorità è di reagire a ciascun evento potenziale, allora vorremmo ridurre i nostri trigger falsi-negativi. Tuttavia, se siamo limitati nelle risorse, allora possiamo dare la priorità a una più bassa frequenza di trigger falsi-negativi per ridurre la probabilità di falso allarme. Un buon modo per visualizzare queste informazioni è usare la matrice degli errori, che mette a confronto le previsioni fatte dal nostro modello, con segni reali. Idealmente, questa matrice sarà una linea diagonale che va dalla sinistra in alto all'angolo in basso a destra (questo significa che le nostre previsioni hanno idealmente coinciso con la verità).
Il nostro classificatore crea più falsi-negativi dei risultati falsi positivi (in proporzione). In altre parole, l'errore più comune del nostro modello è la classificazione inaccurata delle catastrofi come irrilevante. Se i falsi positivi riflettono un costo elevato per le forze dell'ordine, questa può essere una buona opzione per il nostro classificatore.
Spiegazione e interpretazione del nostro modello
Per convalidare il nostro modello e interpretare le sue previsioni, è importante esaminare quali parole usa per prendere decisioni. Se i nostri dati sono di parte, il nostro classificatore farà previsioni accurate sui dati di esempio, ma il modello non può generalizzarli in modo sufficiente nel mondo reale. Lo schema seguente mostra le parole più significative per classi di catastrofi e tweet irrilevanti. Disegnare diagrammi che riflettono il significato delle parole non è difficile nel caso di usare un "sacco di parole" e regressione logistica, perché estraiamo e classifichiamo semplicemente i coefficienti che il modello usa per le sue previsioni.
"Sacchetto di parole": il significato delle parole Il
nostro classificatore ha correttamente trovato diversi modelli ( hiroshima - "Hiroshima", massacro - "massacro"), ma è chiaro che si è riqualificato in alcuni termini privi di significato ("heyoo", "x1392"). Quindi, ora il nostro "sacco di parole" si occupa di un enorme dizionario di parole diverse e tutte queste parole perché sono equivalenti. Tuttavia, alcune di queste parole si verificano molto spesso e aggiungono solo rumore alle nostre previsioni. Pertanto, proveremo a trovare un modo per presentare le frasi in modo tale che possano tenere conto della frequenza delle parole e vedere se possiamo ottenere informazioni più utili dai nostri dati.
Passaggio 6. Si consideri la struttura del dizionario
TF-IDF
Per aiutare il nostro modello a concentrarsi su parole significative, possiamo usare il punteggio TF-IDF ( Frequenza di termine, Frequenza di documento inversa ) sopra il nostro modello di "borsa di parole". TF-IDF pesa in base alla rarità del nostro set di dati, riducendo in via prioritaria le parole che si verificano troppo spesso e aggiungono solo rumore. Di seguito la proiezione del metodo della componente principale, che ci consente di valutare la nostra nuova rappresentazione.
Visualizzazione di una rappresentazione vettoriale usando TF-IDF.
Possiamo osservare una separazione più chiara tra i due colori. Questo indica che dovrebbe essere più facile per il nostro classificatore separare entrambi i gruppi. Vediamo come miglioreranno i nostri risultati. Avendo addestrato un'altra regressione logistica sulle nostre nuove rappresentazioni vettoriali, otterremo una precisione del 76,2% .
Miglioramento molto leggero. Forse il nostro modello ha iniziato a scegliere parole più importanti? Se il risultato ottenuto per questa parte è migliore e non diamo il modello "barare", allora questo approccio può essere considerato un miglioramento.
TF-IDF: significato delle parole Le parole
scelte dal modello sembrano davvero molto più rilevanti. Nonostante il fatto che le metriche sul nostro set di test siano leggermente aumentate, ora ce l'abbiamomolta più sicurezza nell'uso del modello in un sistema reale che interagirà con i clienti.
Passaggio 7. Applicazione della semantica
Word2Vec
Il nostro ultimo modello è stato in grado di "strappare" le parole che hanno più importanza. Tuttavia, molto probabilmente, quando lo rilasciamo in produzione, incontrerà parole che non si sono verificate nel campione di addestramento e non è in grado di classificare in modo accurato questi tweet, anche se durante l'allenamento ha visto parole molto simili .
Per risolvere questo problema, abbiamo bisogno di catturare il significato semantico delle parole - questo significa che è importante per noi capire che le parole "buono" e "positivo" sono più vicine le parole "albicocca" e "continente". Useremo lo strumento Word2Vec per aiutarci ad abbinare i significati delle parole.
Utilizzando i risultati della formazione precedente
Word2Vec è una tecnica per trovare mappature continue per le parole. Word2Vec impara leggendo un'enorme quantità di testo e quindi ricordando quale parola appare in contesti simili. Dopo aver appreso abbastanza dati, Word2Vec genera un vettore di 300 dimensioni per ogni parola nel dizionario, in cui le parole con un valore simile sono più vicine l'una all'altra.
Gli autori della pubblicazione sul tema delle rappresentazioni vettoriali continue di parole hanno esposto un modello di accesso aperto precedentemente addestrato su una grande quantità di informazioni, e possiamo utilizzarlo nel nostro modello per contribuire alla conoscenza del significato semantico delle parole. I vettori pre-addestrati possono essere prelevati dal repository menzionato nell'articolo per riferimento .
Visualizzazione del livello di offerta
Un modo rapido per ottenere gli allegati per il nostro classificatore calcolerà la media delle stime di Word2Vec per tutte le parole della nostra frase. Questo è lo stesso approccio con il "sacco di parole" prima, ma questa volta perdiamo solo la sintassi della nostra frase, preservando l'informazione semantica (semantica).
Presentazione del vettore di offerte in Word2Vec
Ecco la visualizzazione delle nostre nuove viste vettoriali dopo aver utilizzato le tecniche elencate:
Visualizzazione delle rappresentazioni vettoriali di Word2Vec.
Ora i due gruppi di colori sembrano ancora più divisi e questo dovrebbe aiutare il nostro classificatore a distinguere tra le due classi. Dopo aver appreso lo stesso modello per la terza volta (regressione logistica), otteniamo una precisione del 77,7% - e questo è il nostro miglior risultato al momento! È tempo di studiare il nostro modello.
Compromesso tra complessità e Spiegazione
Dal momento che le nostre rappresentazioni vettoriali non sono più rappresentate come un vettore con una dimensione per parola, come nei modelli precedenti, è ora più difficile capire quali parole sono più rilevanti per la nostra classificazione. Nonostante avessimo ancora accesso ai coefficienti della nostra regressione logistica, fanno riferimento a 300 misurazioni dei nostri investimenti e non a indici di parole.
Per un così piccolo aumento dell'accuratezza, una perdita completa dell'opportunità di spiegare il lavoro del modello è un compromesso troppo duro. Fortunatamente, quando lavoriamo con modelli più complessi, possiamo usare interpreti come LIME , che sono usati per avere un'idea di come funziona il classificatore.
LIME
LIME è disponibile su Github come pacchetto aperto. Questo interprete basato su box nero consente agli utenti di spiegare le soluzioni di qualsiasi classificatore in un particolare esempio modificando l'input (in questo caso, rimuovendo la parola dalla frase) e osservando come cambia la previsione.
Diamo un'occhiata ad un paio di spiegazioni per suggerimenti dal nostro set di dati.
Le parole corrette di catastrofi vengono scelte per essere classificate come "rilevanti".
Qui il contributo delle parole alla classificazione appare meno ovvio.
Tuttavia, non abbiamo abbastanza tempo per esaminare migliaia di esempi dal nostro set di dati. Invece, eseguiamo LIME su un campione rappresentativo dei dati del test e vediamo quali parole vengono trovate regolarmente e contribuiscono maggiormente al risultato finale. Utilizzando questo approccio, possiamo ottenere stime del significato delle parole nello stesso modo in cui lo abbiamo fatto per i modelli precedenti e convalidare le previsioni del nostro modello.
Sembra che la modella scelga parole altamente rilevanti e di conseguenza prenda decisioni comprensibili. Rispetto a tutti i modelli precedenti, sceglie le parole più rilevanti, quindi è meglio mandarla in produzione.
Passaggio 8. Uso della sintassi per gli approcci end-to-end
Abbiamo considerato approcci rapidi ed efficaci per la generazione di rappresentazioni vettoriali compatte di frasi. Tuttavia, omettendo l'ordine delle parole, scartiamo tutte le informazioni sintattiche dalle nostre frasi. Se questi metodi non producono risultati sufficienti, è possibile utilizzare un modello più complesso che prende le espressioni intere come input e predice le etichette, senza la necessità di una rappresentazione intermedia. Un modo comune per farlo è trattare la frase come una sequenza di vettori di parole individuali usando sia Word2Vec, sia approcci più recenti come GloVe o CoVe . Questo è ciò che faremo dopo.
modello di architettura di formazione ad alto rendimento, senza pre supplementare e dopo il trattamento (end-to-end, fonte )
di rete Convoluzione neurale per classificare le proposte ( CNN condanna per la classificazione ) addestrati molto rapidamente e può rendere un servizio eccellente, come il livello di ingresso nell'architettura di apprendimento profondo. Nonostante il fatto che la rete neurale convoluzionale (CNN) è nota soprattutto per le sue alte prestazioni in dati di immagine, mostrano ottimi risultati con i dati di testo, e di solito molto più velocemente di quanto addestrati più sofisticati approcci NLP (ad esempio, LSTM -nets e Encoder / decodificatore di architettura). Questo modello preserva l'ordine delle parole e apprende preziose informazioni su quali sequenze di parole vengono utilizzate per prevedere le nostre classi target. A differenza dei modelli precedenti, è consapevole della differenza tra le frasi "Lesha mangia le piante" e "Le piante mangiano Lyosha".
Imparare questo modello non richiederà molto più impegno rispetto ai precedenti approcci (vedi il codice ), e, di conseguenza, otterremo un modello che funziona molto meglio del precedente, permettendoci di ottenere una precisione del 79,5%. Come per i modelli che abbiamo esaminato in precedenza, il passo successivo dovrebbe essere quello di studiare e spiegare le previsioni utilizzando i metodi che abbiamo descritto sopra per assicurarci che il modello sia l'opzione migliore che possiamo offrire agli utenti. A questo punto, dovresti già sentirti abbastanza sicuro per affrontare i prossimi passi da solo.
In conclusione
Quindi, un breve riassunto dell'approccio che abbiamo applicato con successo nella pratica:
iniziare con un modello rapido e semplice;
spieghiamo le sue previsioni;
capiamo che tipo di errori fa;
usiamo le conoscenze acquisite per decidere sul prossimo passo, che si tratti di lavorare sui dati o su un modello più complesso.
Abbiamo considerato questi approcci su un esempio concreto utilizzando modelli basati sul riconoscimento, la comprensione e l'uso di brevi testi - ad esempio, tweets; Tuttavia, queste stesse idee sono ampiamente applicabili a una varietà di problemi diversi .
Nessun commento:
Posta un commento