Odwracanie zdań
W tym ćwiczeniu dowiesz się, jak odwracać zdania na potrzeby modelu enkodera. Jak już wspomniano, odwracanie zdań źródłowych pomaga w zbudowaniu silnego połączenia początkowego między enkoderem a dekoderem, co przekłada się na lepszą wydajność modelu. Pamiętaj jednak, że korzyść z tego zabiegu zależy od pary języków, między którymi dokonujesz tłumaczenia – działa najlepiej wtedy, gdy oba języki mają taki sam szyk podmiotu, orzeczenia i dopełnienia.
W tym ćwiczeniu zmodyfikujesz funkcję sents2seqs() tak, aby w razie potrzeby mogła odwracać zdania. Użytkownik będzie mógł określić logiczny argument słownikowy reverse, który steruje odwracaniem tekstu.
To ćwiczenie jest częścią kursu
Tłumaczenie maszynowe z Keras
Instrukcje do ćwiczenia
- Napisz sygnaturę funkcji
sents2seqs(), dodając nowy argument słownikowyreversez wartością domyślnąFalse. - Odwróć zwracane identyfikatory sekwencji wzdłuż wymiaru czasowego (używając składni
::-1), tak aby identyfikator pierwszego słowa znalazł się na ostatnim miejscu. - Wywołaj funkcję
sents2seqs(), odwracając podane zdaniasentences, zachowując wszystkie pozostałe domyślne wartości parametrów bez zmian.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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))