Sätze umdrehen
Hier lernst du, wie du Sätze für das Encoder-Modell umkehrst. Wie besprochen, hilft das Umdrehen von Quellsätzen dabei, eine starke erste Verbindung zwischen dem Encoder und dem Decoder aufzubauen, was die Leistung des Modells verbessert. Denk aber immer daran, dass der Vorteil davon abhängt, welche Sprachen du übersetzt. Solange Subjekt, Verb und Objekt in der gleichen Reihenfolge stehen, ist das gut für das Modell.
In dieser Übung änderst du die Funktion „ sents2seqs()
“, damit sie Sätze bei Bedarf umdrehen kann. Der Benutzer kann ein boolesches Schlüsselwortargument „ reverse
“ angeben, das den Text umkehrt.
Diese Übung ist Teil des Kurses
Maschinelle Übersetzung mit Keras
Anleitung zur Übung
- Schreib die Funktionssignatur „
sents2seqs()
” und füge ein neues Schlüsselwortargument „reverse
” hinzu, das standardmäßig auf „False
” gesetzt ist. - Dreh die zurückgegebenen Sequenz-IDs in der Zeitdimension um (mit der Syntax „
::-1
“), sodass die erste Wort-ID die letzte wird. - Ruf „
sents2seqs()
“ auf und mach die angegebene „sentences
“ rückgängig, während du alle anderen Standardparameterwerte so lässt, wie sie sind.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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))