Aggregatore Risorse Aggregatore Risorse

Come funziona un assistente vocale? di Marta Ricchiardi, Allieva IUSS

Immagine

Come funziona un assistente vocale? di Marta Ricchiardi, allieva della Scuola Universitaria Superiore IUSS di Pavia. L'articolo è stato pubblicato su Il Chiasmo, magazine vocale a vocazione divulgativo-enciclopedica, realizzato dalla Rete Italiana degli Allievi, in collaborazione con l'Istituto @Treccani.

 

"Negli ultimi anni ci siamo abituati ad avere quotidianamente accanto a noi un numero sempre crescente di dispositivi parlanti.   Chiediamo ad Alexa di accendere e spegnere la luce, di connettersi al bluetooth e di ricordarci di portare fuori l’umido, a Google di darci le indicazioni per arrivare a casa di nostra nonna e a Siri leggerci una voce di Wikipedia. Questo articolo prova a rispondere alla domanda: come funzionano questi strumenti?

Si proverà dunque a spiegare, un passo per volta, come funziona un sistema di dialogo, da cosa è composto, quali sono le intuizioni alla base, di cosa ha bisogno per funzionare.

 

Per chiarirci sui termini

I sopracitati Alexa, Siri, Cortana, Google Echo e qualsiasi altro “dispositivo parlante” sono detti assistenti vocali,  o (meno frequentemente) agenti conversazionali. Con chatbot si intende generalmente un agente conversazionale che funziona appunto via chat. Con sistema di dialogo intendiamo in generale il sistema che sta alla base di assistenti vocali e chatbot. Parliamo poi di sistemi di dialogo goal-oriented quando usiamo l’agente conversazionale con uno scopo ben definito (prenotare il ristorante, chiedere indicazioni o farci un promemoria), e di sistemi chit-chat quando lo scopo stesso dell’agente è il fare conversazione di per sé, ad esempio per intrattenimento. 

 

Resta poi da capire cosa si intende con intelligenza artificiale e machine learning. Intelligenza artificiale (AI) è un termine di tradizione logico-filosofica che si riferisce alla capacità di una macchina di svolgere prestazioni che ricordano quelle della capacità di pensiero umano. Machine learning è un termine più specifico che indica sistemi di AI caratterizzati dalla capacità di apprendere sulla base dei dati presentati. Ad esempio, allenando (training) l’algoritmo con tante recensioni positive e tante recensioni negative, l’algoritmo imparerà a distinguere una recensione positiva da una recensione negativa. La terminologia è un po’ antropomorfizzante, sulla base dell’assunto che gli algoritmi di machine learning imitino per certi versi l’intelligenza umana. È una posizione su cui si può discutere, ma siccome la terminologia è ampiamente accettata in inglese, questo articolo si attiene a quella anche in italiano.

 

Dentro al sistema di dialogo

Intuitivamente, la comunicazione è fatta da due processi: la produzione di un messaggio verbale da parte di chi lo produce, e la decodifica da parte di chi lo riceve. Considerato poi che la produzione verbale deve avere un qualche contenuto, come terzo componente va aggiunto un qualche deposito di conoscenza da cui tirare fuori le informazioni sul contenuto di quel che vogliamo dire. Per la comunicazione sociale tra esseri umani, questo modello a tre componenti è troppo semplicistico, ma per gli agenti conversazionali è un’approssimazione che può funzionare. 

L’immagine qui sotto, adattata dall’articolo in bibliografia, illustra un po’ più nel dettaglio queste componenti.

 

RICCHIARDI immagine nel testo.jpg Figura 1. Struttura di un sistema di dialogo goal-oriented (da Young et al., 2013)

 

Natural language understanding

