Générer des traductions
Vous allez maintenant générer des traductions en français à l'aide d'un modèle d'inférence entraîné avec Teacher Forcing.
Ce modèle (nmt_tf) a été entraîné pendant 50 époques sur 100 000 phrases et a atteint environ 98 % de précision sur un ensemble de validation de plus de 35 000 éléments. L'initialisation de cet exercice peut prendre plus de temps, car il faut charger le modèle entraîné. La fonction sents2seqs() vous est fournie. Deux nouvelles fonctions vous sont également proposées :
word2onehot(tokenizer, word, vocab_size) qui accepte :
- tokenizer - Un objet
Tokenizerde Keras - word - Une chaîne représentant un mot du vocabulaire (p. ex.
'apple') - vocab_size - Taille du vocabulaire
probs2word(probs, tok) qui accepte :
- probs - Une sortie du modèle de forme
[1,<French Vocab Size>] - tok - Un objet
Tokenizerde Keras
Vous pouvez jeter un coup d'œil au code source de ces fonctions en tapant print(inspect.getsource(word2onehot)) et print(inspect.getsource(probs2word)) dans la console.
Cette activité fait partie du cours
Traduction automatique avec Keras
Instructions de l’exercice
- Prédisez l'état initial du décodeur (
de_s_t) avec l'encodeur. - Prédisez la sortie et le nouvel état du décodeur en utilisant la prédiction précédente (sortie) et l'état précédent comme entrées. N'oubliez pas de générer récursivement le nouvel état.
- Obtenez la chaîne de caractères du mot à partir de la sortie de probabilités à l'aide de la fonction
probs2word(). - Convertissez cette chaîne de mot en séquence one-hot à l'aide de la fonction
word2onehot().
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
en_sent = ['the united states is sometimes chilly during december , but it is sometimes freezing in june .']
print('English: {}'.format(en_sent))
en_seq = sents2seqs('source', en_sent, onehot=True, reverse=True)
# Predict the initial decoder state with the encoder
de_s_t = ____.predict(____)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''
for i in range(fr_len):
# Predict from the decoder and recursively assign the new state to de_s_t
de_prob, ____ = ____.predict([____,____])
# Get the word from the probability output using probs2word
de_w = probs2word(____, fr_tok)
# Convert the word to a onehot sequence using word2onehot
de_seq = word2onehot(fr_tok, ____, fr_vocab)
if de_w == 'eos': break
fr_sent += de_w + ' '
print("French (Ours): {}".format(fr_sent))
print("French (Google Translate): les etats-unis sont parfois froids en décembre, mais parfois gelés en juin")