Università degli Studi di Padova - SIAGAS

Pagina creata da Tommaso Lupo
 
CONTINUA A LEGGERE
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova
 Dipartimento di Matematica "Tullio Levi-Civita"
                Corso di Laurea in Informatica

    Un chatbot a supporto di un sistema di
                 e-commerce
                         Relazione finale di stage

Relatore
Prof. Tullio Vardanega

                                                        Laureando
                                                     Enrico Canova

                    Anno Accademico 2017-2018
Università degli Studi di Padova - SIAGAS
Enrico Canova: Un chatbot a supporto di un sistema di e-commerce, Relazione finale
di stage, c Febbraio 2018.
Università degli Studi di Padova - SIAGAS
Sommario

Premessa
Il presente documento descrive il lavoro svolto durante il periodo di stage dal laureando
Enrico Canova, presso l’azienda Nextep srl.
Lo stage è stato svolto dal 10 Ottobre 2017 al 5 Dicembre 2017 presso la sede dell’a-
zienda a Cittadella (PD).
L’obiettivo dello stage è stato lo sviluppo di un chatbot per l’assistenza e la semplifica-
zione dalla vendita di un sistema e-commerce.

                                            iii
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova - SIAGAS
Indice

1 L’azienda                                                                                                                         1
  1.1 Profilo aziendale . . . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    1
  1.2 Prodotti e servizi . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
  1.3 Metodologia e strumenti di lavoro .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
       1.3.1 Metodologia . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
       1.3.2 Strumenti . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    5
  1.4 Rapporto con l’innovazione . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7

2 Il progetto                                                                                                                       9
  2.1 Interesse aziendale negli stage . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  2.2 Interesse aziendale nello stage . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
       2.2.1 Introduzione al problema          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  2.3 Obiettivi e vincoli di progetto . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       2.3.1 Obiettivi . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
       2.3.2 Vincoli . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  2.4 Interesse personale nello stage . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17

3 Lo stage                                                                                                                         19
  3.1 Pianificazione . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
  3.2 Studio dei componenti e delle tecnologie                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.2.1 Chatbot . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.2.2 Watson Conversation . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.2.3 Problema dei titoli . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
      3.2.4 Messenger . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
      3.2.5 Botkit . . . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      3.2.6 Node.js . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
      3.2.7 Ambiente di lavoro . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
  3.3 Analisi dei requisiti . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      3.3.1 Casi d’uso . . . . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
  3.4 Progettazione . . . . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      3.4.1 Architettura componenti . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
      3.4.2 Flusso logico . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   29
  3.5 Verifica e validazione . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      3.5.1 Analisi statica . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      3.5.2 Analisi dinamica . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
  3.6 Risultato finale . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      3.6.1 Demo . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
      3.6.2 Risultato . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31

                                           v
Università degli Studi di Padova - SIAGAS
vi                                                                             INDICE

4 Valutazione retrospettiva                                                          35
  4.1 Conseguimento degli obiettivi prefissati . . . . . . . . . . . . . . . . .     35
  4.2 Conoscenze preliminari . . . . . . . . . . . . . . . . . . . . . . . . . . .   36
  4.3 Bilancio formativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   36
Università degli Studi di Padova - SIAGAS
Capitolo 1

L’azienda

In questo capitolo presento l’azienda ospitante, descrivendo quali prodotti e servizi
offre, come è organizzata, come lavora e che rapporto ha con l’innovazione.

1.1     Profilo aziendale

           Figura 1.1: Logo di Nextep: immagine tratta dal sito dell’azienda

   Nextep è una società fondata nel 2000 da Marco De Toni e Mirco Soffia, con sede
attuale a Cittadella (PD).
   Opera nel settore informatico e si occupa di servizi web, web marketing e di infra-
strutture per gestire le informazioni delle aziende, e più in generale ha come obiettivo
quello di migliorare l’efficacia delle strategie di comunicazione web, delle aziende,
dedicando particolare attenzione alla reputazione e all’identità digitale.

    Nextep fa parte del gruppo Allos, insieme ad Allos Italia, Allos Sud Africa, Allos
USA e Zero12.
Allos si occupa di progetti e tecnologie per lo sviluppo del capitale umano, mentre
Zero12 si occupa dello sviluppo di soluzioni mobile e cloud based.
Il gruppo Allos è stato recentemente acquisito da EOH Holdings Ltd, una grande
società sudafricana.

    Nextep ha un organico di circa venti persone, tra dipendenti e collaboratori, con
varie competenze: grafici, sviluppatori, esperti di web marketing e tecnici. Sono presenti
tre gruppi principali di lavoro: quello di sviluppo, quello creativo e quello del supporto

                                            1
Università degli Studi di Padova - SIAGAS
2                                                          CAPITOLO 1. L’AZIENDA

tecnico.
In Nextep c’è un ambiente di lavoro giovane, dinamico ma allo stesso tempo pro-
fessionale, ed è incentivata la collaborazione e la condivisione di conoscenze e idee
tra le persone. Tutto questo favorisce sia la crescita individuale, dal punto di vista
professionale, che la crescita e l’amalgamazione dei vari gruppi di lavoro.

1.2       Prodotti e servizi
Nextep lavora per clienti di diversa tipologia e conformazione, dalla piccola impresa
privata alla multinazionale che si sta espandendo ulteriormente, e con questo offre
svariati prodotti e servizi in base alle esigenze e alle opportunità del mercato e proprie.

Prodotti
La maggior parte dei progetti riguarda la realizzazione di portali e siti web, ma vengono
sviluppati anche diversi altri prodotti, tra cui soluzioni e-commerce e applicazioni
mobile, sviluppo di progetti di virtualizzazione, e storage networking.
Tutti i prodotti hanno alcune caratteristiche comuni, cioè di essere personalizzati,
innovativi, accessibili e improntati nel, e nelle esigenze del, cliente; spesso vengono
introdotte nuove soluzioni di vario genere.

      Figura 1.2: Esempio di portale web realizzato dall’azienda: immagine di Nextep

Servizi
I servizi offerti riguardano principalmente la gestione delle informazioni digitali, della
sicurezza e della disponibilità dei dati e delle applicazioni:
    ∗ Consulenza e formazione di web marketing, social marketing e web analytics;
    ∗ Gestione delle infrastrutture informatiche aziendali;
Università degli Studi di Padova - SIAGAS
1.2. PRODOTTI E SERVIZI                                                                 3

   ∗ Fornitura, rivendita, installazione, configurazione e assistenza di servizi esterni
     (server virtuali, servizi di monitoring, servizi cloud, etc);

   ∗ Servizio clienti e attività di supporto tecnico di infrastrutture ICT e di siti web.

Figura 1.3: Esempio di infrastruttura informatica gestita dall’azienda: immagine di Nextep
Università degli Studi di Padova - SIAGAS
4                                                           CAPITOLO 1. L’AZIENDA

1.3         Metodologia e strumenti di lavoro
Pur avendo lavorato al progetto autonomamente, e quindi non direttamente insieme
al personale, ho potuto constatare alcuni metodi e strumenti di lavoro utilizzati
dall’azienda.

