Pre-elaborazione dei dati
Ora devi elaborare i dati per il nostro nuovo modello, che ha due input e un singolo output. I due input sono: le parole inglesi one-hot encoded e le parole francesi one-hot encoded escluse le ultime parole.
L'output sarà costituito dalle parole francesi one-hot encoded escluse le prime parole. In altre parole, nel decoder, a ogni parola francese in input corrisponde come output la parola successiva. Qui imparerai come implementarlo.
Hai a disposizione la funzione sents2seqs(), en_text e fr_text.
Questo esercizio fa parte del corso
Traduzione automatica con Keras
Istruzioni dell'esercizio
- Ottieni un batch di input dell'encoder (da
iai+bsize) usando la funzionesents2seqs()(one-hot encoded e reversed). - Ottieni un batch di input e output del decoder (da
iai+bsize) usando la funzionesents2seqs()(one-hot encoded). - Separa gli input del decoder (tutte le parole francesi tranne l'ultima) da
de_xyfacendo slicing sulla dimensione temporale. - Separa gli output del decoder (tutte le parole francesi tranne la prima) da
de_xy.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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))