Classification de sentiment : retour

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

David Cecchini

Data Scientist

Résultats précédents

Notre modèle initial a donné de mauvais résultats.

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]
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Améliorer le modèle

Pour améliorer les performances, vous pouvez :

  • Ajouter la couche d'« embedding »
  • Augmenter le nombre de couches
  • Ajuster les hyperparamètres
  • Augmenter la taille du vocabulaire
  • Accepter des phrases plus longues avec plus de cellules mémoire
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Éviter le surapprentissage

Les modèles RNN peuvent surapprendre

  • Tester différentes tailles de lot.
  • Ajouter des couches Dropout.
  • Ajouter les paramètres dropout et recurrent_dropout sur les couches RNN.
# supprime 20 % de l'entrée pour ajouter du bruit
model.add(Dropout(rate=0.2))

# Supprime respectivement 10 % de l'entrée et des cellules mémoire model.add(LSTM(128, dropout=0.1, recurrent_dropout=0.1))
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

En plus : couche de convolution

Hors périmètre :

model.add(Embedding(vocabulary_size, wordvec_dim, ...))
model.add(Conv1D(num_filters=32, kernel_size=3, padding='same'))
model.add(MaxPooling1D(pool_size=2))
  • La couche de convolution réalise une sélection de caractéristiques sur le vecteur d'« embedding »
  • Donne des résultats de pointe dans de nombreux problèmes de TAL
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Un exemple de modèle

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"))
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Passons à la pratique !

Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

Preparing Video For Download...