Data preprocessen
Je moet nu de data verwerken voor ons nieuwe model met twee inputs en één output. De twee inputs zijn: de one-hot encodede Engelse woorden en de one-hot encodede Franse woorden zonder het laatste woord.
De output is de one-hot encodede Franse woorden zonder het eerste woord. Met andere woorden: in de decoder heeft elk ingevoerd Frans woord een output, namelijk het volgende woord. Hier leer je hoe je dat implementeert.
Je hebt de functies sents2seqs(), en_text en fr_text gekregen.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Verkrijg een batch encoder-inputs (van
itoti+bsize) met de functiesents2seqs()(one-hot encodede en omgekeerd). - Verkrijg een batch decoder-inputs en -outputs (van
itoti+bsize) met de functiesents2seqs()(one-hot encodede). - Scheid de decoder-inputs (alle Franse woorden behalve het laatste) uit
de_xydoor te slicen op de timedimensie. - Scheid de decoder-outputs (alle Franse woorden behalve het eerste) uit
de_xy.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
bsize = 250
for i in range(0, len(en_text), bsize):
# Get the encoder inputs using the sents2seqs() function
en_x = ____('source', ____[____:____], onehot=True, reverse=____)
# Get the decoder inputs/outputs using the sents2seqs() function
de_xy = sents2seqs('target', ____[____:____], onehot=True)
# Separate the decoder inputs from de_xy
de_x = de_xy[:,____,:]
# Separate the decoder outputs from de_xy
de_y = de_xy[:,____,:]
print("Data from ", i, " to ", i+bsize)
print("\tnp.argmax() => en_x[0]: ", np.argmax(en_x[0], axis=-1))
print("\tnp.argmax() => de_x[0]: ", np.argmax(de_x[0], axis=-1))
print("\tnp.argmax() => de_y[0]: ", np.argmax(de_y[0], axis=-1))