モデルの学習
この演習では、先ほど実装したモデルを学習させます。Google のエンコーダ・デコーダ型の機械翻訳モデルは、学習に 2~4 日かかったことをご存じでしたか?
この演習では、1500 文(en_text と fr_text)の小さなデータセットを使ってモデルを学習します。これだけでは十分な性能は期待できませんが、手順自体は同じです。より多くのデータで、より長く学習させればよいのです。すでにモデル nmt と、前の演習で実装した sents2seqs() 関数が用意されています。今回は性能を高めるために、エンコーダ側のテキストを反転して使用します。ここで、en_x はエンコーダ入力、de_x はデコーダ入力を表します。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
sents2seqs()関数を使って、エンコーダ入力(インデックスiからi+bsizeの英語文)の単一バッチを取得します。入力は反転し、onehot エンコードする必要があります。sents2seqs()関数を使って、デコーダ出力(インデックスiからi+bsizeのフランス語文)の単一バッチを取得します。入力は onehot エンコードする必要があります。en_xとde_yを含む単一バッチのデータでモデルを学習させます。bsizeをbatch_sizeに設定してモデルを評価し、en_xとde_yの評価指標を取得します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
n_epochs, bsize = 3, 250
for ei in range(n_epochs):
for i in range(0,data_size,bsize):
# Get a single batch of encoder inputs
en_x = ____('source', ____, onehot=____, reverse=____)
# Get a single batch of decoder outputs
de_y = sents2seqs('target', fr_text[____], onehot=____)
# Train the model on a single batch of data
nmt.____(____, ____)
# Obtain the eval metrics for the training data
res = nmt.____(____, de_y, batch_size=____, verbose=0)
print("{} => Train Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))