Foto di Elnur tramite Shutterstock
Introduzione
Non c'è dubbio che l'AI stia trasformando il modo di sviluppare applicazioni e di fare impresa. Nella corsa allo sfruttamento delle potenzialità dell'AI, Microsoft Azure si è affermata come una piattaforma capace di rendere accessibili i servizi AI più avanzati. Con Azure AI Services (in passato Cognitive Services), gli sviluppatori possono integrare nelle proprie applicazioni funzionalità sofisticate, come la comprensione del linguaggio naturale o il riconoscimento delle immagini, senza bisogno di competenze specialistiche in machine learning né di ingenti risorse di calcolo.
Le funzionalità AI offerte da Azure AI Services sono numerose. In questo articolo vedremo come integrare l'AI nelle applicazioni per estrarre informazioni in modo fluido, classificare testi, comprendere il linguaggio conversazionale, rispondere a domande e altro ancora, sfruttando Azure AI Language Service.
Prerequisiti
- Un account Azure, gratuito per i primi 30 giorni se non ne possiede già uno.
- Conoscenza di base di Azure e del portale di Azure.
- Per eseguire il codice Python di esempio è consigliata una conoscenza di base di Python e pip; serve inoltre l'accesso a Github per scaricare il codice di esempio.
- Utile anche una certa familiarità con Docker e con la containerizzazione delle applicazioni.
Passaggi principali
- Verificare permessi e accesso ad Azure AI Services.
- Creare un endpoint API gestito per il Language Service.
- Testare l'API con gli esempi di codice Python.
- In opzione, testare l'API ospitata in locale su Docker.
- Eliminare le risorse.
Procedura passo passo
Passaggio 1: configurazione iniziale per verificare l'accesso ad AI Services
Apra il portale di Azure all'indirizzo https://portal.azure.com, vada in Microsoft Entra ID (in passato Azure Active Directory), cerchi il proprio account utente, lo selezioni e quindi scelga Azure role assignment. L'opzione più semplice per questo esercizio è assegnare il ruolo Owner o Contributor a livello di Subscription o Resource Group, così da garantire un accesso adeguato alle risorse Azure da creare. Nel mio caso, ho creato un Resource Group e ho attribuito al mio utente il ruolo Owner sul Resource Group stesso.
L'assegnazione dei ruoli in Azure è descritta qui; se non dispone ancora di un Resource Group, una spiegazione completa del suo utilizzo è disponibile qui.

Assegnazione dei ruoli Azure per uno specifico utente
Nel portale di Azure vada in Subscriptions e selezioni Resource Providers. Individui Microsoft.CognitiveServices e selezioni Register se la risorsa non è ancora registrata.
Il processo è descritto in dettaglio qui, sul sito della documentazione di Azure Resource Manager.

Resource Providers
Passaggio 2: creare un endpoint API gestito per il Language Service
Azure AI Services sono servizi gestiti, dotati di un'API esposta per facilitarne il consumo. Esiste un'opzione chiamata Azure AI service multi-service account, che dà accesso a più servizi AI tramite un unico endpoint, ma richiede un deployment in container per esporre l'API. Per questo esempio useremo quindi il Language Service gestito: una risorsa dedicata esclusivamente alle funzionalità linguistiche, più semplice da configurare.
Nel portale di Azure vada in Azure AI Services, selezioni Language Service e quindi Create Language.
Il servizio Azure AI per Language include diverse funzionalità preconfigurate, come l'analisi del sentiment, l'estrazione di frasi chiave e altre, sufficienti per questo esercizio. Selezioni Continue to create your resource.

Creazione della risorsa Language Service
Scorra le pagine della procedura guidata e imposti i seguenti campi:
- Subscription: per impostazione predefinita corrisponde alla subscription corrente.
- Resource Group: utilizzi un gruppo esistente oppure ne crei uno per questo esercizio.
- Region: per impostazione predefinita è East US.
- Name: scelga un nome univoco per il dominio del suo Language Service.
- Pricing tier: scelga il tier gratuito, se disponibile.
- Spunti la casella relativa all'uso responsabile dell'AI.
- Network: scelga tutte le reti, a meno che non preferisca dedicare del tempo a limitare l'accesso a una rete specifica, a un intervallo di IP o a un endpoint privato. Per questo esempio ho optato per l'accesso pubblico per comodità, ma non è una scelta consigliata in ottica di lungo periodo.
Mi sono imbattuto in alcuni bug del portale di Azure in cui i messaggi di errore non corrispondevano alla realtà; se dovesse riscontrarli, prima di liquidarli come falsi positivi verifichi di aver eseguito correttamente il passaggio 1 per confermare l'accesso ad AI Services.