1.3.1        Metodologia
Il team segue una metodologia di sviluppo agile: il framework Scrum.

    Scrum è un framework che ha lo scopo di affrontare complessi problemi adattivi
e collaborativi, per realizzare prodotti di alto valore in modo sia produttivo che creativo.

    Questo approccio permette di essere flessibili di fronte a imprevisti e a cambiamenti
nei requisiti, molto frequenti all’interno di progetti innovativi e personalizzati che
l’azienda offre.

Scrum
Scrum è:1

    ∗ Leggero

    ∗ Semplice da capire

    ∗ Difficile da padroneggiare

                Figura 1.4: Framework Scrum: immagine tratta da scrum.org

    Le caratteristiche principali del framework sono:

    ∗ Il team è formato da:
    1 The   Scrum Guide; Ken Schwaber e Jeff Sutherland; http://www.scrumguides.org /docs/scrumguide/v2017
2017.
1.3. METODOLOGIA E STRUMENTI DI LAVORO                                                   5

        – Product owner: responsabile della gestione dei product backlog e della
          volontà degli stakeholder;
        – Scrum master: responsabile del team, si assicura che le regole di Scrum
          vengano applicate e che il team sia il più produttivo possibile;
        – Development team: team con competenze tecniche, che lavora insieme per
          completare l’incremento di uno sprint.

   ∗ Artefatti dello Scrum:

        – Product Backlog: lista ordinata, in base alle priorità, di tutti i requisiti che
          il prodotto deve soddisfare;
        – Sprint Backlog: lista dei compiti, presi dal Product Backlog, che il team di
          sviluppo deve completare nello sprint corrente;
        – Increment: somma di tutti i requisiti del Product Backlog che sono stati
          completati.

   ∗ Organizzazione del lavoro: il lavoro viene suddiviso in sprint, l’unità di tempo
     dello scrum, con durata e obiettivi prefissati. In uno sprint, che deve avere una
     durata inferiore al mese, si deve realizzare un incremento del prodotto utilizzabile
     e potenzialmente rilasciabile;

   ∗ Riunioni: ce ne sono di quattro tipi (sprint planning meeting, daily scrum, sprint
     review meeting, sprint retrospective), con diversa durata, e hanno l’obiettivo di
     organizzare il lavoro, allineare il team e di retrospezione, per cercare di migliorare
     il processo di sviluppo ad ogni sprint.

Applicazione
In azienda, ogni giorno è previsto uno stand-up meeting all’interno dei vari team di
lavoro, per allineare ogni componente sulla situazione corrente e su come procedere.
Inoltre, a metà giornata avviene un meeting tra tutto l’organico in cui i diversi team
espongono le proprie questioni e si confrontano su quelle che hanno in comune.
Durante il mio tirocinio ho potuto assistere anche a qualche confronto costruittivo tra
il team di sviluppo e lo scrum master, segno di buona sintonia.

1.3.2    Strumenti
Per lo sviluppo e la gestione dei progetti, l’azienda si avvale di alcuni strumenti usati
comunemente dai vari team, mentre in altri casi, a meno di vincoli contrattuali esterni,
lascia libertà di scelta ai singoli componenti (linguaggi di programmazione, software e
framework di sviluppo, sistemi operativi).

Sistemi operativi
Come già detto, non ci sono restrizioni sulla scelta del sistema operativo che preferisce,
di fatto la maggior parte dei dipendenti utilizza macOS, per via dell’usabilità e della
praticità nello sviluppo grafico.
6                                                         CAPITOLO 1. L’AZIENDA

Sviluppo web
Per lo sviluppo web il team di sviluppo si avvale principalmente di due CMS (Content
management system) con il quale può semplificarne la creazione e gestione:

    ∗ Drupal, una piattaforma software, flessibile e scalabile, per la creazione e pub-
      blicazione di siti web, e per la condivisione di contenuti in più linguaggi su
      dispositivi diversi;

    ∗ WordPress, anch’esso una piattaforma software, che consente la creazione e
      distribuzione di siti web facilmente gestibili ed aggiornabili in maniera dinamica.

    Per lo sviluppo condiviso sono inoltre utilizzati:

    ∗ Versionamento
      Viene impiegato Git, un software di controllo di versione distribuito, free e open
      source, per gestire piccoli e grandi progetti con velocità ed efficienza.

                    Figura 1.5: Git: immagine tratta da git-scm.com

    ∗ Ticketing
      Viene adoperato Jira, un software proprietario per l’issue tracking, bug tracking
      e con funzioni di gestione del progetto.

                        Figura 1.6: Jira: tratta da atlassian.com
1.4. RAPPORTO CON L’INNOVAZIONE                                                          7

Supporto

Per il supporto tecnico con i clienti, l’azienda utilizza il software di ticketing Zendesk,
grazie al quale riesce a centralizzare i canali di comunicazione principali e gestire in
modo più efficace e semplice l’assistenza diretta sui prodotti e servizi che offre.

                  Figura 1.7: Zendesk: immagine tratta da zendesk.it

1.4     Rapporto con l’innovazione
Filosofia

Già dal nome, next-step, si capisce qual è il rapporto che ha l’azienda con l’innovazione,
e cioè costitutivo. Essendo un’azienda informatica e prettamente legata al mondo web,
è costantemente a contatto con diverse altre realtà, tecnologie e idee.
Ma le idee vengono coltivate prima di tutto dall’interno, cercando di tenere un clima
lavorativo di condivisione, di libertà: tra i dipendenti e i responsabili c’è un rapporto
fatto di dialogo e confronto, non verticale; e c’è un ambiente aperto e pulito: nel 2001
ha vinto il premio Best Office Award, che evidenzia l’impegno e l’attenzione verso i
lavoratori e le idee.

Rete aziendale

L’innovazione avviene anche grazie all’ampia rete di contatti di aziende con cui lavora,
e dalla loro diversità: dalle piccole alle grandi realtà locali e non.
Lavorando quindi per, e insieme a, svariate realtà, viene spesso a contatto con nuove
esigenze e idee.
Nextep deve essere sempre al passo con le tecnologie e le tendenze del momento, ma
cerca inoltre di coltivare nuovi progetti che le permettano di provare e sperimentare.
Ciò avviene anche grazie al rapporto diretto che ha con le altre aziende del gruppo Allos.
8                                                         CAPITOLO 1. L’AZIENDA

Progetti interni
Durante il mio tirocinio ho potuto notare la presenza di più progetti innovativi che
l’azienda porta avanti, in diversi ambiti, parallelamente ai progetti e lavori quotidiani;
e di molte altre idee che ha in cantire, in aggiunta del progetto stesso del mio stage.
Capitolo 2

Il progetto

In questo capitolo presento il progetto di stage.
Inizio descrivendo il rapporto che l’azienda ha con gli stage; dell’interesse e delle
aspettative riposte in questo stage e dei possibili sviluppi. Illustrando successivamente
il tema del progetto. Faccio una panoramica di quali obiettivi e vincoli aveva il proget-
to. Espongo infine quali sono stati i motivi per cui io ho scelto questa proposta di stage.

