Träna modellen med ordinbäddning
Här får du lära dig hur träningsprocessen implementeras för en maskinöversättningsmodell som använder ordinbäddningar (word embeddings). Ett ord representeras som ett enskilt tal i stället för en one-hot-kodad vektor, som du gjorde i tidigare övningar. Du tränar modellen under flera epoker och går igenom hela datamängden i batchar.
I den här övningen får du tillgång till träningsdata (tr_en och tr_fr) i form av en lista med meningar. Du använder bara ett mycket litet urval (1 000 meningar) av den faktiska datan, eftersom träningen annars kan ta mycket lång tid. Du har också tillgång till funktionen sents2seqs() och modellen nmt_emb, som du implementerade i föregående övning. Kom ihåg att vi använder en_x för kodarens indata och de_x för avkodarens indata.
Den här övningen är en del av kursen
Maskinöversättning med Keras
Övningsinstruktioner
- Hämta en enskild batch med franska meningar utan one-hot-kodning med hjälp av funktionen
sents2seqs(). - Hämta alla ord utom det sista från
de_xy. - Hämta alla ord utom det första från
de_xy_oh(franska ord med one-hot-kodning). - Träna modellen med en enskild batch data.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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))