CHATBOT #1 - Primi passi: recupero e analisi del dataset

In questa sezione esploriamo brevemente il dataset che useremo per l'addestramento del chatbot che ci apprestiamo a creare.

Il corpus di conversazioni potete scaricarlo qui. Si tratta del Cornell Movie Data Corpus, ovvero un set libero di conversazioni intrattenute da attori prese da vari film.

Cliccando qui potete effettuare il download dell'archivio. Sono conversazioni estratte dai copioni "raw", decine di migliaia di interazioni

Una volta scaricato lo zip, potete decomprimerlo in una cartella a vostra scelta, il nome del file dovrebbe essere 

Personalmente mi sono creato una cartella apposita sotto C:\studio\machine-learning\chatbot.
Una volta decompresso l'archivio, entrate pure nella nuova cartella 

C:\studio\machine-learning\chatbot\cornell movie-dialogs corpus




I dati che useremo per l'addestramento sono contenuti nei file 

movie_conversations.txt
movie_lines.txt

Navigate liberamente negli altri file per rendervi conto di ciò che avete realmente scaricato: c'è un interessante articolo, metadati, descrizioni varie, e così via. 

il file movie_lines.txt contiene alcuni estratti dei dialoghi presenti nei film, qui sotto un esempio: 


L1045 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ They do not!
L1044 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ They do to!
L985 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ I hope so.
L984 +++$+++ u2 +++$+++ m0 +++$+++ CAMERON +++$+++ She okay?
L925 +++$+++ u0 +++$+++ m0 +++$+++ BIANCA +++$+++ Let's go.


Si tratta di un file strutturato contenente cinque colonne delimitate da un separatore fisso, la stringa "+++$+++".  Vediamo cosa contengono le colonne: 

  1. La prima è semplicemente un ID che identifica la riga. Niente di più che una chiave primaria del record.
  2. La seconda colonna identifica l'utente; nel caso di "u0" stiamo parlando dello "user 0". 
  3. La terza colonna identifica il film, nell'esempio riportato "m0".
  4. La quarta colonna identifica il nome dell'attore. Nell'estrattio vediamo un dialogo tra Bianca e Cameron. Questa colonna chiaramente non verrà utilizzata per l'addestramento del chatbot.
  5. L'ultima colonna è il testo vero e proprio, che utilizzeremo per l'addestramento del chatbot.


Tanto per essere chiari, prendiamo l'esempio sopra riportato: nella prima riga, Bianca, associata all'utente "u0", dice: "They do not!" nel film "m0".
Passando alla riga successiva, Cameron, associato all'utente "u2", sempre nel film "m0", risponde "They do to!".
E così via.

Adesso diamo invece uno sguardo al file movie_conversations.txt.


u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L194', 'L195', 'L196', 'L197']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L198', 'L199']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L200', 'L201', 'L202', 'L203']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L204', 'L205', 'L206']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L207', 'L208']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L271', 'L272', 'L273', 'L274', 'L275']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L276', 'L277']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L280', 'L281']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L363', 'L364']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L365', 'L366']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L367', 'L368']
u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L401', 'L402', 'L403']

Qui vediamo un estratto del file in questione, alcuni dati risultano sicuramente familiari. Qui la singola riga

u0 +++$+++ u2 +++$+++ m0 +++$+++ ['L194', 'L195', 'L196', 'L197']

rappresenta la conversazione, guardiamo insieme i campi:


  1. u0 - il primo interlocutore della conversazione
  2. u2 - il secondo interlocutore
  3. m0 - l'identificativo del film
  4. ['L194', 'L195', 'L196', 'L197'] - un array contenente gli id che puntano alle singole frasi che abbiamo visto nel file precedente.

Il separatore è sempre la stringa "+++$+++".

E' tutto, è importante capire la natura dell'informazione che stiamo trattando e la struttura dei file che ci apprestiamo a utilizzare. Nel prossimo articolo vedremo alcune operazioni preliminari da effettuare sul dataset per renderlo "digeribile" da parte del nostro modello.















Comments