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
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")