2.1      Interesse aziendale negli stage
L’azienda, come detto nel primo capitolo, ripone molta attenzione verso l’innovazione,
e in quest’ottica sfrutta gli stage per lavorare a nuove idee parallelamente ai propri
progetti.
Questo perchè un progetto, come quello di questo stage, per essere affrontato richiede
un impegno considerevole, e in un ottica di un’azienda come la Nextep, rischierebbe di
rallentare o fermare qualche altro progetto di primaria importanza.

2.2      Interesse aziendale nello stage
L’intento primario è quello di realizzare un chatbot, per sperimentarlo in un caso d’uso
concreto e vederne la fattibilità, le difficoltà e i punti di forza.
Il caso d’uso in questione prevedeva che i dati da utilizzare (i dati relativi agli spettacoli
cinematografici) fossero di un cliente della Nextep, e quindi lo stage rappresentava
anche l’opportunità di concretizzarsi in un progetto vero e proprio per un cliente finale.
Questo progetto può diventare interessante anche considerando i chatbot da un punto
di vista dell’andamento nel mercato: molte previsioni dicono che il mercato dei chatbot
crescerà sensibilmente nei prossimi anni, così com’era accaduto nei primi anni duemila
ai siti web.

                                              9
10                                                      CAPITOLO 2. IL PROGETTO

Figura 2.1: Previsione della crescita dei chatbot a confronto con quella avuta dai siti web:
            immagine tratta da chatbotsmagazine.com

Figura 2.2: Confronto della crescita tra chatbot messenger e app nell’Apple Store nel 2016:
            immagine tratta da techcrunch.com

   Questo stage rappresentava però anche l’opportunità di studiare diverse tecnolo-
gie innovative dietro a questo progetto, e cioè l’intelligenza artificiale. L’utilizzo di
intelligenza artificiale viene adoperata, in questo progetto, tramite framework esterni
che ne semplificano e l’utilizzo. Queste tecnologie, da sperimentare, possono risultare
applicabili in molti altri contesti e progetti, e per questo l’andamento di questo stage
può aiutare a fare chiarezza.
2.2. INTERESSE AZIENDALE NELLO STAGE                                                 11

2.2.1    Introduzione al problema
Chatbot

             Figura 2.3: Esempi di conversazioni con un chatbot Messenger

    Chatbot deriva dall’unione di due termini: chat e bot.
Chat sta per conversazione, mentre bot è la riduzione di robot e sta a indicare l’auto-
mazione di un compito.
Chatbot è quindi un servizio software in grado di intrattenere in modo automatico una
conversazione, testuale o vocale, con un utente.
I chatbot, quelli più complessi, utilizzano l’intelligenza artificiale per comprendere
l’intento dell’utente e rispondere, nel modo più opportuno, alle richieste in un dato
contesto.
Essi si sono evoluti nel tempo e oggi vanno oltre la pura conversazione, permettendo
all’utente di eseguire diversi compiti, dai più semplici ai più complessi (per esempio i
sistemi vocali nelle automobili o in altri dispositivi dell’Internet of Things), sempre
attraverso conversazione testuale o vocale (opzionalmente con l’ausilio di pulsanti).
12                                                        CAPITOLO 2. IL PROGETTO

                 Figura 2.4: Struttura base: immagine tratta da upwork.com

     Un chatbot è essenzialmente composto da :
     1. un’interfaccia, spesso grafica, dove si inserisce in input una richiesta e si riceve in
        risposta l’output corrispondente;
     2. un sistema di riconoscimento del linguaggio naturale (NLP), che sfrutta l’in-
        telligenza artificiale per capire al meglio l’intento e il contenuto dell’input
        dell’utente;
     3. un sistema che elabora quanto compreso dal NLP e genera una risposta da
        ritornare all’utente o che svolge un compito richiesto dall’utente.

         Figura 2.5: Esempi di chatbot: immagine tratta da chatbotsmagazine.com

     Alcuni esempi di chatbot:
     ∗ Wheater bot, per ottenere le previsioni meteo di una città;
     ∗ Flights bot, per cercare voli;
     ∗ News bot, per cercare e ricevere le ultime notizie;
     ∗ E-commerce bot, per fare acquisti;
     ∗ Finance bot, per ricevere le novità finanziarie;
     ∗ Support chatbots, per ricevere supporto in uno specifico dominio.
2.2. INTERESSE AZIENDALE NELLO STAGE                                                     13

    Qui elenco alcuni dei vantaggi e degli svantaggi di questa tecnologia, che è ritenuta
da molti il prossimo mezzo di interazione tra clienti e aziende, e che andrà a sostituire
le app mobile, che hanno a loro volta sostituito i siti web(non rimpiazzato).

Vantaggi
  1. Semplicità, si ottiene solo quello che si chiede;

  2. Velocità, in pochi passaggi (messaggi vocali o testuali o pulsanti) è possibile
     ottenere l’informazione cercata o eseguire un’operazione (fare un acquisto, preno-
     tare un tavolo, cercare gli spettacoli di un film, cambiare la luminosità di una
     lampadina, etc);

  3. Immediatezza, non c’è bisogno di imparare una nuova interfaccia per ogni app/sito
     che si utilizza;

  4. Personalizzazione, il bot può rispondere in modo personalizzato in base a chi
     scrive (in base alle informazioni che conosce dell’utente) e in base a come l’utente
     scrive (in base per esempio allo stato emotivo);

  5. Portabilità, un chatbot può essere integrato in svariati dispositivi e ambiti, non
     solo app e siti web (automobili, IoT,..);

  6. Le app di messaggistica istantanea sono le più utilizzate, e i chatbot possono
     sfruttare queste come interfaccia;

  7. Non richiedono molta banda di rete per essere utilizzati (essendo principalmente
     testo);

  8. Possibilità di ricevere notifiche.

Svantaggi
  1. Ancora poco diffusi, l’utente medio spesso non sa come utilizzarli (efficacemente);

  2. Complessità di sviluppo di chatbot ben fatti;

  3. Non possono comprire tutti gli scenari possibili di interazione;

  4. Necessitano di interrogazioni il più preciso possibile, e difficilmente più alla volta;

  5. Se non interpretano correttamente l’input rispondono erratamente;

  6. Non è facile gestire il contesto della conversazione;

  7. Situazioni di stallo, può capitare che l’utente non riesca ad eseguire quanto
     desiderato e permesso dal bot.

    Lo svantaggio principale è che si tratta ancora di una nuova tecnologia, nel senso di
poco diffusa, e questo è un limite sia per chi sviluppa sia per gli utenti.
L’utente medio (meno esperto), che è nuovo con questa tecnologia, potrebbe rimanere
spiazzato se il chatbot non è ben progettato e non evidenzia dei paletti;
l’utente infatti d’inpulso, se non guidato dallo sviluppatore, potrebbe cercare di intera-
gire con il bot nello stesso modo che farebbe con una persona, e non sarebbe quindi
14                                                     CAPITOLO 2. IL PROGETTO

