fbpx

Imparare a comprendere il linguaggio

da | 15 Mar 2021 | Blog

Per comprendere quello che viene espresso dall’utente in linguaggio naturale, la semplice analisi sintattica spesso non basta. Sono necessari strumenti che possano analizzare una frase nel complesso ed estrapolarne i concetti chiave, spesso legati al proprio ambito di applicazione. Per questo abbiamo bisogno di strumenti che possano fornire una configurazione iniziale, per poi essere specializzati e supervisionati nella crescita.

Tra i tanti servizi cognitivi messi a disposizione da Microsoft Azure, LUIS è sicuramente uno dei più interessanti, perché rende semplice la creazione di un modello per la comprensione di richieste di un utente, che può essere sviluppato e migliorato, grazie ad una intuitiva interfaccia web, anche da chi non ha conoscenze di programmazione.

Un’applicazione LUIS ci consente di analizzare una richiesta scritta in linguaggio naturale, denominata Utterance, riconoscendo la finalità dell’utente, dette Intent, accompagnate da eventuali parametri, denominate Entities. In pratica un modello viene creato stabilendo quali sono gli Intent validi, fornendo degli esempi per ognuno di esso. Esempi che possono contenere una o più entità, scelte tra un set predefinito o create appositamente sulla base del proprio dominio applicativo.

Un esempio vale più di mille parole

Supponiamo di avere in gestione la gelateria di famiglia e di voler gestire i clienti attraverso una chat: creiamo insieme un’applicazione LUIS per riconoscere le ordinazioni da asporto.

Regalo Helado, di Joseph Oland

Per creare una applicazione LUIS è necessario un account Azure e una risorsa Language Understanding. Se non si ha già un account, ci si può registrare gratuitamente ad Azure ed usufruire del credito gratuito. Dopodichè è possibile creare la risorsa seguendo la guida di riferimento fornita da Microsoft.

Creata la risorsa, possiamo accedere al pannello di gestione di LUIS per creare la nostra applicazione, semplicemente scegliendo un nome e la culture di riferimento.

Dal pannello di configurazione possiamo creare il nostro primo Intent per riconoscere gli ordini da asporto, che chiameremo TakeawayOrder. A questo punto è possibile iniziare a digitare degli esempi per istruire LUIS: frasi come “è possibile ordinare da asporto?”, “Vorrei dei gelati da portar via.”, “Fate da asporto?”, sono tutti esempi validi. É importante che le frasi di esempio siano varie e scritte in modo naturale.

Ma una gelateria ha così tanti gusti tra cui poter scegliere! Per farli riconoscere da LUIS, possiamo definire una nuova Feature.

Digitando i gusti nella casella Values, il riquadro dei suggerimenti si popolerà di termini correlati a quelli già inseriti. Quando abbiamo inserito i gusti disponibili nella nostra gelateria, confermiamo con Create.

Abbiamo i gusti ora, ma un cliente potrebbe voler acquistare più di un gelato nello stesso ordine. Per gestire correttamente questi casi, LUIS ci permette di creare delle entità di tipo Machine Learned, che sono effettivamente delle entità composte da più sotto-entità. Nel nostro caso, abbiamo bisogno di un’entità composta da due Feature: flavour e number. Avendo già creato la prima, possiamo aggiungere la seconda scegliendola tra le entità predefinite disponibili in Add new prebuilt entity. A questo punto resta solo da creare la nostra entità IceCreamOrder composta dalle due sotto-entità.

Definita la nostra entità, torniamo sull’Intent TakeawayOrder per assegnargli la Feature appena creata.

Non ci resta che aggiungere delle frasi di esempio con questa Feature, che però non saranno riconosciute automaticamente. É necessario infatti catalogarle manualmente per permettere al sistema di riconoscerle in seguito.

Una volta terminata l’aggiunta delle frasi di input, si procede con training e test. In risposta alla nostra richiesta, verranno restituite anche le feature riconosciute.

