Costruiamo un Chatbot!!!

Costruiamo un Chatbot!!!

MONDO –   Cos’è un chatbot? Seconda parte di Jill Watson e la sua strana storia da assistente di recente nomina in un college in George, USA…

Nel precedente articolo, vi avevo promesso di farvi vedere come creare un semplice chatbot. Iniziamo dal principio: “cos’è un chatbot?”

Un chatbot è un programma più o meno sofisticato volto a conversare con esseri umani. Più il chatbot è fatto bene, tanto più è difficile per l’utente percepire di avere a che fare con un software e non con un suo simile.

Prima di mettere le mani in pasta costruire il nostro chatbot, ci serve definire un ambito di competenze per quest’ultimo (va bene che è una macchina, ma non è onnisciente) e cercare di capire i flussi tipici dell’interazione: il chatbot non è in grado di gestire una conversazione libera, ma segue un grafo con piu’ o meno rami a seconda della complessità che si vuol gestire.

Immaginiamo ad esempio che il nostro scenario sia un chatbot che parli dei film disponibili al botteghino di un cinema. Immaginiamo un paio di flussi tipici.

Interazione tipica numero 1:

Utente :– Buongiorno!

Chatbot :– Buongiorno!

Utente :– Che film ci sono oggi?

Chatbot :– Oggi ci sono in programma ….

Utente :– Mi dice gli orari degli spettacoli?

Chatbot :– Il primo spettacolo è alle 15:30, poi uno ogni 2 ore.

Utente :– Grazie!

Chatbot :– Non c’è di che!

Interazione tipica numero 2:

Utente :– Ciao!

Chatbot :– Buongiorno!

Utente :– C’è qualche film di avventura oggi?

Chatbot :– Si’, oggi c’è il film …

Utente :– Ci sono posti liberi?

Chatbot :– Si’, ci sono dei posti liberi! Quanti gliene occorrono?

Utente :– 4, centrali

Chatbot :– Si’, ci sono 4 posti centrali alla fila 5. Li vuole comprare ora?

Utente :– Perfetto! Inserisca i dati della carta…. Ecco il codice di prenotazione, puo’ ritirare i biglietti direttamente al cinema.

Utente :– Grazie!

Chatbot :– Prego

In base a questi flussi di conversazione, possiamo schematizzare il grafo della nostra conversazione cosi’:

Chatbot

Il passo successivo ora è identificare “intenti” ed “entità”: gli intenti sono gli scopi che l’utente vuole raggiungere; le entità sono le parole chiave che servono al chatbot per capire come dare risposte diverse a fronte di uno stesso intento.

In generale un intento corrisponde a ciascun rettangolo nel disegno qui sopra. Proviamo a quindi ad elencarli:

  • Inizio dialogo
  • Richiesta elenco
  • Richiesta orari
  • Tipo di film
  • Richiesta posti
  • Fine dialogo

Per ciascuno di questi pensiamo ad almeno cinque frasi tipiche che il nostro utente potrebbe usare per farci capire il suo intento.

Ad esempio la “Richiesta elenco” potrebbe essere qualcosa del tipo:

  1. Che film ci sono oggi?
  2. Mi dice la programmazione di oggi?
  3. Che film ci sono il sala oggi?
  4. Che film danno oggi?
  5. Mi sa dire che film ci sono oggi?

Mentre ad esempio “Tipo di film” potrebbe essere:

  1. Ci sono film d’avventura oggi?
  2. Ci sono film di fantascienza?
  3. E’ in programma qualche film romantico nel pomeriggio?
  4. Mi piacerebbe vedere un cartone animato, cosa c’è in programma oggi?
  5. Adoro i film polizieschi, cosa mi consiglia?

…e cosi’ via. Ovviamente piu’ frasi mettete piu’ il vostro chatbot sarà accurato nel capire gli intenti.

Vediamo qualche esempio di entità:

La prima cosa che mi viene in mente è una serie di parole chiave che mi permettano di distinguere tra i vari tipi di film. Ad esempio un’entità puo’ essere “avventura” con i suoi sinonimi, un’altra “drammatico”, un’altra “polizzesco” e cosi’ via.

Ormai siamo pronti per scrivere il nostro chatbot! Prima che andiate nel panico, vi anticipo: no non serve essere dei programmatori; potete risucire a fare un semplice chatbot anche se non avete mai scritto un software.

Ok, dipende dallo strumento che si utilizza per fare il chatbot ovviamente. Il mio preferito è il servizio “Conversation” di IBM Bluemix. Se lo volete provare potete fare un account di prova su IBM Bluemix (cliccando qui).Una volta che vi siete registrati ed avete creato una istanza del servizio “Conversation”, lanciate la sua interfaccia. La prima cosa da fare è creare uno spazio di lavoro: dategli un nome descrittivo, scegliate la lingua e premete il bottone “Create”.

chatbot

In testa alla finestra troverete un tab per gli intenti, uno per le entità ed uno per il grafo del dialogo. Non dovete fare altro che inserire i dati di cui abbiamo parlato sopra.

Ad esempio, aggiungiamo un paio di intenti (il nome degli intenti viene sempre preceduto dal simbolo “#”):

chatbot

Aggiunte tutti gli intenti (ci vuole qualche minuto), passiamo alle entità con i loro sinonimi e le locuzioni che possono essere considerate come sinonimi:

chatbot

Finito con le entità non ci resta che “montare” il nostro chatbot secondo lo schemino sopra disegnato nel tag “Dialogo”:

chatbot

Per ogni nodo del grafo specificate un nome che vi aiuti a capire di cosa tratta, l’intento a cui si riferisce ed una o piu’ risposte equivalenti:

chatbot

Piu’ risposte mettete piu’ il bot sembrerà “umano”: ad interazioni diverse darà risposte diverse ma equipollenti.

Per casi piu’ complessi in cui bisogna distinguere ad esempio in base alle entità che tipo di risposta dare, chiamate in gioco direttamente le entità, come nel caso dei tipi di film:

chatbot

Non rimane altro che eseguirlo!

Per vedere come si comporta, premete l’iconcina in alto a destra ed iniziate a fare domande al bot 😉

Dovrebbe venirne fuori qualcosa del genere:

chatbot

Ovviamente potete rifinire/aggiungere intenti ed entità ad ogni momento.

In casi piu’ complessi vi occorrerà avere un po’ di conoscenze di linguaggi di programmazione, ad esempio per avere l’elenco dei film non scritto direttamente nel chatbot ma recuperato magari dal sito web del cinema. Se vi state appassionando all’argomento vi suggerisco di guardare come costruire qualcosa di piu’ complesso ispirandovi a questo codice di esempio: per farlo, cliccate qui

Buon divertimento!

Rossella De Gaetano
Latest posts by Rossella De Gaetano (see all)

Leave a Reply

Your email address will not be published.