NLP (Natural Language Processing): Breve rassegna dello stato dell’arte

NLP è uno degli ambiti in Intelligenza Artificiale che sta prendendo più piede: proviamo a fare il punto.

Scrivere sullo “stato dell’arte” sul tema NLP (e su qualsiasi tema riguardante l’Intelligenza Artificiale) può sembrare un esercizio un po’ fine a sé stesso, vista l’incredibile velocità alla quale si susseguono le innovazioni e gli sviluppi.

Per dare un’idea di come le cose si stanno evolvendo lo scorso novembre nel suo Blog dedicato Google annunciava che Translate aveva fatto un balzo in avanti nella qualità delle traduzioni migliorando più di quanto avesse fatto nei precedenti 10 anni,

Balzo in avanti per Google Translate
Balzo in avanti per Google Translate

e che questo era dovuto al passaggio dalla vecchia tecnologia a Traduzione statistica, in cui i testi vengono scomposti in singole frasi alla nuova “Neural Translation”, basata sull’utilizzo di reti neurali.

Nello stesso periodo anche Microsoft annunciava il passaggio alle reti neurali per Translator, e Amazon presentava la sua piattaforma di NLU (Natural Language Understanding) LEX.

Cionondimeno fare un punto sul tema, per quanto provvisorio, può essere utile per chiarirsi le idee su quello che sta succedendo.

Quando si parla di Natural Language Processing intendiamo l’elaborazione automatica del linguaggio umano: traduzioni, sentiment analysis, generazione automatica di testi e chatbot sono alcune tra le problematiche più comuni nel campo.

Perché è così difficile?

A rendere l’elaborazione del linguaggio naturale così complessa da elaborare per una macchina sono prevalentemente due fattori:

  • Anche nei casi in cui il linguaggio naturale è dotato di regole e strutture relativamente precise, sono presenti convenzioni e forme idiomatiche i cui significati sono fortemente dipendenti dal contesto.
  • La comunicazione umana è fortemente ridondante e ambigua, spesso piena di gap accidentali o voluti, e per funzionare necessita di forti assunzioni sulla condivisione della base di conoscenze tra le parti in gioco.

Questi fattori rendono particolarmente ostica l’automazione del linguaggio naturale con sistemi basati sulla definizione di regole ed eccezioni.

Lo stack tecnologico di NLP, ovvero i vari livelli delle architetture che lo riguardano, ricalca in gran parte quello più generale di machine learning essendone una specializzazione.

Proviamo ad approfondire questi livelli:

Hardware

Visto l’elevato grado di parallelizzazione richiesto, specialmente dalle reti neurali, la tendenza è di utilizzare GPU (i processori delle schede grafiche) piuttosto che CPU nelle architetture.

Gli attori principali in questo ambito sono stati fino a ieri principalmente Intel con il suo Haswell, e Nvidia con Tesla K80.

Tuttavia, la necessità sempre più spinta a ottimizzare performance, spazio e costi per operazioni molto specifiche come il calcolo matriciale, di gran lunga la tipologia di calcolo più ricorrente nelle reti neurali di NLP, ha portato Google a disegnare e lanciare la propria architettura, chiamata TPU (Tensor Processing Unit), che Google dichiara ordini di grandezza superiore alle architetture citate per questo ambito.

Google TPU: architettura
Google TPU: architettura

Linguaggi di programmazione

Questa parte dello stack si riferisce ai linguaggi utilizzati a livello più basso, sia per l’implementazione dei framework e delle piattaforme utilizzate, sia per soluzioni custom.

Tradizionalmente il linguaggio più utilizzato per NLP è Pyhton, apprezzato soprattutto per le sue numerose librerie, come NLTKre module e Scipy. Ma anche R ha guadagnato molto terreno, e Java stesso conta su numerose librerie come OpenNLPCoreNLP e LingPipe (senza contare che molti dei framework Big Data come Hadoop e Spark sono implementati in Java); inoltre vale sicuramente la pena menzionare SAS.

Librerie e framework di deep learning

Qui troviamo le librerie e framework più utilizzati per l’implementazione di deep learning.

Librerie NLP
Librerie NLP

Queste librerie hanno differenti livelli di astrazione, e oltre a strutture utili a definire modelli di deep learning hanno anche algoritmi efficienti di ottimizzazione.

Oltre alle librerie più specializzate citate per NLP nel paragrafo precedente, citiamo tra le più utilizzate TensorFlow di Google, Caffe, Keras, Theano, Microsoft CNTK.

Oltre alle librerie, molti attori hanno reso disponibile come servizio su cloud l’accesso alle loro piattaforme, come Wolfram AlphaFacebook wit.aiIBM WatsonMicrosoft luis.aiGoogle api.ai. Con alcune di queste tecnologie Spindox ha realizzato alcuni chatbot, resi disponibili online come applicazioni di Telegram.

Tipologie di piattaforme NLP

Ad oggi i motori di NLP possono grossolanamente essere suddivisi in due categorie:

NLP statistica

I motori NLP a elaborazione statistica (Statistical NLP) si basano su inferenze probabilistiche per determinare la grammaticalità e la disambiguazione del contenuto in input.

Sono stati di gran lunga dominanti nel campo dagli anni ’80 in poi a seguito della “rivoluzione statistica”, che di fatto determinò l’obsolescenza dei sistemi basati su regole rigide codificate a mano.

