文の反転
ここではエンコーダーモデルのために文を反転する方法を学びます。前述のとおり、ソース文を反転すると、エンコーダーとデコーダーの初期の結びつきが強まり、モデルの性能が向上します。ただし、この効果は翻訳する言語の組み合わせに依存することを常に覚えておいてください。主語・述語・目的語の語順が同じであれば、モデルにとって有益になります。
この演習では、必要に応じて文を反転できるように sents2seqs() 関数を変更します。ユーザーはブールのキーワード引数 reverse を指定でき、これがテキストの反転を行います。
この演習はコースの一部です
Kerasで学ぶMachine Translation
演習の手順
- 既定値が
Falseの新しいキーワード引数reverseを追加して、sents2seqs()の関数シグネチャを記述します。 - 返されるシーケンス ID を時間次元で反転します(
::-1構文を使用)。最初の単語 ID が最後になるようにします。 sents2seqs()を呼び出し、与えられたsentencesを反転し、その他の既定のパラメータ値はそのままにします。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
sentences = ["california is never rainy during july ."]
# Add new keyword parameter reverse which defaults to False
def ____(input_type, sentences, onehot=False, pad_type='post', ____=____):
encoded_text = en_tok.texts_to_sequences(sentences)
preproc_text = pad_sequences(encoded_text, padding=pad_type, truncating='post', maxlen=en_len)
if reverse:
# Reverse the text using numpy axis reversing
preproc_text = preproc_text[:, ____]
if onehot:
preproc_text = to_categorical(preproc_text, num_classes=en_vocab)
return preproc_text
# Call sents2seqs to get the padded and reversed sequence of IDs
pad_seq = ____('source', ____, ____=____)
rev_sent = [en_tok.index_word[wid] for wid in pad_seq[0][-6:]]
print('\tReversed: ',' '.join(rev_sent))