PNL con l'API del linguaggio naturale di Google Cloud
Pubblicato: 2022-03-11L'elaborazione del linguaggio naturale (PNL), che è la combinazione di apprendimento automatico e linguistica, è diventata una delle materie più oggetto di ricerca nel campo dell'intelligenza artificiale. Negli ultimi anni sono state raggiunte molte nuove pietre miliari, la più recente è stata il modello GPT-2 di OpenAI, che è in grado di produrre articoli realistici e coerenti su qualsiasi argomento da un breve input.
Questo interesse è guidato dalle numerose applicazioni commerciali che sono state introdotte sul mercato negli ultimi anni. Parliamo con i nostri assistenti domestici che utilizzano la PNL per trascrivere i dati audio e per comprendere le nostre domande e i nostri comandi. Sempre più aziende trasferiscono gran parte dello sforzo di comunicazione con i clienti ai chatbot automatizzati. I mercati online lo utilizzano per identificare recensioni false, le società di media si affidano alla PNL per scrivere articoli di notizie, le società di reclutamento abbinano i CV alle posizioni, i giganti dei social media filtrano automaticamente i contenuti che incitano all'odio e gli studi legali utilizzano la PNL per analizzare i contratti.
La formazione e l'implementazione di modelli di machine learning per attività come queste è stato un processo complesso in passato, che richiedeva un team di esperti e un'infrastruttura costosa. Ma l'elevata domanda di tali applicazioni ha spinto i grandi fornitori di servizi a sviluppare servizi relativi alla NLP, che riducono notevolmente il carico di lavoro e i costi dell'infrastruttura. Il costo medio dei servizi cloud è in calo da anni e questa tendenza dovrebbe continuare.
I prodotti che presenterò in questo articolo fanno parte di Google Cloud Services e sono chiamati "Google Natural Language API" e "Google AutoML Natural Language".
API del linguaggio naturale di Google
L'API di Google Natural Language è un'interfaccia facile da usare per un insieme di potenti modelli NLP che sono stati pre-addestrati da Google per eseguire varie attività. Poiché questi modelli sono stati addestrati su corpus di documenti enormemente grandi, le loro prestazioni sono generalmente abbastanza buone fintanto che vengono utilizzati su set di dati che non utilizzano un linguaggio molto idiosincratico.
Il più grande vantaggio dell'utilizzo di questi modelli pre-addestrati tramite l'API è che non è necessario alcun set di dati di addestramento. L'API consente all'utente di iniziare immediatamente a fare previsioni, che possono essere molto utili in situazioni in cui sono disponibili pochi dati etichettati.
L'API Natural Language comprende cinque diversi servizi:
- Analisi della sintassi
- Analisi del sentimento
- Analisi dell'entità
- Analisi del sentimento dell'entità
- Classificazione del testo
Analisi della sintassi
Per un determinato testo, l'analisi della sintassi di Google restituirà una suddivisione di tutte le parole con un ricco set di informazioni linguistiche per ogni token. Le informazioni possono essere suddivise in due parti:
Parte del discorso: questa parte contiene informazioni sulla morfologia di ciascun token. Per ogni parola viene restituita un'analisi a grana fine contenente il suo tipo (nome, verbo, ecc.), genere, caso grammaticale, tempo, stato d'animo grammaticale, voce grammaticale e molto altro.
Ad esempio, per la frase di input "Un computer una volta mi ha battuto a scacchi, ma non è stato all'altezza per me a kickboxing". (Emo Philips) l'analisi della parte del discorso è:
UN | etichetta: DET |
'computer' | tag: NOME numero: SINGOLARE |
'una volta' | etichetta: AV |
'colpo' | tag: VERBO stato d'animo: INDICATIVO tempo: PASSATO |
'me' | tag: PRON maiuscolo: ACCUSATIVO numero: SINGOLARE persona: PRIMO |
a | etichetta: ADP |
'scacchi' | tag: NOME numero: SINGOLARE |
',' | etichetta: PUNTATO |
'ma' | etichetta: CONJ |
'esso' | tag: PRON caso: NOMINATIVO genere: NEUTER numero: SINGOLARE persona: TERZA |
'era' | tag: VERBO stato d'animo: INDICATIVO numero: SINGOLARE persona: TERZO tempo: PASSATO |
'no' | etichetta: DET |
'incontro' | tag: NOME numero: SINGOLARE |
'per' | etichetta: ADP |
'calcio' | tag: NOME numero: SINGOLARE |
'boxe' | tag: NOME numero: SINGOLARE |
'.' | etichetta: PUNTATO |
Alberi delle dipendenze: la seconda parte del ritorno è chiamata albero delle dipendenze, che descrive la struttura sintattica di ogni frase. Il diagramma seguente di una famosa citazione di Kennedy mostra un tale albero delle dipendenze. Per ogni parola, le frecce indicano quali parole vengono modificate da essa.
Le librerie Python comunemente usate nltk e spaCy contengono funzionalità simili. La qualità dell'analisi è costantemente elevata in tutte e tre le opzioni, ma l'API di Google Natural Language è più facile da usare. L'analisi di cui sopra può essere ottenuta con pochissime righe di codice (vedi esempio più in basso). Tuttavia, mentre spaCy e nltk sono open-source e quindi gratuiti, l'utilizzo dell'API di Google Natural Language costa dopo un certo numero di richieste gratuite (vedi sezione costi).
Oltre all'inglese, l'analisi sintattica supporta dieci lingue aggiuntive: cinese (semplificato), cinese (tradizionale), francese, tedesco, italiano, giapponese, coreano, portoghese, russo e spagnolo .
Analisi del sentimento
Il servizio di analisi della sintassi viene utilizzato principalmente all'inizio della pipeline per creare funzionalità che vengono successivamente inserite nei modelli di machine learning. Al contrario, il servizio di analisi del sentimento può essere utilizzato immediatamente.
L'analisi del sentimento di Google fornirà l'opinione emotiva prevalente all'interno di un testo fornito. L'API restituisce due valori: Il "punteggio" descrive l'inclinazione emotiva del testo da -1 (negativo) a +1 (positivo), con 0 neutro.
La "magnitudo" misura la forza dell'emozione.
Diamo un'occhiata ad alcuni esempi:
Inserisci la frase | Risultati del sentimento | Interpretazione |
Il treno per Londra parte alle quattro | Punteggio: 0,0 Magnitudine: 0,0 | Un'affermazione completamente neutra, che non contiene alcuna emozione. |
Questo post sul blog è buono. | Punteggio: 0,7 Magnitudine: 0,7 | Un sentimento positivo, ma non espresso in modo molto forte. |
Questo post sul blog è buono. È stato molto utile. L'autore è fantastico. | Punteggio: 0,7 Magnitudine: 2,3 | Lo stesso sentimento, ma espresso molto più forte. |
Questo post sul blog è molto bello. Questo autore di solito è uno scrittore orribile, ma qui ha avuto fortuna. | Punteggio: 0,0 Magnitudine: 1,6 | La grandezza ci mostra che ci sono emozioni espresse in questo testo, ma il sentimento mostra che sono contrastanti e non chiaramente positive o negative. |
Il modello di analisi del sentimento di Google è addestrato su un set di dati molto ampio. Sfortunatamente, non sono disponibili informazioni sulla sua struttura dettagliata. Ero curioso delle sue prestazioni nel mondo reale, quindi l'ho testato su una parte del Large Movie Review Dataset, creato dagli scienziati della Stanford University nel 2011.
Ho selezionato casualmente 500 recensioni di film positive e 500 negative dal set di test e ho confrontato il sentimento previsto con l'etichetta della recensione effettiva. La matrice di confusione era simile a questa:
Sentimento positivo | Sentimento negativo | |
Buona recensione | 470 | 30 |
Recensione negativa | 29 | 471 |
Come mostra la tabella, il modello ha ragione circa il 94% delle volte per recensioni di film buone e cattive. Questa non è una cattiva prestazione per una soluzione pronta all'uso senza alcuna messa a punto del problema dato.
Nota: l'analisi del sentimento è disponibile per le stesse lingue dell'analisi della sintassi ad eccezione del russo.
Analisi dell'entità
L'analisi delle entità è il processo di rilevamento di entità note come personaggi pubblici o punti di riferimento da un determinato testo. Il rilevamento delle entità è molto utile per tutti i tipi di attività di classificazione e modellazione degli argomenti.
L'API di Google Natural Language fornisce alcune informazioni di base su ciascuna entità rilevata e fornisce anche un collegamento al rispettivo articolo di Wikipedia, se esiste. Inoltre, viene calcolato un punteggio di salienza. Questo punteggio per un'entità fornisce informazioni sull'importanza o la centralità di tale entità nell'intero testo del documento. I punteggi più vicini a 0 sono meno salienti, mentre i punteggi più vicini a 1,0 sono altamente salienti.
Quando inviamo una richiesta all'API con questa frase di esempio: "Robert DeNiro ha parlato con Martin Scorsese a Hollywood la vigilia di Natale nel dicembre 2011". Riceviamo il seguente risultato:
Entità rilevata | Informazioni aggiuntive |
Roberto De Niro | tipo : PERSONA salienza : 0.5869118 wikipedia_url : https://en.wikipedia.org/wiki/Robert_De_Niro |
Hollywood | tipo : POSIZIONE salienza : 0.17918482 wikipedia_url : https://en.wikipedia.org/wiki/Hollywood |
Martin Scorsese | tipo : POSIZIONE salience : 0.17712952 wikipedia_url : https://en.wikipedia.org/wiki/Martin_Scorsese |
vigilia di Natale | tipo : PERSONA salienza : 0.056773853 wikipedia_url : https://en.wikipedia.org/wiki/Natale |
dicembre 2011 | tipo : DATA Anno: 2011 Mese: 12 salience : 0.0 wikipedia_url : - |
2011 | tipo : NUMERO salienza : 0.0 wikipedia_url : - |
Come puoi vedere, tutte le entità sono identificate e classificate correttamente, tranne che 2011 appare due volte. Oltre al campo nell'output di esempio, l'API di analisi dell'entità rileverà anche organizzazioni, opere d'arte, beni di consumo, numeri di telefono, indirizzi e prezzi.
Analisi del sentimento dell'entità
Se ci sono modelli per il rilevamento delle entità e l'analisi del sentimento, è naturale fare un ulteriore passo avanti e combinarli per rilevare le emozioni prevalenti verso le diverse entità in un testo.
Mentre l'API Sentiment Analysis trova tutte le manifestazioni di emozioni nel documento e le aggrega, l'Entity Sentiment Analysis cerca di trovare le dipendenze tra le diverse parti del documento e le entità identificate e quindi attribuisce le emozioni in questi segmenti di testo alle rispettive entità.
Ad esempio il testo supponente: “L'autore è uno scrittore orribile. Il lettore è invece molto intelligente». porta ai risultati:
Entità | Sentimento |
autore | Salienza: 0.8773350715637207 Sentimento: magnitudo: 1.8999999976158142 punteggio: -0.8999999761581421 |
lettore | Salienza: 0.08653714507818222 Sentimento: magnitudo: 0.89999999761581421 punteggio: 0.8999999761581421 |
L'analisi del sentimento dell'entità finora funziona solo per inglese, giapponese e spagnolo.
Classificazione del testo
Infine, l'API del linguaggio naturale di Google viene fornita con un modello di classificazione del testo plug-and-play.
Il modello è addestrato per classificare i documenti di input in un ampio insieme di categorie. Le categorie sono strutturate in modo gerarchico, ad esempio la categoria "Hobby e tempo libero" ha diverse sottocategorie, una delle quali sarebbe "Hobby e tempo libero/Outdoor" che a sua volta ha sottocategorie come "Hobby e tempo libero/Outdoor/Pesca".
Questo è un testo di esempio da un annuncio di una fotocamera Nikon:
“L'ampio sensore in formato DX da 24,2 MP della D3500 acquisisce foto e filmati Full HD ricchi di dettagli, anche quando si scatta in condizioni di scarsa illuminazione. In combinazione con la potenza di rendering del tuo obiettivo NIKKOR, puoi iniziare a creare ritratti artistici con una sfocatura uniforme dello sfondo. Facilmente."