ontologia
esempio di ontologia

Tra questi spicca la piattaforma Cogito sviluppata dall’italiana Expert Systems, che fa uso di ontologie complesse accuratamente preparate e definite da esperti linguisti nel corso degli anni.

Cogito
Come funziona Cogito

NLP su Reti Neurali

Approccio utilizzato nelle versioni rilasciate lo scorso novembre da Google, Microsoft, Amazon, IBM e Facebook, peri quali hanno rilasciato su cloud le api di interfaccia, rispettivamente api.ai, luis.ai, LEX, Watson e wit.ai.

Comparazione

Per farci un’idea abbiamo fatto un piccolo studio di comparazione in laboratorio, ricavandone le seguenti impressioni:

Cogito API
  • pro:
    • non richiede a priori di fornire esempi
    • è in grado di “scoprire” autonomamente il contesto e il dominio del contenuto facendo inferenza sulla probabilità di occorrenza dei termini
  • contro:
    • richiede l’inserimento manuale delle ontologie, compito spesso estremamente oneroso
    • In caso di frasi brevi ha difficoltà a delimitare il dominio
Google api.ai
  • pro:
    • Riconoscimento semantico maturo anche sulla lingua italiana
    • Tanti domini base già implementati
    • Integrazione nativa con molte piattaforme di messaggistica
    • Integrazione nativa con servizi di speech-to-text
  • contro:
    • Si  tratta di “supervised learning”, quindi se di “contro” dobbiamo parlare, possiamo dire che c’è necessità di fornire molti esempi per addestrare la rete
Facebook wit.ai
  • pro:
    • Buon livello di maturità del riconoscimento semantico per la lingua italiana
    • In base all’intento riconosciuto vengono chiamate funzioni custom
    • Facilità di gestione dei flussi alternativi mediante storie
    • Integrazione nativa con servizi di speech-to-text
  • contro:
    • Difficoltà nella gestione dei fallback
    • Gestione storie ancora in fase beta (e non trasferibili tra diverse app)
    • Integrazione nativa solo con FB Messenger
IBM Watson
  • pro:
    • Costruzione dei flussi (albero di risoluzione) intuitiva anche per non esperti
    • Motore di NLP molto potente
  • contro:
    • Difficoltà nella gestione dei fallback (per la lingua italiana)
    • Gestione della logica di esecuzione mediate API macchinosa
    • Trasferimento di intenti ed esempi tra diverse applicazioni non immediato
MS Luis.ai
  • pro:
    • Buon livello di maturità del riconoscimento semantico per la lingua italiana
    • Integrazione nativa con servizi Microsoft e Azure
  • contro:
    • Difficoltà nella gestione dei fallback
    • Gestione della logica di esecuzione mediate API molto macchinosa
Amazon Lex
  • pro:
    • Integrazione nativa dello speech-to-text
    • Gestione integrata dello slot filling (necessità di avere determinati parametri)
    • Integrazione nativa servizi AWS (e.g Lambda) per risoluzione dei task
  • contro:
    • Ancora in preview
    • Manca ancora il supporto all’italiano
    • Poco testata

Ambiti applicativi

Chatbot

Potremmo definire un chatbot come un software in grado di dialogare in maniera credibile con un essere umano (o addirittura con un altro chatbot) tramite linguaggio naturale.

Quello dei chatbot è oramai diventato un fenomeno molto diffuso, sostanzialmente esploso dalla creazione di Siri, e oggi oltre alle piattaforme già citate nel paragrafo precedente ci contano moltissime applicazioni in ambiti specializzati, come assistenti virtuali di contact  center, weather bot per le previsioni del tempo, fino ad ABBI, un bot specializzato in prescrizioni mediche riguardanti cannabis, senza dimenticare Tay, il chatbot rilasciato da Microsoft su Twitter nel marzo 2016, ritirato poche ore dopo il lancio, dopo che migliaia di interazioni maliziose avevano portato il bot a dichiarazioni fasciste fino ad addirittura dichiarare odio per l’umanità.

Sentiment Analysis

La sentiment analysis è il processo con cui si raccolgono e interpretano opinioni e reazioni di utenti su prodotti, film, avvenimenti. Questo è un ambito che riguarda la comprensione di testi e interpretazione dei “toni”.

Alcuni dei task tipici sono l’analisi di polarità (buono/cattivo, accordo/disaccordo), l’analisi di soggettività (oggettivo/soggettivo), utile nell’analisi di polarità dal quando Pang (2004) aveva dimostrato che rimuovendo le dichiarazioni oggettive l’analisi di polarità ricavava sostanziali benefici in performance.

Traduzioni

Ho già citato l’ambito delle traduzioni, e di come stia migrando dalle analisi statistiche alle reti neurali. Le piattaforme principali rimangono Google Translate, Microsoft Translator, Amazon Lex. Da seguire con interesse inoltre lo sviluppo di Pilot di WaverlyLabs, dichiarato come il primo traduttore simultaneo blue-tooth.

Estrazione di informazioni e Ricerca

Questo tipo di analisi è uno dei più legati alle tecnologie Big Data, dove si tratta sostanzialmente di processare terabyte di documenti di testo in parallelo, interpretandone i testi e generare reportistica e analisi comparative.

Questo articolo è stato pubblicato originariamente su Spindox.it: NLP (Natural Language Processing): Breve rassegna dello stato dell’arte

Informazioni sull'autore

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: