Aan de slagGa gratis aan de slag

Vertalingen genereren

Je gaat nu Franse vertalingen genereren met een inferentiemodel dat is getraind met Teacher Forcing.

Dit model (nmt_tf) is 50 epochs getraind op 100.000 zinnen en behaalde ongeveer 98% nauwkeurigheid op een validatieset van meer dan 35.000 voorbeelden. Het kan iets langer duren voordat deze oefening start, omdat het getrainde model moet worden geladen. Je krijgt de functie sents2seqs() mee. Je hebt ook twee nieuwe functies gekregen:

word2onehot(tokenizer, word, vocab_size) die het volgende accepteert:

  • tokenizer - Een Keras-Tokenizer-object
  • word - Een string die een woord uit de woordenschat voorstelt (bijv. 'apple')
  • vocab_size - Grootte van de woordenschat

probs2word(probs, tok) die het volgende accepteert:

  • probs - Een modeloutput met de vorm [1,<French Vocab Size>]
  • tok - Een Keras-Tokenizer-object

Je kunt in de broncode van deze functies kijken door print(inspect.getsource(word2onehot)) en print(inspect.getsource(probs2word)) in de console te typen.

Deze oefening maakt deel uit van de cursus

Machine Translation met Keras

Cursus bekijken

Oefeninstructies

  • Voorspel de initiële decoderstatus (de_s_t) met de encoder.
  • Voorspel de output en de nieuwe status met de decoder, waarbij je de vorige voorspelling (output) en de vorige status als invoer gebruikt. Denk eraan de nieuwe status recursief te genereren.
  • Haal de woordstring op uit de waarschijnlijkheidsoutput met de functie probs2word().
  • Zet de woordstring om naar een one-hot-sequentie met de functie word2onehot().

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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")
Code bewerken en uitvoeren