在使用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)