単語埋め込みベースのモデルを学習させる
ここでは、単語埋め込みを使う機械翻訳モデルの学習手順を実装します。単語は、前の演習で行った one-hot ベクトルではなく、単一の数値として表現します。データセット全体をバッチでたどりながら、複数エポックにわたってモデルを学習します。
この演習では、文のリスト形式の学習データ(tr_en と tr_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))