Zacznij terazZacznij za darmo

Trenowanie modelu opartego na osadzeniach słów

W tym ćwiczeniu nauczysz się implementować proces trenowania modelu tłumaczenia maszynowego wykorzystującego osadzenia słów (word embeddings – wektorowe reprezentacje słów). Każde słowo jest reprezentowane jako pojedyncza liczba zamiast wektora kodowania one-hot, tak jak w poprzednich ćwiczeniach. Model będzie trenowany przez wiele epok, przetwarzając cały zbiór danych partiami.

Do ćwiczenia masz dostęp do danych treningowych (tr_en i tr_fr) w postaci listy zdań. Używamy bardzo małej próbki (1000 zdań) rzeczywistych danych, ponieważ trenowanie na pełnym zbiorze mogłoby zająć bardzo dużo czasu. Masz również dostęp do funkcji sents2seqs() oraz modelu nmt_emb, który zaimplementowałeś w poprzednim ćwiczeniu. Pamiętaj, że en_x oznacza dane wejściowe enkodera, a de_x – dane wejściowe dekodera.

To ćwiczenie jest częścią kursu

Tłumaczenie maszynowe z Keras

Zobacz kurs

Instrukcje do ćwiczenia

  • Pobierz pojedynczą partię zdań francuskich bez kodowania one-hot, używając funkcji sents2seqs().
  • Pobierz wszystkie słowa oprócz ostatniego z de_xy.
  • Pobierz wszystkie słowa oprócz pierwszego z de_xy_oh (słowa francuskie z kodowaniem one-hot).
  • Wytrenuj model na pojedynczej partii danych.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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))
Edytuj i uruchom kod