Lorenzo Vainigli

Android developer

Classificazione di recensioni con Yelp Open Dataset

6 Ottobre 2020
Progetti Programmazione
4 min.
192

This post is available in English

Yelp Open Dataset è una raccolta di dati che riguarda degli utenti che scrivono recensioni su degli esercizi commerciali appartenenti a diverse categorie commerciali (es. ristorazione, noleggio auto, ecc…).

Grazie a questa base di dati ho potuto realizzare un modello basato su una rete neurale per la classificazione automatica delle recensioni utilizzando tecniche di elaborazione del linguaggio naturale e machine learning.

Il modello già addestrato può essere utilizzato su Google Colab cliccando sul pulsante di seguito.
NB. La rete neurale funziona solo con frasi in lingua inglese.

Open in Colab

Nei prossimi paragrafi descrivo come si è svolto il progetto.

Creazione del modello

I valori di input sono stati calcolati applicando tecniche di word embedding al testo delle recensioni. I valori di output per ogni input sono stati calcolati in base al numero di stelle associato alla recensione e trasformato in un vettore binario per permettere al modello di effettuare una classificazione basata su categorie (es. ”4 stelle” è stato codificato con il vettore [0, 0, 0, 1, 0]).

Sono stati seguiti i passi descritti in questo corso.

Dopo numerosi tentativi, provando diverse configurazioni di livelli e parametri diversi, è stata scelta la seguente configurazione:

# Parameters for word embedding
vocab_size = 10000
embedding_dim = 128
max_length = 256

# Model configuration
model = tf.keras.Sequential([
    tf.keras.layers.Embedding(vocab_size, embedding_dim,
input_length=max_length),
    tf.keras.layers.GlobalAveragePooling1D(),
    tf.keras.layers.Dropout(0.4),
    tf.keras.layers.Dense(5,activation=’softmax’)
])

Addestramento e validazione

Sono state selezionate le prime 10.000 recensioni, senza alcun criterio di filtraggio, effettuando una divisione 80%-20% per costruire, rispettivamente, training set e test set. In fase di addestramento è stato aggiunto un early stopping per prevenire l’overfitting.
I valori di accuracy risultanti sono 79,8% per il training set e 63,7% per il test set (Figura 1).

Figura 1: Valori di accuracy e loss per il primo run, ovvero prima di aver effettuato il filtraggio sui dati.

Sarebbe stato molto interessante selezionare 100.000 recensioni anziché solo un decimo di queste, ma non è stato fatto per limiti di capacità computazionali dell’elaboratore.

Miglioramento delle performance

Considerando che cambiando i parametri o la composizione del modello i risultati non miglioravano in modo significativo, si è scelto di effettuare un filtraggio sui dati eliminando quelli che producevano valori di loss troppo alti. L’assunzione dietro a questa scelta sta nel fatto che questi valori di input-output potrebbero non essere molto veritieri.
Per ogni istanza dei 10.000 record scelti si è calcolato il valore di loss e si è deciso di scartare quelle che presentavano tale valore più alto di 2.
I valori di accuracy risultanti dopo questa operazione sono 88,9% per il training set e 70,3% per il test set (Figura 2).

Figura 2: Valori di accuracy e loss per il secondo run, ovvero prima di aver effettuato il filtraggio sui dati dove sono stati eliminati gli esempi con valori di loss alta.

Risultati finali

Di seguito sono riportati dei grafici che mostrano i dati sui quali si può effettuare una valutazione finale sul modello per il riconoscimento automatico di una recensione.
Al fine di una classificazione tra recensioni positive e negative possiamo valutare come positive le recensioni a cui vengono attribuite 4 o 5 stelle e come negative quelle a cui ne vengono attribuite 1 o 2. Il caso delle 3 stelle è arbitrario.
Osservando i grafici mostrati nelle figure 3, 4, 5 e 6 possiamo verificare come l’accuratezza del modello sia migliorata.

Figura 3: Questa frase è sicuramente una delle peggiori che si possa scrivere a proposito di un locale. Al primo run il modello assegnava erroneamente 5 stelle ma con una notevole incertezza, mentre nel secondo run la scelta migliore (1 stella) è nettamente superiore alle altre.
Figura 4: Questa è senza dubbio una frase positiva e anche al primo run si ha una scelta netta per l’opzione “5 stelle”, che comunque viene rafforzata ulteriormente nel secondo run. Sarebbe anche stato lecito aspettarsi 4 stelle.
Figura 5: Recensione assolutamente positiva. Già con il primo run si ha una scelta chiara, ma con il secondo l’82% di probabilità è un risultato estremamente corretto e che non lascia spazio a dubbi.
Figura 6: Questa frase è una delle più interessanti poiché rappresenta un equilibrio per cui sarebbero preferibili 3 stelle (poiché si tratta della scelta media). Purtroppo in questo caso il modello non è molto accurato neanche dopo il secondo run, infatti la scelta di attribuire 1 stella è sicuramente sbagliata. Tuttavia si può osservare che, ancora una volta, il secondo run si prospetta più veritiero del primo.

Ulteriori analisi

Nella mia repository sono disponibili altri notebook che contengono analisi aggiuntive sui dati di Yelp Open Dataset.

Lorenzo Vainigli

Sviluppatore Android e appassionato fin da piccolo di computer e tecnologia.
Ho una laurea magistrale in Informatica conseguita all'Università di Bologna.
Mi piacciono l'astronomia 🌌 e la cultura giapponese ⛩️.
Qui racconto di più su di me.