Come è ovvio, il primo passo è decodificare quel che dice l’utente. Decodificare significa innanzitutto ricondurre l’onda sonora a una sequenza di parole di senso compiuto, il che è meno ovvio di quel che si può pensare perché l’onda sonora non presenta tra una parola e l’altra pause o altri segni che ci aiutino nella segmentazione. Questa segmentazione può essere fatta via machine learning, con un algoritmo allenato a segmentare frasi sulla base di un training set fatto da tanti esempi di frasi pronunciate e segmentate.  Una volta identificate quali sono le parole, per capire cosa ha detto l’utente c’è da capire cosa significano le parole. In questo vengono in aiuto i cosiddetti word embeddings.

 

Rappresentare parole coi vettori

L’ embedding di una parola è un vettore che rappresenta il significato della parola. Non è possibile spiegare in poche righe come vengono creati questi vettori, ma ce ne si può fare un’idea considerando la nozione di cooccorrenza. L’intuizione della linguistica distribuzionale  è infatti che parole dal significato simile tendono a cooccorrere nello stesso contesto testuale. Si considerino i due esempi di seguito.  

Se non sapessimo cos’è l’ ongchoi  (un prestito dal cantonese) ma leggessimo frasi come

 

L’ongchoi è delizioso saltato con l’aglio 

L’ongchoi è superbo sul riso

… le foglie di onchoi con salse a base di sale…

 

Potremmo desumere che l’ ongchoi sia qualcosa di abbastanza simile a una verdura come lo spinacio, tanto che le frasi sostituite con gli spinaci sono deliziosi saltati con aglio, le foglie di spinacio etc. ci suonano abbastanza familiari. 

 

Se invece volessimo sapere se sono più simili tra loro cane e gatto o cane e automobile,  potremmo calcolare quante volte cooccorrono i tre termini con alcune parole del contesto: zampe, pappa, padrone, veterinario cooccorreranno molto spesso sia con gatto e cane, mentre ruote, meccanico, strada, volante molto spesso con automobile e meno spesso con cane e gatto, dal che potrei dedurre che cane e gatto hanno valori di cooccorrenza più simili tra loro -e sono pertanto più simili tra loro- rispetto a cane e automobile.

 

Sul come praticamente venga fatto il conto, le cose sono un po’ più complesse di così, ma l’intuizione alla base è questa. 

Dagli embeddings delle parole si possono creare poi gli embeddings di frase. Come si ottengono gli embeddings di frase a partire dai vettori di parola? Spesso la risposta è semplice: sommando i vettori di tutte le parole - con buona pace dei linguisti, e di secoli di studi sulla formazione del significato delle espressioni complesse.

 

L'ontologia di dominio e la base di conoscenza

Piccola nota esplicativa per il lettore dal background umanistico: con ontologia in informatica non si intende la scienza dell’essere (che è e non può non essere eccetera eccetera), ma più banalmente un sistema di categorie astratte definite per l’organizzazione di un database. 

Se dovessimo organizzare un database con i dati di tutto il personale dell’Università di Pavia, sarebbe ragionevole definire una macrocategoria (detta anche frame) “Persona”. La categoria Persona dovrebbe essere senz’altro provvista di alcuni attributi universali, come la data di nascita e il genere. Ma potrebbe essere altrettanto utile definire delle sottocategorie della nostra categoria “Persona”, ad esempio “Studenti” e “Personale”, provvisti, ad esempio i primi di un attributo “voti”, i secondi di un attributo “stipendio”. Potremmo poi dividere il secondo in altre sottocategorie, come “Professori”, “segreteria”, eccetera eccetera. Questo sistema di categorie è appunto quel che intendiamo con ontologia di dominio. Si ponga attenzione al fatto che l’ontologia non è il database ( Knowledge Base, “la base di conoscenza” da cui il sistema di dialogo attinge le informazioni), ma lo schema astratto di categorie in cui il database è organizzato.

 

Dialogue Manager

Tra la frase dell’utente, di cui abbiamo ricavato il significato calcolandone l’embedding, e la base di conoscenza, ci sono in realtà due passaggi importanti. 