difficile arrivare ad una situazione di stallo.
Quindi l’utente, dopo aver ricevuto in risposta diversi messaggi non corrispondenti alle
aspettative si scoraggia e lascia il bot.
Bisognerebbe allora che ogni bot evidenziasse i paletti, i propri limiti, e cioè che espli-
citasse il fatto di essere un bot e non una persona (non sempre scontato), esplicitasse
il dominio del contesto(sport, news, meteo, etc) e che desse un’idea delle funzionalità
conosciute e avere un atteggiamento proattivo verso l’utente (consigliando).
Sta quindi, spesso, facendo fatica a diffondersi da una parte, dal fatto che l’utente
medio non conosce e non sa utilizzare questa tecnologia, e da un’altra parte dal fatto
che se il bot non è ben implementato rischia che l’utente tenti inutilmente di instaurare
una conversazione normale(persona-persona) o che comunque prima o poi finisca in
una situazione di stallo, e che quindi, dopo il fallimento, decida di abbandonare la
tecnologia e di ritenerla non valida.

Figura 2.6: Le app di messaggistica sono più utilizzate dei social network tradizionali:
            immagine tratta da chatbotsmagazine.com
2.3. OBIETTIVI E VINCOLI DI PROGETTO                                                    15

Figura 2.7: Confronto tra sito web e chatbot: immagine a sinistra tratta da ryanair.com,
            l’immagine a destra è uno screenshot del bot messenger di Skyscanner

2.3      Obiettivi e vincoli di progetto
2.3.1     Obiettivi
Il progetto in questione aveva l’obiettivo di realizzare un chatbot che permettesse,
tramite conversazione in linguaggio naturale (e opzionalmente l’ausilio di pulsanti), di
ricercare e prenotare spettacoli cinematografici.
La ricerca doveva portare a trovare la tripla  di uno spettacolo in
programmazione in un cinema e indirizzare quindi alla relativa pagina di prenotazione
nel sito web del cliente.
Tutto ciò utilizzando come interfaccia quella di un servizio messaggistica istantanea
(es. messenger, telegram, etc), utilizzando il framework Watson di IBM per la parte di
NLP e sempre i servizi di IBM per ospitare il bot.
La pianificazione prevista dal Piano di Lavoro prevedeva una prima parte di studio e
analisi dei servizi e degli strumenti per lo sviluppo del bot, una seconda parte realiz-
zativa e un’ultima parte in cui studiare e analizzare ulteriori servizi e possibilità per
estendere il bot.

   Gli obiettivi dello stage sono stati suddivisi in tre tipologie, per grado di rilevanza.

   1. Obbligatori, obiettivi irrinunciabili e non negoziabili:

        (a) Realizzazione di un bot integrato con i servizi Watson di IBM e con i Web
            Service del cliente;
        (b) Analisi e prototipazione di un sistema di conversazione automatico in
            linguaggio naturale.

   2. Desiderabili, obiettivi che possono essere omessi ma che rappresentano un valore
      aggiunto consistente:
16                                                      CAPITOLO 2. IL PROGETTO

         (a) Realizzazione di una conversazione dinamica, che permetta al bot rispondere
             all’utente contestualmente, e fornendogli le informazioni contenute nei Web
             Service, in base alla richiesta effettuata.
     3. Opzionali, obiettivi che possono essere contrattati in seguito:
         (a) Si richiedeva di sperimentare con alcune tecnologie di intelligenza artificiale
             di Watson.

2.3.2      Vincoli
Vincoli temporali
Lo stage prevedeva una durata massima di 320 ore di lavoro, suddivise in circa 8
settimane.

Vincoli tecnologici
Questo progetto richiedeva di rispettare alcuni vincoli tecnologici minimi:
     1. L’utilizzo del framework Watson di IBM, per la parte di intelligenza artificiale;
     2. Caricare il server del bot nell’account IBM aziendale;
     3. L’utilizzo del linguaggio di programmazione Javascript.
2.4. INTERESSE PERSONALE NELLO STAGE                                                  17

2.4     Interesse personale nello stage
Avendo partecipato all’evento StageIT, organizzato dal corso di laurea in collaborazione
con confindustria Padova, ho potuto incontrare molte aziende, e ho quindi avuto a
disposizione molte proposte di stage da valutare.
Ho cercato allora di sfruttare quest’occasione al meglio, ricercando tra le proposte
quella che mi sembrasse sia più interessante, sia che mi desse la possibilità di fare
esperienza ed imparare, e che ci fosse la possibilità di assunzione.
All’evento ho potuto, tra le altre, fare la conoscenza della Nextep, che mi ha fatto una
buona impressione da subito.

    Figura 2.8: Locandina di StageIT: immagine tratta da informatica.math.unipd.it

   Dopo un’attenta ricerca, ho deciso di scegliere questo stage ritenendolo il più
interessante e vicino alle mie aspettative; qui sotto vado a elencare nello specifico i
motivi della scelta.

  1. Ambito di stage, l’ho trovato molto interessante, si richiedeva di lavorare con
     l’intelligenza artificiale; avevo avuto modo di capire, dai racconti e dai colloqui,
     che l’azienda era giovane e dinamica, e questo era qualcosa che mi intrigava;
     c’erano possibilità di assunzione nel caso di buon esito dell’esperienza.
  2. Ambiente (avevo presente anche zero12) giovane e dinamico, dal primo colloquio,
     non ho avuto dubbi sulla scelta

  3. La natura innovativa del progetto, non è una tecnologia nuova, ma è molto
     poco diffusa in italia e nel nostro territorio e richiede impegno su piu fronti, non
     "basta" sviluppare un applicazione con qualche feature, necessita di un’analisi
     prima di tutto sulla possibile interazione con l’utente e studiare un buon flusso
     di conversazione, perchè l’interazione avviene tramite conversazione e l’utente
     quando scrive non ha presente tutto le possibilità e funzioni presenti;
  4. Tecnologie utilizzate: una su tutte Watson di Ibm, e quindi poter lavorare e
     sperimentare un po’ con l’intelligenza artificiale e l’apprendimento automatico;

  5. Opportunità di assunzione, sin da StageIT mi era stato detto che erano in cerca di
     sviluppatori, e che nel caso di buon esito del tirocinio erano disposti ad assumere.
Capitolo 3

Lo stage

In questo capitolo presento il lavoro svolto, analizzando il prodotto sviluppato, e
illustrando come ho gestito il progetto nelle varie attività svolte.

3.1     Pianificazione
Per raggiungere gli obiettivi del progetto indicati nel Piano di Lavoro, nei limiti previsti,
ho deciso in accordo con il tutor aziendale di suddividere il lavoro nel seguente modo:

                           Figura 3.1: Pianificazione del lavoro

   La prima parte del tirocinio è stata dedicata tutta allo studio: del caso d’uso in
esame, dei bot, dei componenti e delle tecnologie da utilizzare.
La fase successiva verteva all’analisi del flusso di conversazione (lo schema logico della
conversazione del bot), di come funziona, come strutturarla e come realizzarla.
Dopo le fasi di studio e analisi si iniziava con la realizzazione della parte cosiddetta
statica, e in un secondo momento di quella dinamica. Con conversazione statica intendo
quella che si limita a fornire una risposta testuale fissa, non utilizzando i dati forniti
dei Web Service dinamicamente.
L’ultima parte riguardava gli obiettivi opzionali, che si sono poi evoluti, nel senso che
sono subentrati altri obiettivi: è stata effettuata una demo con il cliente; è stata fatta
la migrazione del bot interamente all’interno del framework di IBM.
   Mi sono approciato alla pianificazione prudentemente, perchè l’argomento in questio-
