Aan de slagGa gratis aan de slag

Het model met woordembeddings trainen

Hier leer je hoe je het trainingsproces implementeert voor een machinevertaler die woordembeddings gebruikt. Een woord wordt weergegeven als één getal in plaats van een one-hot encoded vector zoals je in eerdere oefeningen deed. Je traint het model meerdere epochs terwijl je in batches door de volledige gegevensset gaat.

Voor deze oefening krijg je trainingsdata (tr_en en tr_fr) in de vorm van een lijst met zinnen. Je gebruikt alleen een heel kleine steekproef (1000 zinnen) van de echte data, omdat trainen anders erg lang kan duren. Je hebt ook de functie sents2seqs() en het model nmt_emb die je in de vorige oefening hebt geïmplementeerd. Onthoud dat we en_x gebruiken voor encoder-inputs en de_x voor decoder-inputs.

Deze oefening maakt deel uit van de cursus

Machine Translation met Keras

Cursus bekijken

Oefeninstructies

  • Haal één batch Franse zinnen op zonder onehot-encoding met de functie sents2seqs().
  • Neem alle woorden behalve het laatste uit de_xy.
  • Neem alle woorden behalve het eerste uit de_xy_oh (Franse woorden met onehot-encoding).
  • Train het model met één batch aan data

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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))
Code bewerken en uitvoeren