Nell'ultima pagina della procedura guidata, riveda le impostazioni e selezioni Create per creare la risorsa.

Schermata di conferma per la creazione del Language Service
Il deployment richiede pochi minuti; selezioni quindi Go to resource per visualizzarne le impostazioni. Da qui può approfondire le funzionalità del Language Service e la sua configurazione. Selezioni Keys and Endpoint per ottenere le due informazioni necessarie ad accedere all'API nel passaggio 3.
Le chiavi disponibili sono due, per agevolare la rotazione quando serve, ma una qualsiasi delle due è valida per l'accesso all'API. Le best practice per la gestione dei secret in Azure sono disponibili qui.

Chiave ed endpoint per il Language Service
Passaggio 3: testare l'API con gli esempi di codice Python
Se ha installato Python e pip in locale e dispone dell'accesso a Github, come indicato nei Prerequisiti, può utilizzare il codice di esempio in questa repository, scaricando il file zip oppure clonandola.
git clone https://github.com/doitintl/azure-ai-services-demo.git
Una volta che il codice è disponibile in locale sul suo computer, modifichi il file .env per inserire la chiave API e l'endpoint ottenuti al passaggio 3. Al momento della stesura di questo articolo era in uso la versione 3.1 di text analytics; in caso di problemi con questa versione, faccia riferimento al riferimento dell'API REST Language.
COGNITIVE_SERVICES_ENDPOINT=<your endpoint>
COGNITIVE_SERVICES_KEY=<your api key>
SENTIMENT_ANALYSIS_PATH=/text/analytics/v3.1/sentiment?
KEY_PHRASE_EXTRACTION_PATH=/text/analytics/v3.1/keyPhrases
LANGUAGE_DETECTION_PATH=/text/analytics/v3.1/languages?
Prima di eseguire il codice è necessario installare una dipendenza. Se incontra problemi nell'installare questa libreria o nell'eseguire il codice Python, può ricorrere a un ambiente virtuale Python per lanciare gli esempi partendo da una situazione pulita. Gli ambienti virtuali sono illustrati qui e bastano pochi passaggi per configurarli e usarli con Python.
pip install python-dotenv
Sono disponibili tre file Python per testare alcune funzionalità del Language Service: analisi del sentiment, estrazione di frasi chiave e rilevamento della lingua. Utilizzi uno solo dei comandi seguenti per eseguire il file Python desiderato.
python sentiment_analysis.py
python key_phrase_extraction.py
python language_detection.py
Da riga di comando, inserisca un testo da analizzare, come nell'esempio seguente per l'estrazione di frasi chiave.
david@Mac azure-ai-services-demo % python key_phrase_extraction.py
Enter some text to extract its key phrases. Enter q to quit.
Language detection is one of the features offered by Azure AI Language,
a collection of machine learning and AI algorithms in the cloud for
developing intelligent applications that involve written language.
Language detection is able to detect more than 100 languages in their
primary script.
Request:
{
"documents": [\
{\
"id": 1,\
"text": "Language detection is one of the features offered by\
Azure AI Language, a collection of machine learning and AI algorithms\
in the cloud for developing intelligent applications that involve written\
language. Language detection is able to detect more than 100 languages\
in their primary script."\
}\
]
}
Response:
{
"documents": [\
{\
"id": "1",\
"keyPhrases": [\
"Azure AI Language",\
"AI algorithms",\
"Language detection",\
"written language",\
"machine learning",\
"intelligent applications",\
"primary script",\
"features",\
"collection",\
"cloud",\
"100 languages"\
],\
"warnings": []\
}\
],
"errors": [],
"modelVersion": "2022-10-01"
}
Key Phrases:
- Azure AI Language
- AI algorithms
- Language detection
- written language
- machine learning
- intelligent applications
- primary script
- features
- collection
- cloud
- 100 languages
Per testare l'API con un comando CURL, ecco un esempio di analisi del sentiment. È sufficiente sostituire my-endpoint e my-key nel comando.
curl -X POST "https://my-endpoint/text/analytics/v3.1/sentiment" \
-H "Content-Type: application/json" \
-H "Ocp-Apim-Subscription-Key: my-key" \
-d "{\"documents\":[{\"id\":\"1\",\"text\":\"The performance was amazing! The sound could have been clearer.\"},{\"id\":\"2\",\"text\":\"The food and service were unacceptable. While the host was nice, the waiter was rude and food was cold.\"}]}"
{
"documents": [\
{\
"id": "1",\
"sentiment": "mixed",\
"confidenceScores": {\
"positive": 0.5,\
"neutral": 0.09,\
"negative": 0.41\
},\
"sentences": [\
{\
"sentiment": "positive",\
"confidenceScores": {\
"positive": 1.0,\
"neutral": 0.0,\
"negative": 0.0\
},\
"offset": 0,\
"length": 29,\
"text": "The performance was amazing! "\
},\
{\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.17,\
"negative": 0.82\
},\
"offset": 29,\
"length": 34,\
"text": "The sound could have been clearer."\
}\
],\
"warnings": []\
},\
{\
"id": "2",\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.0,\
"negative": 1.0\
},\
"sentences": [\
{\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.0,\
"negative": 1.0\
},\
"offset": 0,\
"length": 40,\
"text": "The food and service were unacceptable. "\
},\
{\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.0,\
"negative": 1.0\
},\
"offset": 40,\
"length": 63,\
"text": "While the host was nice, the waiter was rude and food was cold."\
}\
],\
"warnings": []\
}\
],
"errors": [],
"modelVersion": "2024-03-01"
}
Passaggio 4: ospitare l'API in Docker
Come esercizio facoltativo, se ha familiarità con Docker e desidera ospitare l'API del Language Service in un container Docker, la configurazione è semplice. In questo scenario sono disponibili immagini per funzionalità specifiche del Language Service, come l'analisi del sentiment.
Esegua il deployment del container Docker in locale. È sufficiente sostituire my-endpoint e my-key nel comando. I dettagli sulla configurazione e l'esecuzione del container per l'analisi del sentiment sono disponibili qui.
docker run --rm -it -p 5000:5000 --memory 4g --cpus 1 mcr.microsoft.com/azure-cognitive-services/textanalytics/sentiment:latest Eula=accept Billing=https://my-endpoint ApiKey=my-key
Se incontra problemi con la porta 5000, ne scelga una diversa. Su Mac OS, AirPlay Receiver potrebbe essere in esecuzione sulla porta 5000; può disattivarlo da Impostazioni di sistema > Generali > AirDrop e Handoff > Ricevitore AirPlay.
Una volta scaricata l'immagine e creato il container, può confermare che sia in esecuzione visitando http://localhost:5000/

