Utfyllnad av meningar
Nu ska du implementera en funktion som heter sents2seqs(), som du senare kommer att använda för att omvandla data till det format som den neurala maskinöversättningsmodellen (NMT) kräver. sents2seqs() tar emot en lista med meningssträngar och:
- Konverterar meningarna till en lista med sekvenser av ID:n,
- Fyller ut meningarna så att de får samma längd, samt
- Konverterar valfritt ID:n till one-hot-vektorer.
Du har tillgång till en_tok, en Tokenizer som redan tränats på data. Observera också att när du implementerar funktionen sents2seqs() kommer du att se ett oanvänt argument som heter input_type. Detta argument kommer senare att användas för att ändra språkberoende parametrar, till exempel sekvensens längd och vokabulärens storlek.
Den här övningen är en del av kursen
Maskinöversättning med Keras
Övningsinstruktioner
- Konvertera
sentencestill sekvenser med hjälp aven_tokTokenizer. - Fyll ut sekvenserna till en fast längd
en_lenmed den angivna utfyllnadstypenpad_typeoch användpost-trunkering. - Konvertera ord-ID:na i
preproc_texttill one-hot-vektorer av längdenen_vocabmed funktionento_categorical(). - Konvertera
sentencetill en utfylld sekvens med metodensents2seqs()ochpre-utfyllnad.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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=____)