ComeçarComece de graça

Treinar o modelo baseado em incorporação de palavras

Aqui você vai aprender como implementar o processo de treinamento para um modelo de tradução automática que usa word embeddings. Uma palavra é representada por um único número, em vez de um vetor codificado como “one-hot”, como você fez nos exercícios anteriores. Você vai treinar o modelo por várias épocas enquanto percorre todo o conjunto de dados em lotes.

Para este exercício, você vai receber dados de treinamento (tr_en e tr_fr) na forma de uma lista de frases. Você só vai usar uma amostra bem pequena (1000 frases) dos dados reais, porque senão pode demorar muito pra treinar. Você também tem a função sents2seqs() e o modelo nmt_emb que implementou no exercício anterior. Lembre-se de que usamos en_x para falar das entradas do codificador e de_x para falar das entradas do decodificador.

Este exercício faz parte do curso

Tradução automática com Keras

Ver curso

Instruções do exercício

  • Pegue um único lote de frases em francês sem codificação onehot usando a função sents2seqs().
  • Pega todas as palavras, menos a última, em de_xy.
  • Pega todas as palavras, menos a primeira, de de_xy_oh (palavras em francês com codificação onehot).
  • Treine o modelo usando um único lote de dados

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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))
Editar e executar o código