IBM CLOUD: Come estrarre valore da dati testuali

Questo articolo è il nono di una serie scritta in collaborazione con Raoul Alfredo Rocher e Massimo Loaldi. Come IT Solution Architect in ambito Cloud e Intelligenza artificiale vogliamo proporvi alcune brevi review per facilitare l'uso e l'adozione di tecnologie emergenti e innovative.

IBM Cloud è la piattaforma cloud di IBM che aiuta gli sviluppatori a realizzare e ad eseguire applicazioni e servizi innovativi. Oggi approfondiremo l’area tecnologica del Natural Language Understanding, nello specifico vedremo come utilizzare e muovere i primi passi con i servizi di intelligenza artificiale di Watson NLU sulla piattaforma cloud di IBM.

Come spiegato nell’articolo relativo ai moduli di intelligenza artificiale di IBM, Watson non è altro che un servizio di intelligenza artificiale, suddiviso in moduli. Ogni servizio di Watson è responsabile di un dominio specifico di intelligenza artificiale. Essi sono moduli componibili ed integrabili tra loro all’interno di soluzioni esistenti.

Nel precedente articolo era stato scritto come il servizio Watson NLC (Natural language classifier) può aiutare la tua applicazione a comprendere la lingua di brevi testi dividendoli in classi precedentemente definite. In altre parole, permette di convertire testo non strutturato come mail, surveys, ticket di supporto e documenti in classi predefinite.

Dopo aver classificato il testo ed eventualmente scartato ciò che non ci interessa, è possibile interagire con Watson NLU. NLU viene utilizzato per analizzare il testo ed estrarre i metadati dal contenuto dello stesso, come ad esempio: concetti principali, entità, parole chiave, categorie, opinioni, emozioni (Sentiment analysis), relazioni e regole semantiche. Il servizio supporta una varietà di lingue tra cui l’inglese, arabo, cinese (semplificato), coreano, francese, giapponese, italiano, olandese, portoghese, russo, spagnolo, svedese e tedesco, e altre lingue in futuro.

NLC e NLU sono potenti strumenti per analizzare testi e carpirne il significato, e generare informazioni che possono essere molto rilevanti per il business. Applicazioni pratiche potrebbero essere l’analisi della brand reputation attraverso l’analisi approfondita e sistematica di conversazioni social; la catalogazione di emails arrivate all’email di supporto per catalogare tipo di supporto richiesto e analizzarne il contenuto; analisi di recensioni on-line di prodotti e servizi; analisi di conversazioni in chatbot per accrescerne poi l’accuratezza; e tante altre applicazioni utili per il tuo business.

Requisito necessario per il proseguo della lettura e per la creazione delle risorse è essere in possesso dell’account IBM Cloud. Se non si disponesse dell’account seguire il tutorial per la creazione di un free account.

Dopo aver eseguito il login alla piattaforma IBM Cloud tramite il link, recarsi nel catalogo nella sezione AI, successivamente cliccare sul quadrato rosso Natural language understanding, esattamente come indicato nell’immagine sottostante.

No alt text provided for this image

Successivamente recarsi nell’elenco risorse di IBM Cloud e selezionare il servizio appena creato. In questa sezione esattamente nella tab Gestisci e Credenziali del servizio, sono indicate le nostre personali credenziali API del servizio. Queste credenziali ci serviranno per poter accedere al servizio NLU di watson.

No alt text provided for this image

Nel supporto didattico introduttivo è presente un semplice esempio tramite curl. In questo tutorial invece seguiremo passo passo alcuni comandi da eseguire con linguaggio di programmazione python, versione 3.6 utilizzato su Watson studio. E’ possibile inserire gli snippet di codice in qualsiasi IDE di Python.

Anzitutto è necessario installare la libreria python di Watson, nello specifico:

#INSTALLATION

pip install — ignore-installed six watson-developer-cloud

!pip install — upgrade “ibm-watson>=4.1.0

Successivamente sarà necessario importare la libreria appena installata e altre librerie necessarie per la gestione dei dati:

#IMPORT GENERICHE

import request, json

#IMPORT WATSON SDK

from watson_developer_cloud import NaturalLanguageUnderstandingV1

from watson_developer_cloud.natural_language_understanding_v1 import Features, CategoriesOptions, ConceptsOptions, RelationsOptions, EntitiesOptions, KeywordsOptions, MetadataOptions, SentimentOptions

from ipykernel import kernelapp as app

Dopo aver importato tutte le librerie necessarie ecco il codice python per poter ottenere le categorie. Supponendo che il testo da analizzare con Watson NLU sia contenuto nella variabile esempioWatson:

try:

 response_categories = natural_language_understanding.analyze(text=  esempioWatson,  features=Features(categories=CategoriesOptions(limit=5))).get_result()

except:

 print(‘Lingua non riconosciuta’)

