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