ne, i chatbot, mi era sconosciuto e non avevo idea delle problematiche che avrei potuto
incontrare; questo approccio si è rivelato d’aiuto, consentendomi di avere poi sufficiente
tempo per risolvere i successivi problemi che ho incontrato durante lo sviluppo.

                                             19
20                                                          CAPITOLO 3. LO STAGE

3.2      Studio dei componenti e delle tecnologie
3.2.1      Chatbot
Come prima cosa, per poter realizzare un chatbot, ho dovuto studiare cos’è un bot,
come funziona e come è composto.
   Qui elenco alcune buone prassi che andrebbero seguite quando si sviluppa un bot,
per renderlo più usabile da parte di un utente meno esperto:
     ∗ Bisogna iniziare la conversazione con una presentazione, in cui si esplicita al-
       l’utente che si sta interagendo con un software, il dominio di applicazione e le
       funzionalità principali, cosicchè l’utente può rendersi conto dei limiti del bot e
       quindi di cosa può o meno chiedere;
     ∗ L’utente va guidato: quando non si capisce cosa l’utente vuole dire, bisogna
       rilanciare la conversazione e non limitarsi al "scusa, non ho capito", cercando di
       fare delle domande all’utente per capirne meglio l’intento; approccio proattivo.

3.2.2      Watson Conversation

              Figura 3.2: Logo di Conversation: immagine tratta da ibm.com

    Per cercare di comprendere l’intento e le entità di una frase di un utente vengono
utilizzati software di intelligenza artificiale chiamati Natural Language Processing, cioè
di elaborazione del linguaggio naturale.

    Per il mio progetto è stato deciso di utilizzare il servizio Conversation del framework
Watson di IBM.
Il tutor aziendale ha preferito il servizio Conversation ad altri (di Google, Facebook,
Microsoft, Amazon, etc) perchè lo ha ritenuto sia più semplice da utilizzare, e quindi da
sfruttare, ma allo stesso tempo uno dei migliori nel mercato, più completo e facilmente
integrabile con molti altri servizi.

Flusso di conversazione
Conversation cerca di comprendere l’input dell’utente attraverso l’individuazione di
due elementi all’interno di una frase: l’intento e le entità.
L’intento di una frase è lo scopo, l’obiettivo finale: per esempio ordinare qualcosa, voler
accendere o spegnere qualcosa, cercare degli spettacoli o più semplicemente salutare.
Le entità sono i soggetti rilevanti di una frase: se per esempio un oggetto, un colore,
una data; se l’intento è voler accendere/spegnere qualcosa, l’utente potrebbe indicare
anche cosa, come una lampadina o la radio.
3.2. STUDIO DEI COMPONENTI E DELLE TECNOLOGIE                                           21

     Figura 3.3: Esempio di flusso di conversazione: immagine tratta da bluemix.net

   Per far riconoscere intenti ed entità al servizio, bisogna spiegargli il significato di
questi, e questo lo si fa tramite esempi di input che corrispondono ad un intento o entità.

   Una volta immessi nel sistema intenti ed entità si crea il flusso logico della con-
verszione, perchè quello che distingue una conversazione da un semplice Frequently
Asked Questions è il contesto. Grazie al contesto è possibile collegare l’input corrente
dell’utente con quello precedentemente detto.
Se per esempio un utente scrive "rosso", potrei riconoscere che "rosso" corrisponde
ad un’entità di tipo colore, ma presa da sola non vuol dire niente. Se allora riesco a
contestualizzare quell’input, e quindi so che l’utente vuole specificare il colore di un
paio di scarpe, allora "rosso" assume tutt’altro significato.
Così, in conversation è possibile creare dei flussi di conversazione con il quale guidare e
dare un contesto alle conversazioni.

   Per una gestione più avanzata del contesto è possibile gestirli tramite JSON.

                Figura 3.4: Pagina degli intenti del servizio Conversation
22                                                            CAPITOLO 3. LO STAGE

                  Figura 3.5: Pagina delle entità del servizio Conversation

     Figura 3.6: Pagina in cui gestire i flussi di conversazione del servizio Conversation

Limiti
I principali limiti del servizio sono relativi al fatto che è un servizio nuovo, è stato
presentato nel 2016 anche se sostituisce un altro servizio (Watson Dialog Service), ed è
in costante aggiornamento, non è raro che da un giorno all’altro vengano apportate
delle modifiche al sistema. La documentazione è poca e spesso incompleta.

3.2.3      Problema dei titoli
Nella ricerca di un film tramite un bot, è ragionevole che un utente non conosca, o non
si ricordi, il titolo completo del film, ed è quindi ragionevole che riesca a trovare quello
che cerca tramite parole chiave.
La premessa a questo problema è che l’interazione principale, tra utente e bot, avvenga
mediante linguaggio naturale, e non tramite, più o meno lunghi, elenchi di opzioni da
selezionare.

    Un’altra premessa da fare è che tutti i dati relativi alle schede dei film, ai cinema,
agli spettacoli erano disponibili tramite Web Service con dati formattati in JSON, con
accesso è chiaramente solo in lettura.
3.2. STUDIO DEI COMPONENTI E DELLE TECNOLOGIE                                             23

   Riporto qualche titolo trovato per mostrarne la formattazione:

   ∗ (3D) THOR RAGNAROK

   ∗ (NO 3D) THOR RAGNAROK

   ∗ (NO 3D) STAR WARS - GLI ULTIMI JEDI

   ∗ V.O. STAR WARS - GLI ULTIMI JEDI

   ∗ (NO 3D) BLADE RUNNER

   ∗ LOVING VINCENT

   ∗ MY LITTLE PONY: IL FILM

   ∗ LO SCHIACCIANOCI - ROYAL BALLET

   ∗ IT

   ∗ AMORI CHE NON SANNO STARE AL MONDO

   Ragionevolmente, un utente per cercare uno di questi film utilizzerà queste parole
chiave:

   ∗ il film con titolo "(NO 3D) THOR RAGNAROK" è sensato che un utente lo
     cerchi semplicemente con "thor";

   ∗ il film con titolo "(NO 3D) STAR WARS - GLI ULTIMI JEDI" è sensato che un
     utente lo cerchi semplicemente con "star wars" o "gli ultimi jedi" o "ultimi jedi";

   ∗ il film con titolo "MY LITTLE PONY: IL FILM" è sensato che un utente lo
     cerchi semplicemente con "little pony" o "pony" e assolutamento non con "il
     film";

   ∗ il film con titolo "LOVING VINCENT" è sensato che un utente lo cerchi con
     "van gogh", che è il soggetto del film.

    Il servizio conversation riconosce solo precise entità (con al massimo un carattere di
differenza) e quindi non può aiutare molto nella risoluzione del problema.

    Intanto, per aiutarsi nel riconoscesre, è possibile utilizzare alcune operazioni statiche
