始める無料で始める

モデルの学習

この演習では、先ほど実装したモデルを学習させます。Google のエンコーダ・デコーダ型の機械翻訳モデルは、学習に 2~4 日かかったことをご存じでしたか?

この演習では、1500 文(en_textfr_text)の小さなデータセットを使ってモデルを学習します。これだけでは十分な性能は期待できませんが、手順自体は同じです。より多くのデータで、より長く学習させればよいのです。すでにモデル nmt と、前の演習で実装した sents2seqs() 関数が用意されています。今回は性能を高めるために、エンコーダ側のテキストを反転して使用します。ここで、en_x はエンコーダ入力、de_x はデコーダ入力を表します。

この演習はコースの一部です

Kerasで学ぶMachine Translation

コースを見る

演習の手順

  • sents2seqs() 関数を使って、エンコーダ入力(インデックス i から i+bsize の英語文)の単一バッチを取得します。入力は反転し、onehot エンコードする必要があります。
  • sents2seqs() 関数を使って、デコーダ出力(インデックス i から i+bsize のフランス語文)の単一バッチを取得します。入力は onehot エンコードする必要があります。
  • en_xde_y を含む単一バッチのデータでモデルを学習させます。
  • bsizebatch_size に設定してモデルを評価し、en_xde_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))  
コードを編集して実行