In primo luogo, dalla frase dell’utente dobbiamo infatti ricavare il frame semantico, ossia capire quali sono i “buchi” (slots) che dobbiamo riempire. Ad esempio, se l’utente chiede “Che tempo fa a Pavia?”, lo slot “tempo” (meteo) andrà riempito con le informazioni dal database relative al meteo. 

In secondo luogo, in molti casi abbiamo bisogno di tenere traccia dello stato del dialogo, ossia quanti “buchi” dobbiamo ancora riempire - e, intuitivamente “a che punto siamo” nella conversazione. Non di rado infatti un sistema di dialogo richiede più mosse conversazionali, ovvero sia l’utente sia il sistema devono prendere la parola più volte. Immaginiamo che l’utente dica 

 

“Voglio prenotare un ristorante a Pavia” 

Prima di proporre il nome di un ristorante trovato nel database, il nostro sistema avrà sicuramente bisogno di altre informazioni: che tipo di ristorante vuole, di che fascia di prezzo, in che zona. Occorre perciò tenere traccia di quali slot sono stati riempiti - “prezzo” ce l’abbiamo? Si. “Zona” ce l’abbiamo? No. Allora dobbiamo chiederlo! E così via.

 

Questo passaggio è tutt’altro che scontato. Nella comunicazione sociale tra persone, sappiamo in modo abbastanza naturale quant’è la quantità di informazione che va fornita e richiesta. Non diremmo all’assistente vocale Voglio mangiare in un ristorante cinese di prezzo medio in via Belfiore 10, giacché in quel caso presumibilmente chiameremmo direttamente il locale. Ad una richiesta troppo generica potremmo chiedere più slot di informazioni in una sola mossa conversazionale ( “Cosa vorresti mangiare, e a che fascia di prezzo?” ), ma non chiederemmo tutte le informazioni in una mossa sola, cosa che ci suonerebbe innaturale (Cosa vuoi mangiare, in che zona, a che prezzo e per caso sei vegetariano?).

 

Se facciamo le domande troppo in fretta rischiamo di perderci degli slot e di confondere l’utente; se riempiamo sistematicamente uno slot alla volta rischiamo di annoiare l’utente con una conversazione infinita. Per non parlare di se l’utente potrebbe darci più di uno slot per volta ( “Voglio mangiare cinese in zona stazione”) . Per districarsi in quest’equilibrio difficile, in genere ce la si cava con la statistica: si allena un algoritmo con tanti esempi di dialoghi considerati efficaci, così che l’algoritmo impara a calcolare qual è la mossa conversazionale che più probabilmente porterà a riempire più slot con il minor numero di mosse possibili.  

 

E questi esempi per allenare l’algoritmo come si recuperano? Una metodologia abbastanza utilizzata è quella cosiddetta del Mago di Oz: si fa credere all’utente di stare interagendo con una macchina, mentre le presunte risposte del sistema vengono in realtà prodotte da un operatore (umano) - il Mago  - che “simula” quel che potrebbe fare la macchina. In generale, vale sempre la stessa regola del machine learning: perché il sistema produca dei buoni dialoghi, deve essere allenato con dei buoni dialoghi. Su che cosa siano poi dei buoni dialoghi, se ne può senz’altro discutere - ma in prospettiva computazionale, se degli umani giudicano che il dialogo è naturale, va bene, funziona per gli scopi della conversazione - allora il dialogo va bene.

 

Natural Language Generation

