始める無料で始める

推論モデルのデコーダを定義する

推論モデルは、ユーザーから翻訳が求められたときに実際に動かすモデルです。この演習では、推論モデルのデコーダを実装します。

推論モデルのデコーダは、学習時のデコーダとは異なります。予測したい対象がフランス語の単語なので、学習時のようにフランス語の単語をデコーダへ入力することはできません。そこで、前のタイムステップで予測したフランス語の単語を、次の入力としてデコーダに与える方法を使います。したがって翻訳を生成するとき、デコーダは前の出力を入力として取り込みながら、1語ずつ生成していく必要があります。

この演習では、hsizeGRU レイヤーの隠れ状態サイズ)、fr_lenfr_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())
コードを編集して実行