Introduzione agli Azure Cognitive Services (Parte 1)

pubblicato da il 07/02/2020 alle 18:33

AI  Azure 

I Cognitive Services sono una serie di API REST che rendono fruibili applicazioni della intelligenza artificiale senza la necessità di acquisire competenze specifiche quali data science, machine learning e tecnologie correlate quali Tensorflow, PyTorch o ML.NET.

Funzionalità ad alto valore aggiunto quali, ad esempio, comprensione del linguaggio naturale, analisi del testo o visione artificiale sono quindi integrabili nelle nostre applicazioni con uno sforzo decisamente ridotto: inoltre, malgrado le differenze funzionali tra ogni servizio siano significative, l'impostazione di base e le modalità d'uso degli stessi sono molto coerenti tra di loro. Per usufruire di un servizio cognitivo, infatti, è tipicamente necessario:

  • Effettuare il provisioning, tramite la dashboard di Azure, del servizio (es: Text Analytics), annotandone la key (necessaria per autenticare gli accessi al servizio da parte dell'applicazione) e l'endpoint (cioè lo URL dell'istanza del servizio appena creata)
  • Referenziare, all'interno del nostro progetto, il package NuGet corrispondente al servizio appena creato. Ad esempio, per il servizio Text Analytics occorrerà referenziare il package Microsoft.Azure.CognitiveServices.Language.TextAnalytics. I package
  • Utilizzare il contenuto del package per invicare le funzionalità del servizio (ad esempio, data una stringa di testo predire, cioè ipotizzare, la lingua nella quale il testo è espresso)

Sfruttando queste similitudini strutturali, in questo tutorial effettueremo una introduzione ad alcuni dei servizi cognitivi offerti da Azure: Computer Vision, Language Understanding, Speech Services e Text Analytics; tutto il codice mostrato è disponibile in un repository GitHub.

Premesso che i package sono utilizzabili sia in progetti .NET Core che in quelli .NET Framework, per comodità utilizzeremo una console application .NET Core creandola, dal command prompt, con il comando:

dotnet new console 

Text Analytics

Il servizio Text Analysis è in grado di analizzare una espressione testuale al fine, ad esempio, di ipotizzarne la lingua, il sentiment e le entità ivi contenute. Ad esempio, l'analisi della frase: "Settimana scorsa mi sono recato a Seattle riuscendo a visitare lo Space Needle, che è ciò che ho più gradito" potrà essere analizzata per dedurre che sia stata espressa in lingua italiana, che "settimana scorsa", "Seattle" e "Space Needle" sono le entità citate ed il sentiment è tendenzialmente positivo.

A titolo di esempio d'uso di questo servizio, vedremo come utilizzarlo per riconoscere la lingua. Come precedentemente introdotto, dovremo quindi:

  1. Effettuare il provisioning dell'istanza del servizio cognitivo
  2. Referenziare il package NuGet corrispondente al servizio
  3. Utilizzare il servizio per i nostri scopi applicativi

Accedendo alla dashboard di Azure, selezioniamo "Create a resource" specificando Text Analytics come tipologia della risorsa e premendo quindi il tasto "Create". Ci verrà mostrata una form nella quale dovremo specificare le caratteristiche base della risorsa Azure (figura 1).

Figura 1 - Form di specifica delle caratteristiche di base della risorsa Text Analytics

Per completare la creazione dell'istanza, specifichiamo:

  • Rosetta quale nome del servizio
  • La sottoscrizione Azure che desideriamo utilizzare
  • La region nella quale vogliamo effettuare il provisioning (es: West Europe)
  • F0 quale pricing tier, in modo da poter sperimentare gratuitamente
  • Il resource gruop nel quale inserire la risorsa

Premuto create, dovremo attendere che l'istanza sia creata per poter accedere alla sua blade di configurazione e, più precisamente, alla sezione "Keys and Endpoint" (figura 2).

Figura 2 - Sezione "Keys and Endpoint" della blade di configurazione del servizio

Annotiamo lo URL dell'endpoint e la key ed aggiungiamo una reference al package NuGet tramite il comando:

dotnet add package Microsoft.Azure.CognitiveServices.Language.TextAnalytics

Potremo quindi ora utilizzare effettuare la predizione della lingua mediante il codice:

var credentials = new ApiKeyServiceClientCredentials(textAnalysisSubscriptionKey);           
TextAnalyticsClient client = new TextAnalyticsClient(credentials)
{
    Endpoint = textAnalysisEndpoint
};

string utterance = "Settimana scorsa mi sono recato a Seattle riuscendo a visitare lo Space Needle, che è ciò che ho più gradito"; 
string detectedLanguage = string.Empty;

var result = client.DetectLanguage(utterance, "");
if(result.DetectedLanguages!=null || result.DetectedLanguages.Count > 0)
    detectedLanguage = result.DetectedLanguages[0].Iso6391Name;

Dove textAnalysisSubscriptionKey e textAnalysisEndpoint sono, rispettivamente, la key e l'endpoint precedentemente annotati.

Conclusioni

In questa prima parte abbiamo introdotto la famiglia dei servizi Cognitive Services spiegandone il ruolo ed osservato come usare Text Analytics, uno di essi, per effettuare una predizione. Nelle prossime parti vedremo come utilizzare ulteriori servizi per riconoscere il linguaggio naturale, interpretare il contenuto di una immagine e riprodurre una espressione testuale mediante sintesi vocale basata su voci neurali.