ÎncepețiÎncepe gratuit

Antrenarea modelului

În acest exercițiu vei antrena modelul implementat anterior. Știai că modelul de traducere automată bazat pe encoder-decoder al Google a necesitat 2–4 zile de antrenament?

Pentru acest exercițiu vei folosi un set mic de date cu 1500 de propoziții (adică en_text și fr_text) pentru a antrena modelul. Această cantitate nu va fi suficientă pentru a obține performanțe ridicate, însă metoda rămâne aceeași — totul se reduce la antrenarea pe mai multe date, pentru o perioadă mai lungă. Îți sunt puse la dispoziție și modelul nmt, precum și funcția sents2seqs() pe care ai implementat-o anterior. În acest exercițiu vei inversa textul de intrare al encoder-ului pentru a obține rezultate mai bune. Aici, en_x se referă la intrarea encoder-ului, iar de_x la intrarea decoder-ului.

Acest exercițiu face parte din cursul

Traducere automată cu Keras

Vezi cursul

Instrucțiuni pentru exercițiu

  • Obține un singur batch de intrări pentru encoder (propoziții în engleză de la indexul i la i+bsize) folosind funcția sents2seqs(). Intrările trebuie să fie inversate și codificate one-hot.
  • Obține un singur batch de ieșiri pentru decoder (propoziții în franceză de la indexul i la i+bsize) folosind funcția sents2seqs(). Intrările trebuie să fie codificate one-hot.
  • Antrenează modelul pe un singur batch de date care conține en_x și de_y.
  • Obține metricile de evaluare pentru en_x și de_y evaluând modelul cu un batch_size egal cu bsize.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

n_epochs, bsize = 3, 250

for ei in range(n_epochs):
  for i in range(0,data_size,bsize):
    # Get a single batch of encoder inputs
    en_x = ____('source', ____, onehot=____, reverse=____)
    # Get a single batch of decoder outputs
    de_y = sents2seqs('target', fr_text[____], onehot=____)
    
    # Train the model on a single batch of data
    nmt.____(____, ____)    
    # Obtain the eval metrics for the training data
    res = nmt.____(____, de_y, batch_size=____, verbose=0)
    print("{} => Train Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))  
Editează și rulează codul