Aplicando padding às sentenças
Agora você vai implementar uma função chamada sents2seqs() que será usada depois para transformar os dados no formato aceito pelo modelo de tradução automática neural (NMT). sents2seqs() recebe uma lista de strings de sentenças e,
- Converte as sentenças em uma lista de sequências de IDs,
- Aplica padding nas sentenças para que todas tenham o mesmo comprimento e,
- Opcionalmente converte os IDs em vetores one-hot.
Foi fornecido o en_tok, um Tokenizer já treinado nos dados. Outra coisa importante: ao implementar a função sents2seqs(), você verá um argumento não utilizado chamado input_type. Depois, esse input_type será usado para alterar parâmetros dependentes do idioma, como o comprimento da sequência e o tamanho do vocabulário.
Este exercício faz parte do curso
Machine Translation with Keras
Instruções do exercício
- Converta
sentencesem sequências usando o Tokenizeren_tok. - Faça o padding das sequências para um comprimento fixo
en_lencom o tipo de preenchimento definido porpad_typee use truncamentopost. - Converta os IDs de palavras em
preproc_textpara vetores one-hot de comprimentoen_vocabusando a funçãoto_categorical(). - Converta
sentenceem uma sequência com padding usando o métodosents2seqs()com paddingpre.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
def sents2seqs(input_type, sentences, onehot=False, pad_type='post'):
# Convert sentences to sequences
encoded_text = ____.____(sentences)
# Pad sentences to en_len
preproc_text = ____(____, padding=____, truncating=____, maxlen=____)
if onehot:
# Convert the word IDs to onehot vectors
preproc_text = ____(____, num_classes=____)
return preproc_text
sentence = 'she likes grapefruit , peaches , and lemons .'
# Convert a sentence to sequence by pre-padding the sentence
pad_seq = sents2seqs('source', [____], pad_type=____)