Предобработка данных
Теперь необходимо подготовить данные для новой модели, которая принимает два входных потока и формирует один выходной. Первый вход — это английские слова в унитарном (one-hot) кодировании, второй — французские слова в унитарном кодировании без последнего слова.
Выходные данные — французские слова в унитарном кодировании без первого слова. Иными словами, в декодировщике каждому входному французскому слову соответствует выходное — следующее слово в последовательности. В этом упражнении вы научитесь реализовывать такую схему.
Вам предоставлены функция sents2seqs(), а также переменные en_text и fr_text.
Это упражнение является частью курса
Машинный перевод с Keras
Инструкции к упражнению
- Получите батч входных данных кодировщика (с
iпоi+bsize) с помощью функцииsents2seqs()(в унитарном кодировании и в обратном порядке). - Получите батч входных и выходных данных декодировщика (с
iпоi+bsize) с помощью функцииsents2seqs()(в унитарном кодировании). - Выделите входные данные декодировщика (все французские слова, кроме последнего) из
de_xy, выполнив срез по временному измерению. - Выделите выходные данные декодировщика (все французские слова, кроме первого) из
de_xy.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
bsize = 250
for i in range(0, len(en_text), bsize):
# Get the encoder inputs using the sents2seqs() function
en_x = ____('source', ____[____:____], onehot=True, reverse=____)
# Get the decoder inputs/outputs using the sents2seqs() function
de_xy = sents2seqs('target', ____[____:____], onehot=True)
# Separate the decoder inputs from de_xy
de_x = de_xy[:,____,:]
# Separate the decoder outputs from de_xy
de_y = de_xy[:,____,:]
print("Data from ", i, " to ", i+bsize)
print("\tnp.argmax() => en_x[0]: ", np.argmax(en_x[0], axis=-1))
print("\tnp.argmax() => de_x[0]: ", np.argmax(de_x[0], axis=-1))
print("\tnp.argmax() => de_y[0]: ", np.argmax(de_y[0], axis=-1))