Zinnen omkeren
Hier leer je hoe je zinnen omkeert voor het encoder‑model. Zoals besproken helpt het omkeren van bronzinnen om een sterke eerste koppeling te leggen tussen de encoder en de decoder, wat de prestaties van het model verbetert. Bedenk wel dat dit voordeel afhangt van de twee talen waar je tussen vertaalt. Zolang ze dezelfde volgorde van onderwerp, werkwoord en lijdend voorwerp hebben, is dit gunstig voor het model.
In deze oefening pas je de functie sents2seqs() aan zodat zinnen indien nodig kunnen worden omgekeerd. De gebruiker kan een booleaanse keyword-argument reverse opgeven dat de tekst omkeert.
Deze oefening maakt deel uit van de cursus
Machine Translation met Keras
Oefeninstructies
- Schrijf de functiedefinitie van
sents2seqs()door een nieuw keyword-argumentreversetoe te voegen dat standaard opFalsestaat. - Keer de geretourneerde sequentie-ID’s om over de tijdsdimensie (met
::-1-syntaxis), zodat de eerste woord-ID de laatste wordt. - Roep
sents2seqs()aan en keer de meegegevensentencesom, en laat alle andere standaardparameterwaarden ongewijzigd.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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))