Ricapitolando, la nostra applicazione adesso è in grado di riconoscere un Intent per le ordinazioni, con le relative Entity che descrivono la quantità ed il gusto dei gelati. Idealmente ogni frase non riconosciuta verrà catalogata con l’intent None, ma per garantire il corretto funzionamento del sistema, è importante fornire degli esempi anche per questo Intent, accertandosi ancora una volta che siano scritti nel modo più naturale possibile.

Pubblicazione

Una volta testata la nostra applicazione, bisogna renderla disponibile al mondo esterno. La pubblicazione renderà accessibile ad un certo indirizzo il nostro modello, a cui chiediamo di fare delle predizioni, dette Predictions, sulle richieste degli utenti.

LUIS permette la pubblicazione contemporanea di due versioni differenti del nostro modello, utilizzando un meccanismo chiamato slot. Di base abbiamo a disposizione due slot chiamati Production e Staging, che ci permettono di differenziare l’ambiente di produzione da quello su cui sviluppare nuove funzionalità da testare prima del rilascio.

Nella scheda Manage è possibile trovare la lista delle versioni dell’applicazione. Per crearne una nuova, basterà selezionare una versione e cliccare su Clone. Così facendo, è possibile lasciare intatta la versione di produzione (pubblicata sullo slot Production) e lavorare ad una nuova versione da pubblicare in Staging.

LUIS è fruibile tramite gli SDK Microsoft o tramite REST API. Con entrambi è possibile non solo verificare gli Intent ma anche modificare l’applicazione stessa in una fase detta di Authoring, con tutti gli strumenti messi a disposizione dal portale web.

Vi rimando alla documentazione ufficiale per approfondimenti:
https://docs.microsoft.com/it-it/azure/cognitive-services/luis/developer-reference-resource#language-based-sdks

Migliorare il modello

Una volta pubblicata, l’applicazione sarà messa alla prova dagli utenti, che in alcuni casi potrebbero formulare delle richieste che il sistema non è in grado di riconoscere. É importante che il corretto funzionamento del sistema sia periodicamente verificato. Con LUIS è possibile revisionare le richieste dubbie, quelle cioè con una confidence bassa, in modo da poterle aggiungere agli esempi.

L’operazione è molto semplice: dalla scheda Build di LUIS si accede alla voce Review endpoint utterances, dove è possibile confermare le predizioni fatte, o assegnarle ad un altro Intent.

La possibilità di verifica da parte di un operatore umano è solo uno dei punti elencati dalle linee guida Microsoft per un uso responsabile dell’Intelligenza Artificiale. Questi principi aiutano a capire l’impatto che i propri sistemi hanno sulle persone, e quali insidie si nascondono nello sviluppo degli stessi. Se vi interessa approfondire il discorso, date un’occhiata all’articolo di Michele.

Conclusioni

Dopo aver analizzato le soluzioni di Natural Language Processing nel precedente articolo, abbiamo visto in che modo un prodotto come LUIS possa essere il passo successivo all’analisi del testo, fondamentale per l’interpretazione dei comandi e per decidere cosa fare con le richieste dell’utente.

Anche Amazon e Google mettono a disposizione delle soluzioni pronte all’uso simili a LUIS, rispettivamente chiamate Lex e DialogFlow, che sono però più incentrate sullo sviluppo di chatbot. LUIS, invece, si pone sul mercato come una soluzione più generica, utilizzabile in qualsiasi contesto sia necessario comprendere gli intenti di un utente e decidere come rispondere.

Strumenti del genere sono fondamentali in una soluzione come quella che stiamo sviluppando in Ellycode, perché pongono l’accento proprio sulla possibilità di miglioramento del modello e di adattamento al dominio dell’utente. E se posso comprendere cosa mi sta chiedendo l’utente sono sulla buona strada per rispondergli correttamente.

Come? Continuate a seguirci!

Scritto da

Scritto da

Salvatore Merone