Kom igångKom igång gratis

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

Visa kurs

Ö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))
Redigera och kör kod