Gerando traduções
Agora você vai gerar traduções para o francês usando um modelo de inferência treinado com Teacher Forcing.
Este modelo (nmt_tf) foi treinado por 50 épocas em 100.000 frases e atingiu cerca de 98% de acurácia em um conjunto de validação com mais de 35.000 exemplos. A inicialização deste exercício pode demorar um pouco, pois o modelo treinado precisa ser carregado. A função sents2seqs() está disponível para você. Você também recebeu duas novas funções:
word2onehot(tokenizer, word, vocab_size), que recebe:
- tokenizer - Um objeto
Tokenizerdo Keras - word - Uma string representando uma palavra do vocabulário (por exemplo,
'apple') - vocab_size - Tamanho do vocabulário
probs2word(probs, tok), que recebe:
- probs - Uma saída do modelo com a forma
[1,<French Vocab Size>] - tok - Um objeto
Tokenizerdo Keras
Você pode dar uma olhada no código-fonte dessas funções digitando print(inspect.getsource(word2onehot)) e print(inspect.getsource(probs2word)) no console.
Este exercício faz parte do curso
Machine Translation with Keras
Instruções do exercício
- Preveja o estado inicial do decodificador (
de_s_t) com o codificador. - Preveja a saída e o novo estado do decodificador usando a previsão anterior (saída) e o estado anterior como entradas. Lembre-se de gerar o novo estado recursivamente.
- Obtenha a palavra (string) a partir da saída de probabilidades usando a função
probs2word(). - Converta a palavra (string) em uma sequência one-hot usando a função
word2onehot().
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
en_sent = ['the united states is sometimes chilly during december , but it is sometimes freezing in june .']
print('English: {}'.format(en_sent))
en_seq = sents2seqs('source', en_sent, onehot=True, reverse=True)
# Predict the initial decoder state with the encoder
de_s_t = ____.predict(____)
de_seq = word2onehot(fr_tok, 'sos', fr_vocab)
fr_sent = ''
for i in range(fr_len):
# Predict from the decoder and recursively assign the new state to de_s_t
de_prob, ____ = ____.predict([____,____])
# Get the word from the probability output using probs2word
de_w = probs2word(____, fr_tok)
# Convert the word to a onehot sequence using word2onehot
de_seq = word2onehot(fr_tok, ____, fr_vocab)
if de_w == 'eos': break
fr_sent += de_w + ' '
print("French (Ours): {}".format(fr_sent))
print("French (Google Translate): les etats-unis sont parfois froids en décembre, mais parfois gelés en juin")