IMDB caso di studio

Alessandro Aere

22 maggio 2020

Caso di studio: sentiment analysis

Descrizione del problema

Verrà effettuato un confronto di modelli utilizzando il dataset IMDB, una raccolta di recensioni di film.

Per maggiori dettagli riguardo i dati, consultare questo link.

In questo report verrà riportato solamente il codice riguardante le reti neurali, e non quello di tutti gli altri modelli statistici, in quanto non sono argomento di interesse. Nelle conclusioni potrete trovare, tuttavia, il confronto dei risultati.

Caricamento della libreria Keras

Eseguite il codice qui in seguito, se desiderate impostare in seed ed ottenere risultati riproducibili.

Caricamento dei dati

In seguito, definiamo due variabili necessarie per la sentiment analysis, o in generale l’analisi testuale:

Preparazione dei dati

Generalmente il primo step di preparazione è la tokenizzazione, ossia l’associazione di un numero intero a ciascuna parola. Questo step non è necessario, perchè in questo caso le sequenze sono già tokenizzate.

In seguito, defininiamo anche una funzione che servirà in seguito: vectorize_sequences. Questa funzione ha come scopo la trasformazione dell’intero dataset, effettuando la dicotomizzazione delle parole presenti nelle frasi.

Deep Neural Network

Specificare l’architettura della rete neurale:

## Model
## Model: "sequential"
## ________________________________________________________________________________
## Layer (type)                        Output Shape                    Param #     
## ================================================================================
## dense (Dense)                       (None, 32)                      160032      
## ________________________________________________________________________________
## dense_1 (Dense)                     (None, 16)                      528         
## ________________________________________________________________________________
## dense_2 (Dense)                     (None, 1)                       17          
## ================================================================================
## Total params: 160,577
## Trainable params: 160,577
## Non-trainable params: 0
## ________________________________________________________________________________

Compilare il modello:

Effettuare il training della rete neurale. Come input alla rete neurale, diamo le sequenze dicotomizzate, applicando la funzione vectorize_sequences al dataset x_train.

In seguito viene rappresentato il grafico della funzione di perdita e dell’accuratezza in funzione del numero di epoche.

Valutazione del modello sui dati di test.

## [1] "Loss on test data: 0.592347383499146"
## [1] "Accuracy on test data: 0.860759973526001"

Recurrent neural network (lstm)

Specificare l’architettura della rete neurale:

Esempio di architettura di rete neurale composta da uno strato di word embedding ed uno strato LSTM.

Esempio di architettura di rete neurale composta da uno strato di word embedding ed uno strato LSTM.

## Model
## Model: "sequential_1"
## ________________________________________________________________________________
## Layer (type)                        Output Shape                    Param #     
## ================================================================================
## embedding (Embedding)               (None, None, 128)               640000      
## ________________________________________________________________________________
## lstm (LSTM)                         (None, 32)                      20608       
## ________________________________________________________________________________
## dense_3 (Dense)                     (None, 1)                       33          
## ================================================================================
## Total params: 660,641
## Trainable params: 660,641
## Non-trainable params: 0
## ________________________________________________________________________________

Compilare il modello:

Effettuare il training della rete neurale. Prima di dare in input le sequenze, vi applichiamo la funzione pad_sequences: questa funzione applica una lunghezza massima alle sequenze, in questo caso pari al valore max_len. Inoltre, alle sequenze più corte di max_len, vi applica il padding, ossia aggiunge una serie di elementi tutti pari a \(0\) (zero) al temine della sequenza, fino a farla diventare di lunghezza max_len. Questa tecnica è necessaria perchè la rete neurale richiede che le sequenze in input abbiano tutte la stessa lunghezza.

In seguito viene rappresentato il grafico della funzione di perdita e dell’accuratezza in funzione del numero di epoche.

Valutazione del modello sui dati di test.

## [1] "Loss on test data: 0.309290438890457"
## [1] "Accuracy on test data: 0.883960008621216"

Risultati

Modello Accuratezza
Recurrent neural network 88.4%
Lasso 87.0%
Regressione logistica 86.2%
Deep neural network 86.1%
Random forest 84.7%
Bagging 77.0%
Adaboost 72.5%
Gradient boosting 70.1%