始める無料で始める

単語埋め込みベースのモデルを学習させる

ここでは、単語埋め込みを使う機械翻訳モデルの学習手順を実装します。単語は、前の演習で行った one-hot ベクトルではなく、単一の数値として表現します。データセット全体をバッチでたどりながら、複数エポックにわたってモデルを学習します。

この演習では、文のリスト形式の学習データ(tr_entr_fr)が用意されています。学習に時間がかかりすぎないよう、実データのうちごく少数(1000 文)のサンプルのみを使用します。前の演習で実装した sents2seqs() 関数とモデル nmt_emb も利用できます。en_x はエンコーダの入力、de_x はデコーダの入力を指すことを思い出してください。

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

Kerasで学ぶMachine Translation

コースを見る

演習の手順

  • sents2seqs() 関数を使い、one-hot エンコードを行わずにフランス語文の単一バッチを取得します。
  • de_xy からは、最後 以外のすべての単語を取得します。
  • de_xy_oh(one-hot で表現されたフランス語の単語)からは、最初 以外のすべての単語を取得します。
  • 単一バッチのデータでモデルを学習させます

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

for ei in range(3):
  for i in range(0, train_size, bsize):    
    en_x = sents2seqs('source', tr_en[i:i+bsize], onehot=False, reverse=True)
    # Get a single batch of French sentences with no onehot encoding
    de_xy = ____('target', ____[i:i+bsize], ____=____)
    # Get all words except the last word in that batch
    de_x = de_xy[:,____]
    de_xy_oh = sents2seqs('target', tr_fr[i:i+bsize], onehot=True)
    # Get all words except the first from de_xy_oh
    de_y = de_xy_oh[____,____,____]
    # Training the model on a single batch of data
    nmt_emb.train_on_batch([____,____], ____)    
    res = nmt_emb.evaluate([en_x, de_x], de_y, batch_size=bsize, verbose=0)
    print("{} => Loss:{}, Train Acc: {}".format(ei+1,res[0], res[1]*100.0))
コードを編集して実行