nei titoli, per la pulizia delle stringhe andando quindi a togliere (NO 3D) e (3D) e V.O.,
e aggiungendo come sinonimi dei titoli: il titolo(senza sottotitolo) o solo il sottotitolo
per esempio:

   ∗ come sinonimi di V.O. STAR WARS - GLI ULTIMI JEDI è possibile mettere:

   ∗ STAR WARS - GLI ULTIMI JEDI, (senza V.O.)

   ∗ STAR WARS(solo prima parte)

   ∗ GLI ULTIMI JEDI
24                                                           CAPITOLO 3. LO STAGE

E così si possono fare anche altre operazioni statiche per aiutare il servizio nel ricono-
scimento delle entità.

    Ma prendendo due titoli simbolici come THOR RAGNAROK e LOVING VINCENT,
più di utilizzare alcune operazioni statiche non si riesca ad arrivare al risultato sperato.
    Fatte tutte le premesse al problema, affronto la soluzione adottata.
Un altro approccio poteva essere quello di cercare le entità, qualunque, nell’input e
confrontarle con i dati dei Web Service, ma come già detto, è un problema ancora
irrisolto di intelligenza artificiale quello del riconoscimento delle entità (se per esempio
un utente scrive "mostrami i dettagli dell’ultimo film su van gogh a silea" quale entità
dovrei confrontare con i Web Service?). L’approccio inverso, e cioè quello di Conversa-
tion è quello di cercare le entità che già conosco nell’input, ma come detto i titoli del
film non aiutano affatto.

    Così, dopo una impegnativa ricerca, insieme anche al tutor aziendale, ho deciso
di utilizzare un altro servizio di machine learning. Questo servizio (di cui non farò il
nome) viene sfruttato nel seguente modo:
vengono caricate, e aggiornate periodicamente, le schede dei film (titolo, attori, registi,
trama film) associate ognuna ad un film, ho poi istruito il servizio con diversi esempi
sul come andare a trattare i dati nelle ricerche, e ho attribuito ad ognuno dei dati delle
schede un importanza (per esempio il titolo è più rilevante di un informazione trovata
nella trama).
Quando un utente cerca un film, il servizio Conversation cerca, come prima, di trovare
le entità statiche conosciute (nome completo titoli film, registi, attori), e se non vengono
trovate entità, allora utilizzo l’altro servizio che, analizzando l’input, cerca di capire se
corrisponde ad un film (mi dice quale o quali e con che rilevanza).
In base alla rilevanza trovata decido se il risultato è pertinente o meno.
Questo servizio viene quindi chiamato solo d’ausilio a Conversation, quando non trova
corrispondeze, e cerca di trovare corrispondenza tra i film conosciuti e l’input da
analizzare.

3.2.4     Messenger

            Figura 3.7: Logo di Messenger: immagine tratta da messenger.com

   Come interfaccia e sistema di messaggistica del bot, dopo averne esaminato diversi,
ho deciso di utilizzare Messenger, principalmente per questi motivi:
     ∗ Diffusione, Messenger è uno dei software di messaggistica più diffusi al mondo,
       con oltre 900 milioni di utenti;
3.2. STUDIO DEI COMPONENTI E DELLE TECNOLOGIE                                            25

   ∗ Bot orientati alle aziende, Facebook, l’azienda che possiede Messenger, dal 2016
     ha deciso di introdurre e investire molto sui bot e nella propria piattaforma;

   ∗ Supporto e documentazione.

   Per utilizzare Messenger ho dovuto creare una pagina Facebook, creare un app
Facebook e associare il suo webhook al server del bot.

3.2.5     Botkit
Durante lo sviluppo, ho deciso di integrare il bot con il middleware di IBM Conversation
che a sua volta estende il botkit. Il botkit è un middleware, sviluppato da Howdy, che
permette di semplificare l’implementazione di un bot, di rendere più agevole la gestione
e l’estensione delle interfacce, di rendere il bot sia multi-utente che multi-thread. Con
questa integrazione ho reso il codice anche più manutenibile e di facile lettura.

Figura 3.8: Flusso logico di un chatbot e integrazioni del botkit: immagine tratta da Google
            immagini

3.2.6     Node.js
Come linguaggio di programmazione ho scelto di utilizzare NodeJS, per la semplicità
con cui è possibile implementare un server e perchè è uno dei tre linguaggi ufficialmente
disponibili per integrare il framework Watson di IBM (insieme a Python e Java).

    Node.js è una piattaforma di run-time JavaScript per eseguire JavaScript lato server,
è basato sul motore JavaScript V8 di Chrome.
Node.js usa un modello I/O non bloccante e orientato agli eventi, che lo rende un
framework leggero ed efficiente.
L’ecosistema dei pacchetti di Node.js è npm, il più grande ecosistema di librerie open
source al mondo.
Ho utilizzato la versione 8, di Node.js, per il supporto di alcune funzionalità aggiuntive
di sincronizzazione dell’esecuzione.
26                                                          CAPITOLO 3. LO STAGE

Figura 3.9: Esempio di server minimale in node.js: immagine tratta da Google immagini

Express.js

Express è un framework per Node.js: è flessibile, leggero, e fornisce una serie di funzioni
avanzate per le applicazioni web e per dispositivi mobili. Grazie a Express.js è possibile
implementare un server web in pochissime righe.

3.2.7     Ambiente di lavoro

           Figura 3.10: Logo di Heroku: immagine tratta da Google immagini

    Durante la fase di studio delle tecnologie ho iniziato a configurare l’ambiente di
lavoro, così da imparare e provare i vari componenti ed essere pronto per quando avrei
iniziato lo sviluppo. Come ambiente di hosting ho inizialmente scelto Heroku, perchè
lo conoscevo già un po’ e l’account base è gratuito.

   A fine tirocinio mi è stato chiesto di migrare il bot nei server IBM, nell’account
aziendale.

Strumenti

Per la codifica ho utilizzato il software Atom. Atom è un editor di testo e IDE
open source sviluppato da GitHub. L’ho utilizzato insieme ad alcuni plugin tra cui
vim-mode-plus per poter utilizzare i comandi di vim, e JSHint per l’analisi statica di
Javascript.
3.2. STUDIO DEI COMPONENTI E DELLE TECNOLOGIE                                      27

                Figura 3.11: Editor Atom: immagine tratta da atom.io

Livello di autonomia
Ho svolto il progetto in completa autonomia. Ho avuto la possibilità di confrontarmi
quotidianamente, in caso di necessità, con il tutor aziendale per eventuali problemi e
scelte incontrate.
28                                                            CAPITOLO 3. LO STAGE

3.3       Analisi dei requisiti
Durante la fase preparatoria e durante la prima fase di studio dello stage, ho cercato di
capire quali potessero essere i requisiti riguardanti le funzionalità principali. Il requisito
principale era quello di arrivare alla tripla  e relativa pagina
di prenotazione. Dopo aver preso dimestichezza con il servizio Conversation e aver
visto come strutturare un flusso di conversazione, visto il tempo stringente, ho deciso
con il tutor aziendale di concentrarmi su poche ma funzionali e funzionanti funzionalità.
Queste funzionalità avevano quindi lo scopo di rendere il bot sufficientemente completo,
cioè da riuscire a raggiungere la pagina di prenotazione di uno spettacolo attraverso il
bot, ed esemplificativo di quanto ottenibile.

