CommencerCommencer gratuitement

Génération des traductions

Vous allez maintenant générer des traductions en français à l'aide d'un modèle d'inférence formé à l'aide de Teacher Forcing.

Ce modèle (nmt_tf) a été entraîné pendant 50 époques sur 100 000 phrases, ce qui lui a permis d'atteindre une précision d'environ 98 % sur un ensemble de validation de plus de 35 000 phrases. Cette opération peut prendre un certain temps, car le modèle formé doit être chargé. La fonction d'sents2seqs() est mise à votre disposition. Deux nouvelles fonctions vous ont également été attribuées :

word2onehot(tokenizer, word, vocab_size) qui accepte :

  • tokenizer - Un objet d'Tokenizer Keras.

  • mot - Une chaîne représentant un mot du vocabulaire (par exemple, « 'apple' »).

  • vocab_size - Taille du vocabulaire

probs2word(probs, tok) qui accepte :

  • probs - Une sortie du modèle de la forme [1,<French Vocab Size>]

  • tok - Un objet d'Tokenizer Keras

Vous pouvez consulter le code source de ces fonctions en saisissant « print(inspect.getsource(word2onehot)) » et « print(inspect.getsource(probs2word)) » dans la console.

Cet exercice fait partie du cours

Traduction automatique avec Keras

Afficher le cours

Instructions

  • Prédisez l'état initial du décodeur (de_s_t) à l'aide de 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 mots à partir de la sortie de probabilité à l'aide de la fonction « probs2word() ».
  • Convertissez la chaîne de mots en une séquence one-hot à l'aide de la fonction « word2onehot() ».

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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