CommencezCommencez gratuitement

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 Tokenizer de 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 Tokenizer de 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

Voir le cours

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")
Modifier et exécuter le code