Source: freepik

Google Assistant come insegnante

Google Assistant può diventare un eccellente insegnante: progetta una flashcard Action per esercitare il tuo cinese (o qualsiasi altro linguaggio tu voglia!)

Tutti gli studenti che sono in fase di apprendimento di qualche lingua probabilmente conoscono le flashcard, che sono uno strumento piuttosto diffuso per l’arricchimento del proprio vocabolario.

Utilizzare le card può diventare noioso da soli e Google Assistant può fungere da insegnante, quando può essere messo in condizione di estrarre una card a caso e chiederne la traduzione allo studente (eventualmente dandogli anche dei suggerimenti!)

Anche se utilizzando la console di ActionsOnGoogle rende molto semplice la creazione guidata di flashcard tramite la compilazione di Google Sheets, a volte implementare una Action personalizzata può avere risultati più accattivanti per l’Utente, offrendo mezzi più efficaci per arricchire la User Experience.

Inoltre, una implementazione personalizzata può risolvere alcuni problemi legati alle peculiarità di alcune lingue che si vogliono imparare. Ad esempio il cinese è una lingua tonale: Actions non può gestire l’inglese ed il cinese assieme nella stessa conversazione preservando i toni del cinese, quindi è necessario elaborare una nuova strategia di sviluppo.

Quello che poi risulta molto carino è il fatto che non è necessario che lo sviluppatore si occupi di fare setup del backend, dal momento che le Cloud Functions di Firebase possono essere utilizzate per definire la logica che governa ogni intento!

Design della conversazione

Prima di tutto, è necessario collezionare i file audio di pronuncia delle parole, in modo che si possano usare poi per pronunciare le parole delle card (questi file possono essere messi su Google Cloud Storage, su Github o dovunque si preferisca, a patto che siano poi accessibili sul web).

Lo sviluppo di ogni Action dovrebbe iniziare con la pianificazione della conversazione, così che lo sviluppatore possa essere messo in grado di gestire tutti gli scenari di interazione.

Questa semplice Action accoglierà l’Utente con un messaggio di benvenuto e gli offrirà una parola da tradurre su richiesta.

L’Utente potrà poi dare una risposta: se è corretta, la Action esulterà; in caso contrario, fornirà la traduzione esatta (e magari fornirà un suggerimento sull'uso della parola).

Per avere le idee più chiare, si può mettere tutto in uno schema di conversazione:

Sviluppo della Action

Iniziamo creando un nuovo progetto DialogFlow, ne puoi creare uno accedendo alla console di DialogFlow e facendo click sull’icona a forma di ingranaggio in alto a sinistra nella pagina:

Cliccando sul tasto “Save”, la piattaforma creerà tutte le risorse necessarie all’avvio del progetto.

Intents e Fullfillment sono i concetti fondamentali da capire per portare a termine questo tipo di progetto: gli intents (intenti) sono chiamati quando l’Utente dice qualcosa e la Action riconosce che deve fare qualcosa per soddisfare la richiesta che gli è stata fatta; il fulfillment serve per definire la logica dietro agli intents.

Esplorando l’ambiente, noterai che sono già stati creati due intents di default:

Il “Default Welcome Intent” è il primo intento che viene chiamato quando la Action viene invocata: saluta l’Utente.

Il “Default Fallback Intent” viene chiamato quando la Action non sa cosa fare, perchè non capisce cosa voglia l’Utente.

Per iniziare, clicca su “Fullfillment” nel menu a sinistra ed abilita l’“Inline editor”:

Cancella tutto il contenuto dell’editor ed aggiungi questo codice AoG che permette l’utilizzo delle librerie actions-on-google:

Adesso implementerai il Default Welcome Intent, perchè vogliamo che la Action dia il benvenuto all’Utente con un po’ di musica e vogliamo anche aggiungere delle Suggestion Chip che suggeriscano all’Utente come procedere:

Crea anche un nuovo intent, chiamiamolo: “takeWord”. “takeWord” seleziona una parola a caso dalla lista per il test HSK1 e la mostra all’Utente.

Quando crei l’intento, ti viene richiesto di definire un set di frasi che l’Utente potrebbe dire per attivarlo:

E’ meglio definire un buon numero di frasi o il Machine Learning non sarà in grado di capire quando l’Utente sta richiedendo proprio quella azione (ed invece sentirai l’intent di fallback!)

Implementa il fullfilment per l’intent “takeWord”: per mantenere tutto molto semplice, mettiamo caratteri cinesi e traduzioni in un array di oggetti come questo:

Poi aggiungiamo l’intento alla Map degli intenti:

intentMap.set(‘takeWord’, takeWord);

e poi definiamo la funzione takeWord():

La Action ricorderà la parola selezionata perchè viene aggiunta al contesto (context), così quando l’utente risponde può fare un confronto e decidere se la risposta sia corretta oppure no.

Definisci l’intent “takeWord — answer” come followup di “takeWord”.

“takeWord — answer” sarà addestrato per riconoscere la risposta dello studente:

Procedi implementando il fulfillment per “takeWord — answer”.

Aggiungi anche questo intent alla Map:

intentMap.set(‘takeWord — answer’, takeWordAnswer);

ed implementane la logica:

La funzione estrae la parola selezionata dal context e la confronta con la risposta dello studente, avendo anche cura di separare i significati multipli tramite un separatore predefinito.

La Action riporta se la risposta è corretta o sbagliata e suggerisce all’utente che può chiedere una nuova parola digitando (o dicendo) “More”.

Aggiungi un followup intent “more” a “takeWord” ed assicurati che abbia come input il context takeWordAnswer-followup, per essere sicuro di sciogliere eventuali ambiguità legate alla parola “more”, che può anche essere interpretata come una risposta!

“takeWord — more” è già addestrato con frasi predefinite e devi solo definire il fulfillment. Aggiungere l’intent alla mappa e chiamare la funzione di fulfillment è sufficiente per scegliere un’altra parola!

intentMap.set(‘takeWord — more’, takeWord);

Osserva che questo fulfillment è solo un richiamo della funzione “takeWord”.

Aggiungiamo un ultimo intent “goodbye” per permettere chiusura gradevole della conversazione.

Per chiudere la conversazione, è sufficiente definire una risposta di default.

La Action è addestrata per capire la parole di commiato e far “scattare” l’evento CANCEL.

A questo punto, il codice completo del fulfillment dovrebbe essere questo:

Test della Action

Per testare la Action, fai click su “See how it works in Google Assistant”, a destra nella Console di DialogFlow.

Si aprirà il simulatore e facendo click su “Start testing” potrai invocare la tua Action scrivendo (o dicendo) “Talk to my test app”.

Sentirai la musica introduttiva ed il messaggio di benvenuto!

Richiedendo una parola, la Action te ne fornirà una da tradurre in inglese dal cinese, con i toni corretti (che derivano dal fatto che si è scelto di “dire” la parola utilizzando un file audio!):

Se darai una risposta corretta, la Action si congratulerà!

Dando il comando “more”, la Action fornisce un’altra parola.

Se la riposta è sbagliata, la Action ti correggerà fornendoti la risposta giusta!

Dicendo “goodbye” la conversazione si chiude gradevolmente.

Full-time Human-computer interpreter