3.3.1      Casi d’uso
Sono state individuate le seguenti funzionalità:
     ∗ Ricerca film;
     ∗ Ricerca trailer;

     ∗ Ricerca Spettacoli.

                       Figura 3.12: Diagramma del caso d’uso principale
3.4. PROGETTAZIONE                                                                     29

3.4     Progettazione
3.4.1    Architettura componenti

                      Figura 3.13: Architettura generale del bot

   Come già anticipato, i componenti che fanno parte e collaborano con il sistema
sono:
  1. Facebook Messenger, il servizio di messaggistica, dal quale l’utente può scrivere
     e dove riceve le risposte;
  2. Web Service, servizio che fornisce i dati del cliente, disponibili in formato JSON;
  3. IBM Bluemix (o Watson), il framework contenenti il servizio di NLP Conversation
     e l’altro servizio di ausilio;

  4. Server del bot, il cuore del bot, dove le informazioni vengono smistate e processate.

3.4.2    Flusso logico
   ∗ L’inizio dell’interazione avviene da parte dell’utente che, tramite l’interfaccia di
     Messenger, scrive un messaggio;
   ∗ Il messaggio, tramite webhook, viene spedito al server;
   ∗ Il server quando riceve un messaggio lo processa, e in base alla tipologia di
     messaggio(messaggio di testo normale, messaggio con payload, etc) decide cosa
     farne: può inviare il testo al servizio Conversation per comprenderne il contenuto.
   ∗ Conversation può a sua volta, in base al contesto della conversazione: generare
     una risposta automatica oppure richiedere l’ausilio o del servizio di supporto di
     Watson o comunicare al server che sono richiesti i Web Service;
   ∗ Se c’è bisogno il server preleva i dati da Web Service;

   ∗ Il server del bot, infine, genera il messaggio di risposta e lo invia a Messenger
     che lo visualizzerà all’utente.
30                                                          CAPITOLO 3. LO STAGE

3.5       Verifica e validazione
Durante lo sviluppo ho svolto anche le attività di verifica e validazione.

3.5.1      Analisi statica
Per l’attività di verifica ho utilizzato il plugin JSHint di Atom, uno strumento che
permette di fare l’analisi statica del linguaggio Javascript. JSHint visualizza eventuali
error e warning presenti nel codice e aiuta, sempre con dei warning, a uniformare e
rendere più leggibile il codice.

3.5.2      Analisi dinamica
L’analisi dinamica del software è stata svolta tramite il framework di test dinamici,
per Node.js, Mocha.js, e tramite esecuzione del sistema completo.
Con Mocha.js sono riuscito a svolgere la maggior parte dei test dinamici base, ma
per test più completi, comprendenti tutte le integrazioni, ho dovuto ripiegare tramite
l’esecuzione del server, questo per via delle diverse integrazioni e dei diversi livelli di
sincronizzazione che, data la mia inesperienza con Mocha.js, mi hanno impedito di
automatizzare tutti i test.
I test hanno riguardato le principali funzionalità e integrazioni:
     ∗ Integrazione tra server bot e IBM Conversation;
     ∗ Integrazione tra server bot e l’altro servizio di IBM (ausiliario a Conversation);
     ∗ Integrazione tra server bot e Facebook Messenger;
     ∗ Integrazione tra server bot e Web Service;
     ∗ Caricamento e aggiornamento dei dati dei WS in Conversation;
     ∗ Caricamento e aggiornamento dei dati nell’altro servizio di IBM (ausiliario a
       Conversation);
     ∗ Invio e ricezioni messaggi in Messenger;
     ∗ Ricerca trailer;
     ∗ Ricerca film;
     ∗ Ricerca spettacoli.
  Per le funzionalità principali ho eseguito diversi test sia per verificarne il funziona-
mento che la correttezza generale che della correttezza del contesto.

3.6       Risultato finale
Il risultato finale è un chatbot funzionante, risiedente nei server di IBM, che è integrato
con Messenger, i Web Service e il framework Watson di IBM.
Le funzionalità presenti finali non sono molte, ma hanno lo scopo di illustrare il funzio-
namento e l’applicabilità degli strumenti e in generale del bot. Certamente per essere
3.6. RISULTATO FINALE                                                                   31

usabile il bot avrebbe bisogno di altro lavoro per renderlo soprattutto più completo, ma
già nello stato attuale è possibile, mediante linguaggio naturale, arrivare alla pagina di
prenotazione di un film, in un cinema in una particolare data.
Le funzionalità presenti permettono quindi di cercare film, vedere i film e cinema
presenti, cercare i video dei trailer e cercare gli spettacoli presenti, indicando prima il
film che si vuole vedere e poi il cinema dove lo si vuole vedere.

3.6.1     Demo
Dopo che è iniziato lo stage si è presentata l’opportunità di effettuare una demo con il
cliente. Si è così deciso di prestare attenzione alla demo a discapito di qualche giorno
di normale svolgimento rispetto al piano di lavoro. La demo si è svolta in data 9
novembre.« Questa data ha ovviamente rappresentato un momento importante, a cui
ho prestato grande attenzione, infatti nei giorni antecedenti ho cercato di lavorare per
rendere il bot, e le funzionalità presenti fino a quel momento, il più presentabile e
funzionale possibile.
La demo è avvenuta tra il tutor e il cliente; il tutor al ritorno mi ha riportato che è
andata bene, non ci sono stati problemi, il cliente è rimasto contento di quanto visto e
si è inoltre dimostrato favorevole al proseguimento del progetto (anche dopo la fine del
tirocinio).

3.6.2     Risultato
Qui sotto vengono proposte alcune immagini dimostrative del risultato ottenuto.
Si noti, nelle prime tre immagini, come il bot riesca a riconoscere i film cercati, pur
non fornendo entità precise o isolate. Nell’immagine seguente ci richiede il video del
trailer di un film.
Nelle ultime due immagini si mostra l’interazione che va dalla ricerca del film al link
verso la pagina di prenotazione "prenota spettacolo", in questo caso si sfruttano anche i
pulsanti che sono utilizzati per velocizzare l’interazione una volta trovato il film. Tutte
le immagini visualizzate dal bot portano ai dettagli del film nel sito del cliente.
32                                           CAPITOLO 3. LO STAGE

     (a)                                             (b)

                            (c)

           Figura 3.14: Esempi di ricerche di film
3.6. RISULTATO FINALE                                            33

               Figura 3.15: Esempio di richiesta di un trailer
34                                              CAPITOLO 3. LO STAGE

         (a)                                        (b)

     Figura 3.16: Esempi di ricerca degli spettacoli presenti
Capitolo 4

Valutazione retrospettiva

In questo ultimo capitolo faccio un bilancio dello stage, iniziando da un confronto tra
gli obiettivi prefissati e quelli soddisfatti.
Illustro cosa ho appreso, sia a livello professionale che formativo, e cosa invece mi è
mancato.
Concludo con una valutazione personale sia sull’esperienza di stage che del corso di
studi.

