Определение декодера инференс-модели
Инференс-модель — это модель, которая используется в реальных условиях для выполнения переводов по запросу пользователя. В этом упражнении вам предстоит реализовать декодер инференс-модели.
Декодер инференс-модели отличается от декодера обучающей модели. Мы не можем подавать на вход декодеру французские слова, поскольку именно их нам нужно предсказать. К счастью, есть решение: можно использовать предсказанное на предыдущем шаге французское слово в качестве входных данных для декодера инференс-модели. Таким образом, при генерации перевода декодер формирует по одному слову за раз, используя предыдущий выход как вход.
Для этого упражнения импортированы переменные hsize (размер скрытого состояния слоя GRU), fr_len и fr_vocab. Напомним, что префикс de используется для обозначения декодера.
Это упражнение является частью курса
Машинный перевод с Keras
Инструкции к упражнению
- Определите слой
Input, принимающий батч последовательностей французских слов в формате унитарного кодирования (длина последовательности равна 1). - Определите ещё один слой
Input, принимающий батч состояний размеромhsize, — он будет использоваться для передачи предыдущего состояния в декодер. - Получите выходные данные и состояние декодера
GRU. - Определите модель, которая принимает входной слой французских слов
Inputи входной слой предыдущего состоянияInput, а на выходе возвращает итоговое предсказание и новое состояниеGRU.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
import tensorflow.keras.layers as layers
from tensorflow.keras.models import Model
# Define an input layer that accepts a single onehot encoded word
de_inputs = layers.____(shape=(____, ____))
# Define an input to accept the t-1 state
de_state_in = layers.____(shape=(____,))
de_gru = layers.GRU(hsize, return_state=True)
# Get the output and state from the GRU layer
de_out, de_state_out = ____(de_inputs, initial_state=____)
de_dense = layers.Dense(fr_vocab, activation='softmax')
de_pred = de_dense(de_out)
# Define a model
decoder = Model(inputs=[____, ____], outputs=[____, ____])
print(decoder.summary())