首页 > 解决方案 > Keras嵌入层能否为某个索引(例如:-1)提供随机向量而不是固定向量

问题描述

我有一个问题,我需要在 Keras 层中嵌入文本(可能很长,最多 9000 个单词)。我为每个文本选择了固定大小 5000,我需要填充每个序列以获得正确的形状。经典的方法是使用 Keras 的 pad_sequence 作为索引列表的输入列表并用零填充或将索引列表减少到 5000。对于我的下游任务,我使用一种受 Kim 的论文启发的 convnet(https:/ /arxiv.org/abs/1408.5882)。我担心的是,网络在某种意义上是通过检测嵌入我用来填充序列的 0 的向量模式来学习字数的。我并不是说这个特性不重要,但我想强制网络学习偏好中的其他特性。我在考虑两件事,首先使用一个额外的任务(如对抗性任务),它在输出之前采用模型创建的潜在表示,并使用模型的一个分支来预测文本的大小或大小的集群,例如 :

[,1000 words] -- cluster 1
[1001,2000words] -- cluster 2
 ect..

然后使用输出来鼓励网络通过在主要损失项中添加对抗性损失来映射潜在空间中的其他信息。我的另一个想法是,我们可以使用在训练时动态生成的随机向量,而不是使用零向量来填充嵌入零填充。(每次网络看到一个特定的索引,例如 -1,它就知道它必须生成一个随机向量)。我在想它打破了使用零向量引入的​​对称性,并帮助模型更好地泛化,因为它在训练过程中引入了噪声。

由于我没有找到任何关于用零以外的东西填充的任务的论文,所以我求助于社区。你怎么看?我完成了嵌入层的实现,我很确定第二个想法的实现在 keras 中非常简单,只需将 K.gather() 更改为正确索引的标志(尽管执行时间会更长)。

提前感谢您的反馈和资源!

标签: pythonpython-3.xkeraskeras-layerword-embedding

解决方案


推荐阅读