4.1      Conseguimento degli obiettivi prefissati
Durante la fase di pianificazione avevo concordato con l’azienda una lista di obiettivi da
raggiungere per la realizzazione del progetto. Durante il tirocinio alcuni obiettivi però
sono cambiati, alcuni si sono aggiunti e altri sono venuti meno, questo per la natura
innovativa del progetto in un arco di tempo ridotto. Qui sotto elenco gli obiettivi,
suddivisi per livello di priorità strategica, con i corrispondenti risultati.

    Ritengo che il progetto di stage abbia avuto buon esito, soddisfando tutti i requisiti
obbligatori e desiderabili prefissati, pur avendo trovato degli ostacoli importanti (per
esempio il problema dei titoli).
Sono riuscito a ottenere un bot che è sia funzionante e sufficientemente completo, cioè
che permette di arrivare alla tripla  attraverso la conversazione
con il bot.
Nella parte conclusiva ho caricato il bot, con l’account aziendale, nei server IBM e
reso così disponibile anche a terzi; il tutor aziendale è rimasto soddisfatto del risultato
finale ottenuto.
Con più tempo sarei sicuramente riuscito a rendere il bot più completo, ma conside-
rando i problemi incontrati e l’opportunità e l’impegno rappresentati dalla demo, mi
ritengo più che soddisfatto.
La demo, in cui è stato presentato un prototipo con alcune delle funzionalità sviluppate,
è andata bene, il cliente si è dimostrato interessato all’idea del progetto, è rimasto
contento di quanto visto e ha inoltre dato la disponibilità a continuare il progetto una
volta finito il tirocinio.
Con l’integrazione del middleware botkit sono riuscito anche a rendere il bot: più esten-
dibile, è possibile ora integrare il bot con altri servizi e altre interfacce di messaggistica
molto semplicemente; più manutenibile, riutilizzando codice diffuso e supportato da

                                             35
36                               CAPITOLO 4. VALUTAZIONE RETROSPETTIVA

                       Tabella 4.1: Tabella degli obiettivi raggiunti

 Tipologia        Obiettivo                                                   Esito
 Obbligatorio     Studio del caso d’uso, delle componenti e degli             Soddisfatto
                  strumenti
 Obbligatorio     Realizzazione di un bot integrato con i servizi Watson      Soddisfatto
                  di IBM e con i Web Service del cliente;
 Obbligatorio     Analisi e prototipazione di un sistema di conversazione     Soddisfatto
                  automatico in linguaggio naturale
 Obbligatorio     Studio del caso d’uso, delle componenti e degli             Soddisfatto
                  strumenti
 Desiderabile     Realizzazione di una conversazione dinamica, che per-       Soddisfatto
                  metta al bot rispondere all’utente contestualmente, e
                  fornendogli le informazioni contenute nei Web Service,
                  in base alla richiesta effettuata
 Opzionale        Migrazione del bot nei server IBM                           Soddisfatto
 Opzionale        Studio di altri servizi di machine learning                 In parte

grandi aziende; multi-utente e multi-thread.

4.2      Conoscenze preliminari
Pur riuscendo a raggiungere gli obiettivi prefissati, ho incontrato difficoltà su più fronti:
     ∗ Legate al bot, problema dei titoli, quando ho iniziato non sapevo cosa aspettarmi
       e questo problema mi ha richiesto un notevole impegno per affrontarlo;
     ∗ Difficoltà in alcune integrazioni dei servizi e nell’utilizzo di alcune tecnologie
       relative al bot, date dalla scarsa documentazione;
     ∗ Javascript, dato dalla mia conoscenza basilare del linguaggio, e in particolar
       modo di Node.JS.
    Ho incontrato difficoltà in particolar modo nella gestione dei flussi asincroni e nel
dover spesso sincronizzare funzionalità (esterne) asincrone, per poter inviare i messaggi
all’utente solo quando effettivamente pronti. Ho quindi dovuto impiegare diverso tempo
per capirne i meccanismi e capire come risolvere questi problemi.
Credo quindi che questo sia un tema importante che dovrebbe essere affrontato anche
in aula, vista la grande diffusione del linguaggio Javascript e di linguaggi con caratteri-
stiche simili.

4.3      Bilancio formativo
Ritengo di aver imparato molto, sia a livello di tecnologico che più in generale formativo.
Questa è stata la mia prima vera esperienza lavorativa, in autonomia, in cui ho dovuto
organizzarmi da solo, al meglio, per cercare di gestire il lavoro da fare e i problemi che
ho incontrato.
4.3. BILANCIO FORMATIVO                                                                37

   Durante questo periodo sono quindi riuscito a venire a contatto con alcune tecnologie
o consolidarne altre che già conoscevo. In particolare:

   1. I chatbot, cosa sono, come funzionano, perchè potrebbero diventare il futuro
      dell’interazione web e i flussi di conversazione;
   2. Framework Watson di IBM, in cui ho potuto studiare e provare diversi servizi
      tra cui Conversation, grazie al quale è possibile realizzare un bot;

   3. Node.JS, ho potuto conoscerlo meglio, dovendo sviluppare e fare molte integra-
      zioni, ho potuto scendere maggiormente nel dettaglio;
   4. Sistema di messaggistica Messenger, middleware botkit, integrazione con Web
      Service.
Infine, mi ritengo soddisfatto sia dell’esperienza di stage che dell’esperienza universi-
taria. Grazie a questo stage ho potuto fare un’esperienza lavorativa, che mi da più
sicurezza nei miei mezzi e mi ha dato l’opportunità di affacciarmi concretamente al
mondo del lavoro.
Aver lavorato in completa autonomia però, seppur potendomi confrontare con il tutor
aziendale, è stata sia una cosa positiva, perchè ho dovuto gestirmi e risolvere i problemi
da solo, ma anche un limite, perchè non ho avuto l’occasione di lavorare insieme ad
altre persone del mondo informatico e di apprenderne suggerimenti e metodologie.
Riguardo all’università, quello che invece credo di aver imparato maggiormente è, più
che una serie di conoscenze, la propensione allo studio di nuove tecnologie e l’approccio
verso nuove conoscenze.
Ho comunque imparato molte cose e fatto una grande esperienza di vita.
Per concludere, l’azienda, a tirocinio concluso, mi ha proposto di continuare a collabo-
rare con loro per andare avanti nella realizzazione del progetto.
“La risposta alla domanda fondamentale sulla vita, l’universo e tutto quanto è . . . 42.
                                   Sì, ci ho pensato attentamente ed è questa, 42.”
                                                                    Pensiero Profondo

Ringraziamenti

Innanzitutto, vorrei esprimere la mia gratitudine al Prof. Tullio Vardanega, relatore
della mia tesi, per l’aiuto e il sostegno fornitomi durante la stesura del lavoro.

Ringrazio Marco De Toni, tutor aziendale del mio stage, e tutti i dipendenti della
Nextep per avermi accolto.

Desidero ringraziare con affetto i miei genitori, Ivana e Lorenzo, per avermi dato
quest’opportunità, per la fiducia e semplicemente per tutto.

Un altro particolare ringraziamento va a mio fratello Marco, per essere sempre stato
un esempio per me.

Ringrazio inoltre i miei amici per tutti i momenti intensi passati insieme e tutti i
compagni con cui ho condiviso quest’avventura.

Un ultimo saluto va alla mia bellissima nipotina Emilia.

Padova, Febbraio 2018                                                   Enrico Canova

                                          39
Puoi anche leggere