转载:https://blog.csdn.net/qq_27825451/article/details/88991529
参考链接:https://blog.csdn.net/songbinxu/article/details/80150019
对于NLP,怎么处理变长序列是基本问题。
问题来源:mask_zero=True是干嘛的?
网上mask_zero的解释少,转载的文章能帮你轻松理解。
总结:Embedding的关键字参数mask_zero=True不会改变Word2vector的结果,即不是讲所有补充的0全部变为0向量,这个很重要,关键字参数mask_zero=True的作用是决定了后面的“循环层”是否会将补充的0单词参与运算,如果设置为True,就是“覆盖掉0”的意思,自然就不参与运算,如果设置为False,就是不覆盖0,0也会参与运算的意思。
补充:既然Word2vector之后的结果根本就不是0向量,那后面循环层在运算的时候怎么会知道哪个是补充的单词0,哪个不是补充的单词0?
事实上,在对每一个单词进行Word2vector的时候,会存在一个单词与向量之间的映射关系在里面,比如
3->[#,#,#]
4->[#,#,#]
5->[#,#,#]
0->[#,#,#]
所以即使向量并不是0向量,但是哪个与单词0对应的向量依然是清楚地,所以只要有这样一个映射关系,循环层在遇到与0相对应的向量时,就“覆盖掉不参与运算”,这就是其中的原理了。后面要介绍的Masking层实际上也是要达到同样的效果,二者异曲同工。