Teacher Forcing 用モデルレイヤーの定義
先ほど定義した機械翻訳モデルを、さらに良くした新バージョンを作成します。Google の翻訳モデルのようなものも、この Teacher Forcing 手法で学習させていたことはご存知でしたか?
すでに見たとおり、Teacher Forcing を採用するには前のモデルに少し手を入れる必要があります。この演習では、必要な変更を加えていきます。言語パラメータとして、en_len と fr_len(英語/フランス語のパディング済み文の長さ)、en_vocab と fr_vocab(英語/フランス語データセットの語彙サイズ)、そして hsize(GRU レイヤーの隠れ層サイズ)が与えられています。デコーダーは fr_len より 1 つ短い長さのフランス語シーケンスを受け取る点に注意してください。エンコーダー関連には接頭辞 en、デコーダー関連には de を使うことも覚えておきましょう。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
tensorflow.kerasからlayersサブモジュールをインポートします。- エンコーダーの出力と状態を取得し、それぞれ
en_outとen_stateに代入します。 fr_len-1の長さを持つ one-hot エンコード済みフランス語単語列を受け付けるデコーダーのInputレイヤーを定義します。fr_vocab個のノードを持つ、TimeDistributedなDenseの softmax レイヤーを定義します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Import the layers submodule from keras
import ____.____.____ as layers
en_inputs = layers.Input(shape=(en_len, en_vocab))
en_gru = layers.GRU(hsize, return_state=True)
# Get the encoder output and state
____, ____ = en_gru(____)
# Define the decoder input layer
de_inputs = layers.____(shape=(____, ____))
de_gru = layers.GRU(hsize, return_sequences=True)
de_out = de_gru(de_inputs, initial_state=en_state)
# Define a TimeDistributed Dense softmax layer with fr_vocab nodes
de_dense = layers.____(____.____(____, activation=____))
de_pred = de_dense(de_out)