La comunicazione è sempre stata alla base delle relazioni umane, tanto da farci inventare numerosi modi di comunicare, più o meno fantasiosi. Vengono prodotte ogni giorno enormi quantità di dati sotto forma di messaggi, commenti, post, e-mail, scritte in linguaggio naturale.
Per poter analizzare e comprendere questi testi in tutta la loro complessità, sono state sviluppate molte tecniche che ricadono nell’area del Natural Language Processing (NLP). Queste tecniche possono seguire un approccio basato su un insieme di regole scritte a mano (rule-based), oppure sfruttando il Machine Learning, costruendo automaticamente un set di regole partendo da dati opportunamente annotati.
Le tecniche di analisi del testo sono molteplici e ci aiutano a ricavare informazioni in formato strutturato, così da poterle elaborare con i computer. Alcune come la Named Entity Recognition (NER), Syntax Analysis, Part-of-Speech tagging, si fermano ad un livello “superficiale” dell’elaborazione linguistica, mentre altre come la Sentiment Analysis o l’Entity Linking, estrapolano concetti ad un livello di comprensione più alto.
Vediamo un esempio di come la NER permette di analizzare la frase, distinguendo persino parole il cui significato varia a seconda del contesto:

Un altro esempio, stavolta di come la Sentiment Analysis consente di riconoscere gli aspetti principali del testo e di verificare il parere per ognuno di esso (opinion mining), oltre che a restituire un risultato complessivo:

Come già visto nell’articolo precedente, se non si hanno conoscenze di intelligenza artificiale o non si vuole sviluppare questi strumenti da zero, è possibile utilizzare i servizi in Cloud. Confronteremo quelli messi a disposizione da Microsoft Azure, Amazon AWS e Google Cloud, dando uno sguardo a quali sono le feature in comune e quelle esclusive.
Azure Cognitive Services
Il servizio sviluppato da Microsoft offre alcune funzionalità interessanti come NER e Linked Entities. La prima consente di riconoscere le entità generiche come nomi, luoghi, eventi, e così via. La seconda invece è in grado di discernere tra termini che potrebbero essere ambigui, restituendo per ogni entità riconosciuta un link alla pagina Wikipedia corrispondente. L’ Opinion Mining è disponibile a partire dalla versione v3.1, al momento in preview e solo per testi in Inglese.
Sono disponibili le librerie di sviluppo, scritte in diversi linguaggi. In alternativa, è possibile interrogare l’interfaccia REST. Come per gli speech services, le funzionalità sono utilizzabili on-premises installando un container Docker, che è possibile attivare solo previa richiesta a Microsoft tramite compilazione di un form. Al momento, NER ed Entity Linking non sono disponibili nel container e ci si dovrà accontentare del servizio in Cloud.
Per un elenco delle funzionalità di Cognitive Services, si può fare riferimento alla documentazione ufficiale:
https://docs.microsoft.com/it-it/azure/cognitive-services/text-analytics/
Amazon Comprehend
Comprehend è un servizio di NLP che fornisce feature come keyphrase extraction, sentiment analysis ed entity recognition. Inoltre Comprehend permette di creare dei modelli specifici per il proprio dominio applicativo, sia per il riconoscimento di entità (come codici o sigle specifiche) sia per la classificazione dei testi. In entrambi i casi il sistema viene istruito con delle liste di testi già catalogati, gli algoritmi di machine learning faranno il resto. È possibile utilizzare Comprehend solo tramite gli SDK, che sono disponibili per Java, Python, PHP, Javascript, Ruby, C# e Go. Al momento non è disponibile una API REST.
Trovate la documentazione al seguente link:
https://docs.aws.amazon.com/comprehend/
Google Cloud Natural Language API
Le Natural Language API forniscono alcune funzionalità già viste su modelli generici pre-allenati, gli stessi utilizzati da Google Assistant. Per chi ha esigenze particolari, con AutoML è possibile creare dei modelli personalizzati per il proprio dominio applicativo. Questo servizio offre una funzionalità di Syntax Analysis completa, che restituisce informazioni dettagliate sul testo analizzato. Mentre le altre procedure consentono di comprendere il significato del testo, la syntax analysis scende nel dettaglio e ne rivela la struttura. Il testo viene suddiviso in tanti token, che vengono classificati (come aggettivo, verbo, soggetto, etc.) e messi in relazione l’uno con l’altro. L’analisi del sentiment relativo alle entità non è disponibile in Italiano.
Google mette a disposizione le librerie di sviluppo e la documentazione per le API REST e gRPC.
Qui potete trovare ulteriori informazioni sulle funzionalità supportate:
https://cloud.google.com/natural-language/docs
Azure, AWS e Google Cloud a confronto
Proviamo a riassumere le funzionalità offerte dai principali Cloud provider in una tabella riepilogativa:
Azure Cognitive Services | Amazon Comprehend | Google Cloud Natural Language API | |
---|---|---|---|
Sentiment analysis | ✔️ | ✔️ | ✔️ |
Opinion mining | ✔️ (preview) | ✔️ | |
Language recognition | ✔️ | ✔️ | |
Named entity recognition | ✔️ | ✔️ | ✔️ |
Syntax analysis | ✔️ | ✔️ | |
Keyphrase extraction | ✔️ | ✔️ | |
Modelli personalizzati | ✔️ | ✔️ | |
Linguaggi supportati | C#, Python, Javascript, Go, Ruby | Java, Python, PHP, Javascript, Ruby, C#, Go | C#, Go, Java, Javascript, PHP, Python, Ruby |
REST | ✔️ | ✔️ | |
gRPC | ✔️ | ||
On-prem | ✔️ (Docker) |
Tutti e tre seguono un modello di fatturazione simile che tiene conto del numero di “unità” analizzate. Microsoft e Google definiscono come unità un numero di caratteri che va da 0 a 1000 caratteri, Amazon invece da 0 a 100 caratteri. Per Google e Amazon il costo unitario varia a seconda della caratteristica utilizzata e al numero di unità: più è alto il numero di unità analizzate mensilmente, minore sarà il costo unitario.
Considerazioni finali
Per via dell’infinita varietà di interpretazioni e significati, comprendere le reali intenzioni dell’utente è la vera sfida nella creazione di un assistente virtuale, indipendentemente dalla modalità di interazione.
I servizi che abbiamo visto, combinati opportunamente, possono essere il punto di partenza in questo campo affascinante e complesso. Ma non sono gli unici che il Cloud ci mette a disposizione.
Se siete interessati a scoprirne altri, continuate a seguirci!