Dopełnianie zdań
Teraz zaimplementujesz funkcję o nazwie sents2seqs(), którą później wykorzystasz do wygodnego przekształcania danych do formatu akceptowanego przez model neuronowego tłumaczenia maszynowego (NMT). Funkcja sents2seqs() przyjmuje listę zdań w postaci ciągów znaków i:
- konwertuje zdania na listy sekwencji identyfikatorów,
- dopełnia zdania tak, aby miały równą długość,
- opcjonalnie zamienia identyfikatory na wektory kodowania one-hot.
Do dyspozycji masz en_tok – obiekt klasy Tokenizer już wytrenowany na danych. Zwróć też uwagę, że podczas implementacji funkcji sents2seqs() zobaczysz nieużywany argument input_type. Zostanie on użyty później do zmiany parametrów zależnych od języka, takich jak długość sekwencji i rozmiar słownika.
To ćwiczenie jest częścią kursu
Tłumaczenie maszynowe z Keras
Instrukcje do ćwiczenia
- Przekonwertuj
sentencesna sekwencje przy użyciu tokenizatoraen_tok. - Dopełnij sekwencje do stałej długości
en_len, stosując określony typ dopełnieniapad_typei obcinaniepost. - Zamień identyfikatory słów z
preproc_textna wektory one-hot o długościen_vocab, używając funkcjito_categorical(). - Przekonwertuj
sentencena dopełnioną sekwencję metodąsents2seqs(), stosując dopełnianiepre.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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=____)