Watson NLU, come anticipato nell’introduzione, non è abilitato per tutte le lingue. Il costrutto try, except viene utilizzato proprio per non incorrere in errori di lingua mancante. Il campo text conterrà la variabile con il nostro testo e il campo features conterrà l’output, ovvero le categorie della frase di input. In questo caso si setterà il limite di 5 categorie. Il risultato sarà visibile nella variabile response_categories.

try:

 response_keywords =  natural_language_understanding.analyze(text=esempioWatson,  features=Features(keywords=KeywordsOptions(sentiment=True,emotion=True,limit=5))).get_result()

except:

 print(‘Lingua non riconosciuta’)

Watson NLU, come anticipato nell’introduzione, non è abilitato per tutte le lingue. Il costrutto try, except viene utilizzato proprio per non incorrere in errori di lingua mancante. Il campo text conterrà la variabile con il nostro testo e il campo features conterrà l’output, ovvero le parole chiave inserite nella frase in Input. In questo caso si setterà il limite di 5 parole chiave. Il risultato sarà visibile nella variabile response_keywords.

try:

 response_sentiment = natural_language_understanding.analyze(text= esempioWatson,features=Features(sentiment=SentimentOptions())).get_result()

except:

 print(‘Lingua non riconosciuta’)

Watson NLU, come anticipato nell’introduzione, non è abilitato per tutte le lingue. Il costrutto try, except viene utilizzato proprio per non incorrere in errori di lingua mancante. Il campo text conterrà la variabile con il nostro testo e il campo features conterrà l’output, ovvero la sentiment analysis della frase in Input.

Il risultato sarà visibile nella variabile response_sentiment.

La sentiment è un valore numerico che si attribuisce ad una frase che va da-1 a +1. Nel caso in cui il valore è -1 la frase sarà considerata negativa, nel caso in cui il valore è 0 si considera la frase come neutra, mentre se il valore di sentiment è tendente a +1 allora la frase sarà considerata positiva. La sentiment analysis viene molto utilizzata per analizzare commenti, recensioni e post dei social media.

Per rendere più chiaro il funzionamento del servizio ecco un piccolo esempio di come estrarre valore da un dato non strutturato come una recensione testuale:

Il testo in input è una recensione di un hotel:

Ottima stanza con bagno a un prezzo molto conveniente. Silenzioso trovandosi al sesto piano. Camere con aria condizionata e wi-fi Proprietario molto gentile. Buona e abbondante la colazione compresa nel prezzo. I prodotti del frigobar sono gratuiti. Splendida posizione per girare il centro a piedi.

L’output sarà:

  • Response_Categories = food and drink,food,breakfast foods
  • Response_Keywords = [{‘text’: ‘prezzo conveniente silenzioso’, ‘sentiment’: {‘score’: 0.999752, ‘label’: ‘positive’}, ‘relevance’: 0.911978, ‘count’: 1}, {‘text’: ‘camere aria’, ‘sentiment’: {‘score’: 0.999752, ‘label’: ‘positive’}, ‘relevance’: 0.709252, ‘count’: 1}, {‘text’: ‘abbondante colazione’, ‘sentiment’: {‘score’: 0.999752, ‘label’: ‘positive’},]
  • Response_Sentiment = 0.999752

Watson Natural Language Understanding, prima di analizzare il testo in input, esegue un processo chiamato pre-processing del testo. Questo processo consiste nell’eseguire alcune operazioni per pulire il testo e per renderlo perfetto e senza rumore per l’algoritmo di text mining.

E’ possibile anche eseguire un pre-processing manuale prima di inviare il testo a Watson. E’ possibile sfruttare alcune librerie open source di python come nltk oppure gensim. la recensione di prima preprocessata è stata sottoposta alle operazioni di:

  • Rimozione Stopwords
  • Lemmatizzazione
  • Rimozione caratteri speciali
  • Rimozione caratteri NO ASCII
  • Trasformazioni dei numeri in lettere (5 in cinque)
  • Trasformazione di tutti i caratteri in minuscolo

La recensione di prima sarà così trasformata:

ottima stanza bagno prezzo conveniente silenzioso trovandosi piano camere aria condizionata wifi proprietario gentile buona abbondante colazione compresa prezzo prodotti frigobar gratuiti splendida posizione girare centro piedi

In questo caso sarà più facile estrarre valore dal testo.

Se si vogliono approfondire i temi trattati in questo articolo visitare i seguenti link:

Overview generale disponibile al link:

https://www.ibm.com/it-it/cloud/watson-natural-language-understanding

La demo di riferimento di Watson NLU è disponibile all’indirizzo:

https://www.ibm.com/demos/live/natural-language-understanding/self-service/home

La documentazione tecnica IBM Watson NLU è disponibile al link:

https://cloud.ibm.com/docs/services/natural-language-understanding?topic=natural-language-understanding-getting-started

La documentazione API IBM Watson NLU è disponibile al link:

https://cloud.ibm.com/apidocs/natural-language-understanding/natural-language-understanding



To view or add a comment, sign in

Explore topics