推論モデルのデコーダを定義する
推論モデルは、ユーザーから翻訳が求められたときに実際に動かすモデルです。この演習では、推論モデルのデコーダを実装します。
推論モデルのデコーダは、学習時のデコーダとは異なります。予測したい対象がフランス語の単語なので、学習時のようにフランス語の単語をデコーダへ入力することはできません。そこで、前のタイムステップで予測したフランス語の単語を、次の入力としてデコーダに与える方法を使います。したがって翻訳を生成するとき、デコーダは前の出力を入力として取り込みながら、1語ずつ生成していく必要があります。
この演習では、hsize(GRU レイヤーの隠れ状態サイズ)、fr_len、fr_vocab がインポート済みです。de という接頭辞はデコーダを指すことを思い出してください。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
- ワンホットエンコードされたフランス語の単語列(シーケンス長 1)のバッチを受け取る
Inputレイヤーを定義します。 - 以前の状態をデコーダに与えるため、
hsizeの状態ベクトルのバッチを受け取る別のInputレイヤーを定義します。 - デコーダの
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())