Container Docker in esecuzione in locale
È disponibile anche una pagina di stato all'indirizzo http://localhost:5000/status e la documentazione completa degli endpoint all'indirizzo http://localhost:5000/swagger

Pagina di stato del container Docker locale
Ora testi il container con un comando CURL, simile a quello usato per il servizio gestito su Azure AI Services, con la differenza che si specifica la porta e la chiave API non è richiesta nell'header.
curl -X POST "http://localhost:5000/text/analytics/v3.1/sentiment" -H "Content-Type: application/json" --data-ascii "{'documents':[{'id':1,'text':'The performance was amazing! The sound could have been clearer.'},{'id':2,'text':'The food and service were unacceptable. While the host was nice, the waiter was rude and food was cold.'}]}"
{
"documents": [\
{\
"id": "1",\
"sentiment": "positive",\
"confidenceScores": {\
"positive": 0.99,\
"neutral": 0.0,\
"negative": 0.0\
},\
"sentences": [\
{\
"sentiment": "positive",\
"confidenceScores": {\
"positive": 0.99,\
"neutral": 0.0,\
"negative": 0.0\
},\
"offset": 0,\
"length": 29,\
"text": "The performance was amazing! "\
},\
{\
"sentiment": "neutral",\
"confidenceScores": {\
"positive": 0.19,\
"neutral": 0.47,\
"negative": 0.34\
},\
"offset": 29,\
"length": 34,\
"text": "The sound could have been clearer."\
}\
],\
"warnings": []\
},\
{\
"id": "2",\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.01,\
"negative": 0.98\
},\
"sentences": [\
{\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.01,\
"negative": 0.99\
},\
"offset": 0,\
"length": 40,\
"text": "The food and service were unacceptable. "\
},\
{\
"sentiment": "negative",\
"confidenceScores": {\
"positive": 0.0,\
"neutral": 0.02,\
"negative": 0.98\
},\
"offset": 40,\
"length": 63,\
"text": "While the host was nice, the waiter was rude and food was cold."\
}\
],\
"warnings": []\
}\
],
"errors": [],
"modelVersion": "2022-11-01"
}
Deployment del container in Azure
L'argomento esula dal focus principale dell'articolo, ma poiché abbiamo mostrato l'hosting con Docker vale la pena ricordare che Azure offre numerose opzioni per creare ed effettuare il deployment di applicazioni cloud-native e containerizzate. In base a esigenze specifiche di scalabilità, costi, alta disponibilità, eventuale preferenza a non utilizzare il servizio gestito di Azure AI e altri criteri, alcune opzioni da valutare sono Azure Container Instances, Azure Container Apps o Azure Kubernetes Service. Queste e altre alternative sono illustrate in dettaglio qui.
Passaggio 5: pulizia delle risorse Azure
La pulizia delle risorse Azure utilizzate in questo esercizio è semplice, dato che è stato creato solo il Language Service. Se ha creato un Resource Group esclusivamente per questo esercizio, può eliminare anche quello, qualora preferisca, ma non comporta alcun costo, essendo semplicemente un modo per raggruppare le risorse Azure.
Vada in Azure AI Services, selezioni Language Service, spunti la casella corrispondente al servizio creato, selezioni Delete e proceda con l'eliminazione.

