埋め込みモデルの定義
次の内容を満たす Keras モデルを定義します。
Embeddingレイヤーを使用する- Teacher Forcing で学習する
このモデルには 2 つの埋め込みレイヤー(エンコーダ用とデコーダ用)があります。さらに、Teacher Forcing で学習するため、デコーダの Input レイヤーでは系列長として fr_len-1 を使用します。
この演習では、必要な keras.layers と Model はすべてインポート済みです。加えて、en_len(英語の系列長)、fr_len(フランス語の系列長)、en_vocab(英語の語彙サイズ)、fr_vocab(フランス語の語彙サイズ)、hsize(隠れ層サイズ)の各変数は定義済みです。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
- ワードIDの系列を受け付ける
Inputレイヤーを定義します。 en_vocab語を埋め込み、埋め込み次元を 96 とし、ID の系列を受け付けられるEmbeddingレイヤーを定義します(系列長は引数input_lengthで指定します)。fr_vocab語を埋め込み、埋め込み次元を 96 とし、fr_len-1個の ID の系列を受け付けられるEmbeddingレイヤーを定義します。- エンコーダからの入力とデコーダからの入力(この順番)を受け取り、単語の予測を出力するモデルを定義します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Define an input layer which accepts a sequence of word IDs
en_inputs = Input(____=(____,))
# Define an Embedding layer which accepts en_inputs
en_emb = ____(____, ____, input_length=____)(en_inputs)
en_out, en_state = GRU(hsize, return_state=True)(en_emb)
de_inputs = Input(shape=(fr_len-1,))
# Define an Embedding layer which accepts de_inputs
de_emb = Embedding(____, 96, input_length=____)(____)
de_out, _ = GRU(hsize, return_sequences=True, return_state=True)(de_emb, initial_state=en_state)
de_pred = TimeDistributed(Dense(fr_vocab, activation='softmax'))(de_out)
# Define the Model which accepts encoder/decoder inputs and outputs predictions
nmt_emb = Model([____, ____], ____)
nmt_emb.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])