Kom igångKom igång gratis

Generera översättningar

Nu ska du generera franska översättningar med hjälp av en inferensmodell tränad med Teacher Forcing.

Den här modellen (nmt_tf) har tränats i 50 epoker på 100 000 meningar och uppnådde ungefär 98% noggrannhet på ett valideringsset med över 35 000 meningar. Det kan ta lite längre tid att initiera den här övningen eftersom den tränade modellen behöver läsas in. Du har tillgång till funktionen sents2seqs(). Du har också fått två nya funktioner:

word2onehot(tokenizer, word, vocab_size) som tar emot:

  • tokenizer - Ett Keras Tokenizer-objekt
  • word - En sträng som representerar ett ord från vokabulären (t.ex. 'apple')
  • vocab_size - Vokabulärens storlek

probs2word(probs, tok) som tar emot:

  • probs - En utdata från modellen med formen [1,<French Vocab Size>]
  • tok - Ett Keras Tokenizer-objekt

Du kan titta på källkoden för dessa funktioner genom att skriva print(inspect.getsource(word2onehot)) och print(inspect.getsource(probs2word)) i konsolen.

Den här övningen är en del av kursen

Maskinöversättning med Keras

Visa kurs

Övningsinstruktioner

  • Prediktera det initiala avkodartillståndet (de_s_t) med kodaren.
  • Prediktera utdata och det nya tillståndet från avkodaren med hjälp av föregående prediktion (utdata) och föregående tillstånd som indata. Kom ihåg att rekursivt generera det nya tillståndet.
  • Hämta ordsträngen från sannolikhetsutdatan med funktionen probs2word().
  • Konvertera ordsträngen till en one-hot-sekvens med funktionen word2onehot().

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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")
Redigera och kör kod