Classificazione del sentiment: ripasso

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

David Cecchini

Data Scientist

Risultati precedenti

I risultati del modello iniziale erano scarsi.

model = Sequential()
model.add(SimpleRNN(units=16, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])

model.evaluate(x_test, y_test)
$[0.6991182165145874, 0.495]
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Migliorare il modello

Per migliorare le prestazioni del modello possiamo:

  • Aggiungere il livello di embedding
  • Aumentare il numero di livelli
  • Afinare i parametri
  • Aumentare il vocabolario
  • Accettare frasi più lunghe con più celle di memoria
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Evitare l'overfitting

Le RNN possono overfittare

  • Prova dimensioni di batch diverse.
  • Aggiungi livelli Dropout.
  • Aggiungi i parametri dropout e recurrent_dropout nei livelli RNN.
# rimuove il 20% dell'input per aggiungere rumore
model.add(Dropout(rate=0.2))

# rimuove rispettivamente il 10% di input e celle di memoria model.add(LSTM(128, dropout=0.1, recurrent_dropout=0.1))
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Extra: livello convoluzionale

Fuori ambito:

model.add(Embedding(vocabulary_size, wordvec_dim, ...))
model.add(Conv1D(num_filters=32, kernel_size=3, padding='same'))
model.add(MaxPooling1D(pool_size=2))
  • I livelli convoluzionali fanno selezione delle feature sul vettore di embedding
  • Raggiungono risultati all'avanguardia in molti problemi NLP
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Un modello di esempio

model = Sequential()
model.add(Embedding(  vocabulary_size, wordvec_dim, trainable=True,
                      embeddings_initializer=Constant(glove_matrix), 
                      input_length=max_text_len, name="Embedding"))

model.add(Dense(wordvec_dim, activation='relu', name="Dense1"))
model.add(Dropout(rate=0.25)) model.add(LSTM(64, return_sequences=True, dropout=0.15, name="LSTM"))
model.add(GRU(64, return_sequences=False, dropout=0.15, name="GRU"))
model.add(Dense(64, name="Dense2")) model.add(Dropout(rate=0.25)) model.add(Dense(32, name="Dense3"))
model.add(Dense(1, activation='sigmoid', name="Output"))
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Passiamo alla pratica!

Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras

Preparing Video For Download...