L'API di Google restituisce il risultato:
Categoria | Fiducia |
Arte e intrattenimento/Arte visiva e design/Arti fotografiche e digitali | 0,95 |
Hobby e tempo libero | 0,94 |
Computer ed elettronica/Elettronica di consumo/Macchine fotografiche e fotografiche | 0,85 |
Tutte e tre queste categorie hanno senso, anche se intuitivamente classificheremmo la terza voce più in alto della seconda. Tuttavia, bisogna considerare che questo segmento di input è solo una breve parte del documento pubblicitario completo della fotocamera e le prestazioni del modello di classificazione migliorano con la lunghezza del testo.
Dopo averlo provato con molti documenti, ho trovato i risultati del modello di classificazione significativi nella maggior parte dei casi. Tuttavia, come tutti gli altri modelli dell'API di Google Natural Language, il classificatore si presenta come una soluzione black-box che non può essere modificata o addirittura perfezionata dall'utente dell'API. Soprattutto nel caso della classificazione del testo, la stragrande maggioranza delle aziende avrà le proprie categorie di testo che differiscono dalle categorie del modello di Google e, pertanto, il servizio di classificazione del testo dell'API Natural Language potrebbe non essere applicabile per la maggior parte degli utenti.
Un'altra limitazione del modello di classificazione è che funziona solo per testi in lingua inglese.
Come utilizzare l'API del linguaggio naturale
Il principale vantaggio dell'API di Google Natural Language è la sua facilità d'uso. Non sono richieste abilità di apprendimento automatico e quasi nessuna abilità di programmazione. Sul sito Web di Google Cloud, puoi trovare frammenti di codice per chiamare l'API per molte lingue.
Ad esempio, il codice Python per chiamare l'API di analisi del sentimento è breve come:
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
Le altre funzionalità dell'API vengono chiamate in modo simile, semplicemente cambiando client.analyze_sentiment
nella funzione appropriata.
Costo complessivo dell'API del linguaggio naturale di Google
Google addebita ai suoi utenti in base alla richiesta tutti i servizi dell'API Natural Language. Questo ha il vantaggio che non ci sono costi fissi per i server di distribuzione. Lo svantaggio è che può diventare costoso per set di dati molto grandi.
Questa tabella mostra i prezzi (per 1.000 richieste) in base al numero di richieste mensili:
Se un documento contiene più di 1.000 caratteri, conta come richieste multiple. Ad esempio, se desideri analizzare il sentiment di 10.000 documenti, che contengono 1.500 caratteri ciascuno, ti verranno addebitate 20.000 richieste. Poiché i primi 5.000 sono gratuiti, i costi totali ammonterebbero a $ 15. L'analisi di un milione di documenti della stessa dimensione costerebbe 1.995 dollari.
Comodo, ma inflessibile
L'API di Google Natural Language è un'opzione molto conveniente per soluzioni rapide e pronte all'uso. Sono richieste pochissime conoscenze tecniche e nessuna comprensione dei modelli di apprendimento automatico sottostanti.
Lo svantaggio principale è la sua rigidità e la mancanza di accesso ai modelli. I modelli non possono essere ottimizzati per un'attività o un set di dati specifico.
In un ambiente reale, la maggior parte delle attività richiederà probabilmente una soluzione più personalizzata di quella che possono fornire le funzioni standardizzate dell'API Natural Language.
Per questo scenario, Google AutoML Natural Language è più adatto.
Linguaggio naturale di Google AutoML
Se l'API Natural Language non è sufficientemente flessibile per i tuoi scopi aziendali, AutoML Natural Language potrebbe essere il servizio giusto. AutoML è un nuovo servizio Google Cloud (ancora in versione beta) che consente all'utente di creare modelli di machine learning personalizzati. A differenza dell'API Natural Language, i modelli AutoML verranno addestrati sui dati dell'utente e quindi si adatteranno a un'attività specifica.
I modelli di machine learning personalizzati per la classificazione del contenuto sono utili quando le categorie predefinite disponibili dall'API Natural Language sono troppo generiche o non applicabili al tuo caso d'uso o dominio della conoscenza specifico.
Il servizio AutoML richiede un po' più di impegno per l'utente, principalmente perché è necessario fornire un set di dati per addestrare il modello. Tuttavia, la formazione e la valutazione dei modelli in modo completamente automatizzato e non sono richieste conoscenze di machine learning. L'intero processo può essere eseguito senza scrivere alcun codice utilizzando la console Google Cloud. Naturalmente, se vuoi automatizzare questi passaggi, c'è il supporto per tutti i comuni linguaggi di programmazione.
Cosa si può fare con il linguaggio naturale di Google AutoML?
Il servizio AutoML copre tre casi d'uso. Tutti questi casi d'uso per ora supportano esclusivamente la lingua inglese.
1. Classificazione del testo AutoML
Sebbene il classificatore di testo dell'API Natural Language sia pre-addestrato e quindi abbia un set fisso di categorie di testo, la classificazione del testo AutoML crea modelli di apprendimento automatico personalizzati, con le categorie fornite nel set di dati di addestramento.
2. Analisi del sentimento di AutoML
Come abbiamo visto, l'analisi del sentiment dell'API Natural Language funziona alla grande in casi d'uso generali come le recensioni di film. Poiché il modello del sentiment è addestrato su un corpus molto generale, le prestazioni possono peggiorare per i documenti che utilizzano molto linguaggio specifico del dominio. In queste situazioni, AutoML Sentiment Analysis consente di addestrare un modello di sentiment personalizzato per il tuo dominio.
3. Estrazione di entità AutoML
In molti contesti aziendali, esistono entità specifiche del dominio (contratti legali, documenti medici) che l'API Natural Language non sarà in grado di identificare. Se disponi di un set di dati in cui le entità sono contrassegnate, puoi addestrare un estrattore di entità modello personalizzato con AutoML. Se il set di dati è sufficientemente grande, il modello di estrazione di entità addestrato sarà anche in grado di rilevare entità invisibili in precedenza.
Come utilizzare il linguaggio naturale di AutoML
L'uso dei tre AutoML è un processo in quattro fasi ed è molto simile per tutte e tre le metodologie:
Preparazione del set di dati
Il set di dati deve essere in un formato specifico (CSV o JSON) e deve essere archiviato in un bucket di archiviazione. Per i modelli di classificazione e di valutazione, i set di dati contengono solo due colonne, il testo e l'etichetta. Per il modello di estrazione delle entità, il set di dati necessita del testo e delle posizioni di tutte le entità nel testo.Formazione modello
L'addestramento del modello è completamente automatico. Se non vengono fornite istruzioni altrimenti, AutoML suddividerà automaticamente il set di addestramento in set di addestramento, test e convalida. Questa suddivisione può anche essere decisa dall'utente, ma questo è l'unico modo per influenzare l'addestramento del modello. Il resto della formazione è completamente automatizzato in una scatola nera.Valutazione
Al termine dell'allenamento, AutoML visualizzerà la precisione e richiamerà i punteggi, nonché una matrice di confusione. Sfortunatamente, non ci sono assolutamente informazioni sul modello stesso, rendendo difficile identificare i motivi di modelli con prestazioni scadenti.Predizione
Una volta che sei soddisfatto delle prestazioni del modello, il modello può essere distribuito comodamente con un paio di clic. Il processo di distribuzione richiede solo pochi minuti.
Prestazioni del modello AutoML
Il processo di formazione è piuttosto lento, probabilmente perché i modelli sottostanti sono molto grandi. Ho allenato un piccolo compito di classificazione dei test con 15.000 campioni e 10 categorie e la formazione ha richiesto diverse ore. Un esempio del mondo reale con un set di dati molto più grande mi ha richiesto diversi giorni.
Sebbene Google non abbia pubblicato alcun dettaglio sui modelli utilizzati, suppongo che il modello BERT di Google venga utilizzato con piccoli adattamenti per ogni attività. La messa a punto di modelli di grandi dimensioni come BERT è un processo dispendioso dal punto di vista computazionale, soprattutto quando viene eseguita molta convalida incrociata.
Ho testato il modello di classificazione AutoML in un esempio del mondo reale rispetto a un modello che ho sviluppato io stesso, che era basato su BERT. Sorprendentemente, il modello AutoML ha funzionato significativamente peggio del mio modello, se addestrato sugli stessi dati. AutoML ha raggiunto una precisione dell'84%, mentre il mio modello on ha raggiunto l'89%.
Ciò significa che mentre l'utilizzo di AutoML potrebbe essere molto conveniente, per attività critiche per le prestazioni ha senso investire tempo e sviluppare il modello da soli.
Prezzi di AutoML
Il prezzo di AutoML per le previsioni con $ 5 per 1.000 record di testo è significativamente più costoso dell'API Natural Language. Inoltre, per l'addestramento del modello, AutoML addebita $ 3 all'ora. Sebbene all'inizio ciò sia trascurabile, per casi d'uso che richiedono una riqualificazione frequente, può aumentare notevolmente, soprattutto perché l'addestramento sembra essere piuttosto lento.
Usiamo lo stesso esempio dell'API Natural Language:
Vuoi analizzare il sentiment di 10.000 documenti, che hanno 1.500 caratteri ciascuno, quindi ti verranno addebitate 20.000 richieste. Diciamo che l'addestramento del modello richiede 20 ore, che costa $ 48. La previsione non ti costerebbe nulla, dato che le prime 30.000 richieste sono gratuite. Per piccoli set di dati come questo, AutoML è molto economico.
Tuttavia, se il tuo set di dati è più grande e devi prevedere il sentimento di un milione della stessa dimensione, costerebbe $ 9.850, il che è piuttosto costoso. Per set di dati di grandi dimensioni come questo, ha senso sviluppare il proprio modello distribuirlo autonomamente senza utilizzare AutoML.
API di Google Natural Language e AutoML Natural Language
Google AutoML Natural Language è molto più potente dell'API Natural Language perché consente all'utente di addestrare modelli personalizzati per il proprio set di dati e dominio specifici.
È facile da usare e non richiede conoscenze di machine learning. I due aspetti negativi sono i costi più elevati e la necessità di fornire un set di dati di alta qualità che deve addestrare modelli che funzionino bene.
La versione beta di AutoML supporta per ora solo tre attività NLP (classificazione, analisi del sentimento, estrazione di entità) e supporta solo documenti in lingua inglese. Quando questo servizio verrà rilasciato completamente, prevedo l'aggiunta di altre lingue e attività NLP nel tempo.