Invertendo sentenças
Aqui você vai aprender a inverter sentenças para o modelo de encoder. Como discutido, inverter as sentenças de origem ajuda a criar uma conexão inicial mais forte entre o encoder e o decoder, o que melhora o desempenho do modelo. Porém, lembre-se sempre de que o benefício depende dos dois idiomas entre os quais você está traduzindo. Enquanto eles tiverem a mesma ordem de sujeito, verbo e objeto, isso vai beneficiar o modelo.
Neste exercício, você vai modificar a função sents2seqs() para conseguir inverter sentenças quando necessário. O usuário pode especificar um argumento nomeado booleano reverse, que faz a inversão do texto.
Este exercício faz parte do curso
Machine Translation with Keras
Instruções do exercício
- Escreva a assinatura da função
sents2seqs()adicionando um novo argumento nomeadoreverse, que por padrão éFalse. - Inverta os IDs de sequência retornados na dimensão de tempo (usando a sintaxe
::-1), para que o ID da primeira palavra se torne o último. - Chame
sents2seqs()e inverta assentencesfornecidas, mantendo todos os outros valores padrão dos parâmetros inalterados.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
sentences = ["california is never rainy during july ."]
# Add new keyword parameter reverse which defaults to False
def ____(input_type, sentences, onehot=False, pad_type='post', ____=____):
encoded_text = en_tok.texts_to_sequences(sentences)
preproc_text = pad_sequences(encoded_text, padding=pad_type, truncating='post', maxlen=en_len)
if reverse:
# Reverse the text using numpy axis reversing
preproc_text = preproc_text[:, ____]
if onehot:
preproc_text = to_categorical(preproc_text, num_classes=en_vocab)
return preproc_text
# Call sents2seqs to get the padded and reversed sequence of IDs
pad_seq = ____('source', ____, ____=____)
rev_sent = [en_tok.index_word[wid] for wid in pad_seq[0][-6:]]
print('\tReversed: ',' '.join(rev_sent))