Azure Cognitive Services

Sentiamo tanto parlare di intelligenza artificiale, machine learning e simili. Ma se volessimo provare con mano questi servizi, per capire la loro reale potenza di fuoco, ma allo stesso tempo non volessimo acquisire nuove competenze specifiche quali, ad esempio, data science o tecnologie collegate come ML .NET o Tensorflow?

Azure ci viene incontro e ci fornisce uno strumento chiamato Azure Cognitive Service.

Che cos’è Azure Cognitive Services?

È un servizio presente nella piattaforma Azure, composto da una serie di endpoint HTTP che rendono fruibili applicazioni di intelligenza artificiale. Il vero punto di forza di questa piattaforma è che lo sviluppatore ha a disposizione un ambiente già sottoposto a training, quindi allenato a rispondere in modo abbastanza coerente alle nostre richieste. Ho scritto “abbastanza” in quanto, trattandosi di intelligenza artificiale, una percentuale di errore è comunque sempre possibile.

Ok, ma cosa posso fare nello specifico?

La lista delle cose che si possono fare è veramente ampia. È possibile utilizzare funzionalità di riconoscimento del testo, immagini o video, categorizzazioni, OCR, riconoscimento facciale, traduzioni e molto altro.

Possiamo, in effetti, riunire i cognitive services in 5 macrocategorie di funzionalità:

  • Vision: riconoscimento ed elaborazione di immagini, form e di input penna per capirne il contenuto. Determinazione delle emozioni in base ad una immagine
  • Speech: elaborazione del parlato sia da voce a testo che viceversa e traduzioni
  • Language: estrazione del significato partendo da un testo non strutturato, valutazione delle emozioni e riconoscimento di ciò che gli utenti vogliono
  • Decision: monitoraggio e statistiche su base dati, calcolo del rischio in modo da avere un processo decisionale efficiente
  • Search: integrazione di tutti i servizi Bing Search

Come funziona “dietro le quinte”?

I cognitive service si basano su vari servizi sempre presenti sulla piattaforma Azure, primo tra tutti Azure Machine Learning. Uno dei punti di forza dell’utilizzo dei cognitive service è che la loro gestione e manutenzione è tutta a carico di Microsoft. Inoltre ogni nuova funzionalità introdotta non comporterà la modifica del nostro codice (a patto di breaking changes, ovviamente).

Come vedremo più avanti, una volta che avremo scelto il servizio da utilizzare, non dovremo fare altro che chiamare l’apposito endpoint fornito ed inviare la nostra risorsa (audio, video o testo che sia). Il servizio ci risponderà con l’analisi sulla base dalla API utilizzata.

Altro punto a favore, già anticipato, è l’utilizzo di semplici endpoint per chiamare i servizi. Questo fa sì che essi siano interrogabili da qualsiasi piattaforma; l’unico vincolo è, ovviamente, la necessità di inviare una chiamata HTTP, poi il gioco è fatto. Se invece preferite utilizzare un SDK, nessun problema, Microsoft ha pensato anche a questo; sono disponibili SDK per i principali linguaggi di programmazione, che consentono di astrarre la costruzione delle chiamate.

TODO LIST per poter utilizzare i Cognitive Services

  1. Sottoscrizione ad Azure
  2. Creazione della risorsa “Cognitive Services” su Azure
  3. Recupero della chiave e dell’endpoint
  4. Invocazione delle API REST tramite HTTP o SDK

Un esempio pratico

Seguendo la TODO list scritta sopra andiamo ad utilizzare uno dei tanti servizi messi a disposizione.

Per prima cosa, apriamo il portare Azure, andiamo in “Create a Resource” e nella barra di ricerca cerchiamo “Cognitive Services” e premiamo su “Create”.

La schermata che ci verrà presentata ha lo scopo di farci creare una risorsa generica di cognitive services, in modo da poter andare ad interrogare una delle API relative alle 5 macrocategorie viste poco fa.

Inseriamo le informazioni richieste e proseguiamo.

Al termine dell’operazione di deployment della risorsa, rechiamoci nella sezione “Keys and Endpoint”. Da questa pagina dobbiamo annotarci alcune informazioni che utilizzeremo tra poco, ovvero:

  • Endpoint, che utilizzeremo per effettuare le nostre richieste
  • Key1, la chiave che dovrà essere inserita nell’header di ogni chiamata HTTP o utilizzata nel SDK

