在使用RNN based model處理序列的應用中,若是使用並行運算batch sample,咱們幾乎必定會遇到變長序列的問題。spa
一般解決變長的方法主要是將過長的序列截斷,將太短序列用0補齊到一個固定長度(例如max_length)。code
最後由n個sample組成的dataset能造成一個shape == (n, max_length)的矩陣。而後能夠將這個矩陣傳遞到後續的模型中使用。blog
然而咱們能夠很明顯,若是用0或者其餘整數補齊,勢必會影響到模型自身(莫名其妙被輸入不少個0,顯然是有問題的)。有什麼方法可以作到「可以使用一個二維矩陣做爲輸入數據集,從而達到並行化的同時,還能讓RNN模型自行決定真正輸入其中的序列的長度」。token
Embedding提供mask_zero來進行對padding爲0的處理。當咱們構建一個Embedding Layer時,能夠設置mask_zero=True
。get
encoder_inputs = Input(shape=(None,))
encoder_embedded = Embedding(num_input_tokens, embedding_size, mask_zero=True)(encoder_inputs)