Entraîner le modèle basé sur des plongements de mots
Ici, vous allez voir comment mettre en œuvre le processus d'entraînement d'un modèle de traduction qui utilise des plongements de mots. Un mot est représenté par un seul nombre plutôt que par un vecteur en one-hot comme vous l'avez fait dans les exercices précédents. Vous entraînerez le modèle pendant plusieurs époques en parcourant l'ensemble du jeu de données par lots.
Pour cet exercice, on vous fournit des données d'entraînement (tr_en et tr_fr) sous forme de liste de phrases. Vous n'utiliserez qu'un très petit échantillon (1000 phrases) des données réelles, sinon l'entraînement pourrait être très long. Vous avez aussi la fonction sents2seqs() et le modèle nmt_emb que vous avez mis en place dans l'exercice précédent. Rappelez-vous que nous utilisons en_x pour désigner les entrées de l'encodeur et de_x pour les entrées du décodeur.
Cette activité fait partie du cours
Traduction automatique avec Keras
Instructions de l’exercice
- Obtenez un seul lot de phrases françaises sans encodage one-hot en utilisant la fonction
sents2seqs(). - Obtenez tous les mots sauf le dernier à partir de
de_xy. - Obtenez tous les mots sauf le premier à partir de
de_xy_oh(mots français avec encodage one-hot). - Entraînez le modèle à l'aide d'un seul lot de données
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
for ei in range(3):
for i in range(0, train_size, bsize):
en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=False, reverse=True)
# Get a single batch of French sentences with no onehot encoding
de_xy = ____('target', ____[i:i+bsize], ____=____)
# Get all words except the last word in that batch
de_x = de_xy[:,____]
de_xy_oh = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
# Get all words except the first from de_xy_oh
de_y = de_xy_oh[____,____,____]
# Training the model on a single batch of data
nmt_emb.train_on_batch([____,____], ____)
res = nmt_emb.evaluate([en_x, de_x], de_y, batch_size=bsize, verbose=0)
print("{} => Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))