反轉句子
在這裡你會學到如何為編碼器模型反轉句子。前面提到過,反轉來源句子有助於在編碼器與解碼器之間建立更好的初始對應,進而提升模型效能。不過要記得,效益取決於你要互譯的兩種語言。只要兩種語言的主詞、動詞、受詞順序一致,這個方法通常就能幫助模型。
在本練習中,你會修改 sents2seqs() 函式,讓它在需要時可以反轉句子。使用者可以透過布林關鍵字參數 reverse 來指定是否要反轉文字。
本練習屬於課程
使用 Keras 進行機器翻譯
練習說明
- 撰寫
sents2seqs()的函式簽章,新增關鍵字參數reverse,預設為False。 - 在「時間維度」上反轉回傳的序列 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))