始める無料で始める

埋め込みモデルの定義

次の内容を満たす Keras モデルを定義します。

  • Embedding レイヤーを使用する
  • Teacher Forcing で学習する

このモデルには 2 つの埋め込みレイヤー(エンコーダ用とデコーダ用)があります。さらに、Teacher Forcing で学習するため、デコーダの Input レイヤーでは系列長として fr_len-1 を使用します。

この演習では、必要な keras.layersModel はすべてインポート済みです。加えて、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'])
コードを編集して実行