Addestrare il modello basato su word embedding
Qui imparerai a implementare il processo di training per un modello di traduzione automatica che usa word embedding. Una parola è rappresentata come un singolo numero invece che come un vettore one-hot, come hai fatto negli esercizi precedenti. Allenerai il modello per più epoche scorrendo l’intero insieme di dati a batch.
Per questo esercizio ti vengono forniti i dati di training (tr_en e tr_fr) sotto forma di elenco di frasi. Userai solo un campione molto piccolo (1000 frasi) dei dati reali, altrimenti l’addestramento richiederebbe troppo tempo. Hai anche la funzione sents2seqs() e il modello nmt_emb che hai implementato nell’esercizio precedente. Ricorda che usiamo en_x per indicare gli input dell’encoder e de_x per gli input del decoder.
Questo esercizio fa parte del corso
Traduzione automatica con Keras
Istruzioni dell'esercizio
- Ottieni un singolo batch di frasi in francese senza one-hot encoding usando la funzione
sents2seqs(). - Prendi tutte le parole tranne l’ultima da
de_xy. - Prendi tutte le parole tranne la prima da
de_xy_oh(parole in francese con one-hot encoding). - Allena il modello usando un singolo batch di dati
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
for ei in range(3):
for i in range(0, train_size, bsize):
en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=False, reverse=True)
# Get a single batch of French sentences with no onehot encoding
de_xy = ____('target', ____[i:i+bsize], ____=____)
# Get all words except the last word in that batch
de_x = de_xy[:,____]
de_xy_oh = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
# Get all words except the first from de_xy_oh
de_y = de_xy_oh[____,____,____]
# Training the model on a single batch of data
nmt_emb.train_on_batch([____,____], ____)
res = nmt_emb.evaluate([en_x, de_x], de_y, batch_size=bsize, verbose=0)
print("{} => Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))