Una volta capito cosa vuole l’utente, riempiti tutti gli slot con le informazioni della base di conoscenza, l’ultimo step è che il nostro sistema di dialogo parli. La fase di Natural Language Generation si basa ancora una volta su un algoritmo che impara qual è il modo migliore per integrare il dato richiesto in una frase grammaticalmente accettabile. Qui però sorge un problema tecnico, nel senso che gli algoritmi di machine learning hanno bisogno di moltissimi dati per imparare, e data la grande variabilità di cose che può essere necessario dire in un dialogo ( C’è il ristorante Da Mario in centro! Ti serve un posto non troppo lontano da via Livorno? Fanno anche pizze per celiaci? Posso prenotare un tavolo a La Perla d’Oriente per le sette) , si usa una strategia detta di delessicalizzazione: si prendono i dialoghi da usare per l’allenamento dell’algoritmo e si sostituiscono i riferimenti concreti con dei segnaposto: C’è il ristorante restaurant_name” in centro; vorrei prenotare non lontano da location”. In questo modo, si riesce in breve a ottenere una buona quantità di dati su cui generalizzare

 

Valutare un sistema di dialogo

Una volta sviluppato un sistema di dialogo, potremmo aver bisogno di chiederci quanto funziona bene. Cosa significa per un sistema di dialogo funzionare bene? 

Una prima risposta è che un sistema dialogo funziona bene se le persone si sono trovate bene: la conversazione ha portato all'obiettivo richiesto? L’interazione è stata piacevole? (le due cose non vanno sempre insieme: se prenotate una visita in ospedale dopo quarantacinque minuti di call center, il goal del dialogo è effettivamente conseguito, ma l’esperienza risulta comunque abbastanza snervante). Il feedback degli utenti è centrale, ma resta il problema che la somministrazione di questionari è uno strumento di una valutazione estremamente soggettiva, nonché lungo e relativamente costoso. 

Il lettore avrà probabilmente sentito parlare del test di Turing: secondo il test di Turing, una macchina può essere ritenuta intelligente se, a carte coperte, un essere umano non è in grado di capire se un output verbale è stato prodotto da un essere umano o da una macchina. Esiste un sistema per valutare i dialoghi che si basa su questa intuizione, con una differenza: a valutare se dietro allo schermo c’è un umano o meno, non è un essere umano, ma un altro algoritmo. Un algoritmo che valuta un altro algoritmo, insomma. In pratica, si allena un algoritmo a distinguere tra dialoghi tra persone e dialoghi tra macchine. Se il nostro sistema di dialogo “inganna” l’algoritmo valutatore, venendo cioè classificato come dialogo tra esseri umani, beh, bene: vuol dire che il nostro sistema di dialogo è (relativamente ai sistemi di dialogo con cui si è allenato l’algoritmo valutatore) buono. Naturalmente, perché la metrica abbia un senso l’algoritmo valutatore va allenato sullo stato dell’arte, cioè sui sistemi di dialogo disponibili al momento. Quel che potremmo sapere da questo test non è tanto se il nostro sistema è buono o non buono in assoluto, ma piuttosto se è più o meno performante rispetto allo stato dell’arte degli attuali sistemi di dialogo. Cosa che è, in prospettiva applicativa, comunque utile.

 

Verso dove si va? 

Si è conclusa questa panoramica sul sistema di dialogo. Non c’è pretesa di esaustività, né dal punto di vista tecnico, né dal punto di vista degli spunti di riflessione. Un’infarinatura sulle intuizioni di base per il funzionamento delle tecnologie di cui facciamo uso può aiutarci a capire meglio, ma da qui si aprono grandi e legittime domande. Per cosa può essere utilizzato il trattamento automatico del linguaggio? In che misura l’intelligenza artificiale è simile all’intelligenza umana, e come si colloca rispetto a questioni sociali ed etiche? Che impatto ambientale ha il costo computazionale, quindi energetico, di molte applicazioni di deep learning?  Alexa e Siri oggi possono appassionarci o meno, ma le riflessioni sul rapporto con linguaggio e tecnologia potrebbero accompagnarci ancora a lungo e dire qualcosa su chi saremo in futuro."

https://www.treccani.it/magazine/chiasmo/lettere_e_arti/Voce/IUSS_Come_funziona_un_assistente_vocale.html