Zinnen opvullen (padding)
Je gaat nu een functie implementeren genaamd sents2seqs() die je later gebruikt om data handig om te zetten naar het formaat dat het neural machine translation (NMT)-model accepteert. sents2seqs() accepteert een lijst met zinnen als strings en,
- Zet de zinnen om naar een lijst met sequenties van ID’s,
- Vult de zinnen op zodat ze even lang zijn en,
- Zet de ID’s optioneel om naar onehot-vectoren.
Je hebt en_tok gekregen, een Tokenizer die al op data is getraind. Let er ook op dat je bij het implementeren van de functie sents2seqs() een ongebruikt argument ziet genaamd input_type. Later wordt input_type gebruikt om taalspecifieke parameters te veranderen, zoals de lengte van de sequentie en de grootte van de woordenschat.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Zet de
sentencesom naar sequenties met deen_tokTokenizer. - Vul sequenties op tot een vaste lengte
en_lenmet het opgegeven paddingtypepad_typeen gebruikpost-truncating. - Zet de
preproc_textwoord-ID’s om naar onehot-vectoren van lengteen_vocabmet de functieto_categorical(). - Zet
sentenceom naar een opgevulde sequentie met de methodesents2seqs()metpre-padding.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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=____)