Finalmente un po’ di codice!

La prima API che utilizzeremo è la Text Analitycs, tramite un client di API testing, in questo caso Postman. Il nostro scopo è utilizzare la funzione di “Analisi del sentiment”, per esaminare alcune recensioni scritte da utenti su un dato ristorante e determinarne il loro feedback. (nb: le recensioni sono assolutamente vere!)

Questo è ciò che dobbiamo inserire su Postman. Come è possibile notare, la Key viene inviata come Header della richiesta.

Mentre, nel body della richiesta, inseriremo le recensioni dei clienti seguendo come struttura l’oggetto che riporto sotto:

class Document
{
       public string Id {get; set;}
       public string Language {get; set;}
       public string Text {get; set;}
}

Ovviamente per la buona riuscita è necessario inserire la lingua corretta con cui il testo è stato scritto.

E questo è ciò che viene restituito

Lo score è un punteggio che va da 0 ad 1, dove 0 identifica un sentiment completamente negativo, 1 ne indica uno completamente positivo, mentre valori attorno a 0,5 ne indicano uno neutro.

Per il nostro esempio ho scelto appositamente recensioni ai due estremi e il risultato è abbastanza soddisfacente.

La documentazione di Text Analytics la potete trovare sul sito Microsoft. Per la seconda applicazione, invece, utilizzeremo l’SDK fornito da Microsoft per utilizzare la funzionalità di analisi dell’immagine direttamente dalla nostra console application. NB: Potrete trovare questo progetto completo su GitHub, mentre qui di seguito saranno evidenziate solo le caratteristiche salienti.

Per utilizzare il servizio di Computer Vision, sarà necessario prima di tutto aggiungere una referenza Nuget del package Microsoft.Azure.CognitiveServices.Vision.ComputerVision al progetto. Il metodo Authenticate utilizza la key e l’endpoint che abbiamo utilizzato nell’esempio precedente. Questo metodo ci permette di creare il client che effettuerà le richieste.

Successivamente possiamo eseguire l’analisi dell’immagine. Nel progetto presente su GitHub sono esposte due modalità:

  • Analisi di un’immagine dato un url
  • Analisi di un’immagine in locale

Il funzionamento è il medesimo, in quanto varia solo la sorgente del dato di input e il metodo da chiamare per effettuare la richiesta, per cui in questo articolo prenderemo in analisi solo il primo caso.

Il codice, come potete vedere, è molto semplice.

Nella prima parte viene definita una lista di feature che corrispondono alle funzionalità che vogliamo utilizzare. Nel nostro caso abbiamo tutte le feature disponibili.

Nella seconda parte, invece, viene chiamato il metodo che effettuerà la richiesta HTTP per l’analisi dell’immagine e ciò che genererà sarà un oggetto di tipo ImageAnalysis contenente tutte le “risposte” in base alle feature aggiunte precedentemente.

Per ogni feature sarà presente la proprietà “confidence” che indica il livello di attendibilità della risposta stessa. Il valore è compreso tra 0 ed 1, più si avvicina all’estremo superiore e più la risposta sarà attendibile. L’immagine utilizzata è questa: [http://www.giuneco.tech/wp-content/uploads/2018/04/banner_sottile1.jpg]

Questa è la risposta che si riceve. Per semplicità vi mostro solo una delle risposte anche se ho selezionato precedentemente tutte le feature disponibili (clonate il progetto su GitHub per vedere tutte le altre risposte).

Le opportunità sono veramente molteplici e non era possibile mettere tutto in questo articolo :); adesso è il vostro turno di sperimentare tutto ciò che mette a disposizione Azure Cognitive Services e trovare quello che fa per voi.
NB: rischiate di passarci veramente tante ore ma, forse, è proprio questo il bello!

Vi lascio un po’ di documentazione utile, fatene buon uso!

https://azure.microsoft.com/en/services/cognitive-services/

https://docs.microsoft.com/en/azure/cognitive-services/

https://docs.microsoft.com/en/rest/api/cognitiveservices/

https://docs.microsoft.com/en/learn/browse/?products=azure-cognitive-serviceshttps://stackoverflow.com/questions/tagged/azure-cognitive-services