Inizia subitoInizia gratis

Addestrare il modello basato su word embedding

Qui imparerai a implementare il processo di training per un modello di traduzione automatica che usa word embedding. Una parola è rappresentata come un singolo numero invece che come un vettore one-hot, come hai fatto negli esercizi precedenti. Allenerai il modello per più epoche scorrendo l’intero insieme di dati a batch.

Per questo esercizio ti vengono forniti i dati di training (tr_en e tr_fr) sotto forma di elenco di frasi. Userai solo un campione molto piccolo (1000 frasi) dei dati reali, altrimenti l’addestramento richiederebbe troppo tempo. Hai anche la funzione sents2seqs() e il modello nmt_emb che hai implementato nell’esercizio precedente. Ricorda che usiamo en_x per indicare gli input dell’encoder e de_x per gli input del decoder.

Questo esercizio fa parte del corso

Traduzione automatica con Keras

Visualizza corso

Istruzioni dell'esercizio

  • Ottieni un singolo batch di frasi in francese senza one-hot encoding usando la funzione sents2seqs().
  • Prendi tutte le parole tranne l’ultima da de_xy.
  • Prendi tutte le parole tranne la prima da de_xy_oh (parole in francese con one-hot encoding).
  • Allena il modello usando un singolo batch di dati

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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))
Modifica ed esegui il codice