Eliminazione del Language Service
Azure AI Language Service consente alle aziende di ricavare insight di valore dai testi grazie ad analisi del sentiment, estrazione di frasi chiave e rilevamento della lingua. Abbiamo visto quanto sia semplice integrare queste funzionalità nelle applicazioni tramite un endpoint gestito di Azure AI Services oppure tramite il self-hosting di un container in esecuzione su Docker o ovunque sia possibile fare il deployment di un'applicazione containerizzata.
Punti chiave
Perché scegliere Azure AI Language Service?
- Semplicità d'uso: grazie ai modelli predefiniti e alle API immediate, le aziende possono integrare rapidamente funzionalità avanzate di Natural Language Processing nelle proprie applicazioni senza necessità di competenze specialistiche in machine learning.
- Integrazione fluida: Azure AI Language Service si integra senza attriti con altri strumenti Azure come Azure Machine Learning, Power BI e Azure Synapse Analytics, abilitando analisi e visualizzazione dei dati end-to-end.
- Convenienza economica: il modello pay-as-you-go e l'infrastruttura scalabile assicurano che si paghi solo per ciò che si utilizza, rendendo il servizio accessibile a organizzazioni di qualsiasi dimensione.
- Flessibilità e scalabilità: che si scelga di utilizzare endpoint gestiti per un'integrazione rapida o di eseguire i servizi in container per un controllo maggiore, Azure AI Language Service offre la flessibilità necessaria a soddisfare esigenze aziendali eterogenee. La scalabilità di questi servizi consente di gestire workloads di qualunque entità, dalle piccole startup alle grandi imprese.
- Sicurezza enterprise-grade: le solide funzionalità di sicurezza e conformità di Azure garantiscono la protezione dei dati in ogni fase.
Esempi di casi d'uso
- Analisi del sentiment: comprendere il sentiment dietro feedback dei clienti, recensioni o post sui social media permette alle aziende di individuare le aree di miglioramento, misurare la soddisfazione del cliente e adattare le strategie per offrire un'esperienza migliore.
- Estrazione di frasi chiave: estrarre frasi chiave da documenti, e-mail o ticket di supporto consente di identificare rapidamente argomenti principali, tendenze e criticità. Il risultato sono tempi di risposta più rapidi, una migliore allocazione delle risorse e decisioni più consapevoli.
- Rilevamento della lingua: rilevare automaticamente la lingua di un testo permette alle aziende di ottimizzare i flussi di lavoro multilingua, migliorare la comunicazione con un pubblico globale e garantire la corretta localizzazione dei contenuti.
Inizi subito
Dall'ottimizzazione dei costi all'automazione dell'infrastruttura, dall'hardening della sicurezza alla progettazione dell'architettura cloud, DoiT International offre competenze approfondite in numerosi ambiti del cloud. Per scoprire come DoiT può aiutarla a implementare l'AI e a modernizzare altri aspetti della sua infrastruttura cloud, ci contatti qui e scopra le nostre soluzioni di cloud engineering.