Revue de la classification des sentiments

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

David Cecchini

Data Scientist

Résultats précédents

Nous avons obtenu de mauvais résultats avec le modèle initial.

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 du modèle, nous pouvons :

  • Ajouter la couche d'« embedding »
  • Augmenter le nombre de couches
  • Ajuster les hyperparamètres
  • Accroître la taille du vocabulaire
  • Accepter des phrases plus longues avec plus de cellules de 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 aux couches RNN.
# retire 20 % de l'entrée pour ajouter du bruit
model.add(Dropout(rate=0.2))

# retire respectivement 10 % de l'entrée et des cellules de 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

Extra : couche de convolution

Hors portée :

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 fait une sélection de caractéristiques sur le vecteur d'« embedding »
  • Donne des résultats de pointe dans de nombreux problèmes de TALN
Réseaux de neurones récurrents (RNN) pour la modélisation du langage avec Keras

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...