我正在使用embedding_lookup操作,以便为我的文档中的每个令牌生成密集的向量表示,这些表示被提供给卷积神经网络(网络架构类似于WildML article中的那个)。 / p>
一切正常但当我填充文档时在其中插入填充值时,嵌入查找也会为此标记生成一个向量。我认为这种方法可以改变分类任务中的结果。我想要实现的是类似于Torch LookupTableMaskZero所做的事情。
1)我想做什么是正确的?
2)已经实现了这样的事情?
3)如果没有,我如何屏蔽填充值以防止为其生成相应的向量?
提前谢谢你,
的Alessandro
答案 0 :(得分:3)
@Alessandro Suglia 我认为这个功能很有用,不幸的是现在不支持。 获得相同结果但速度较慢的一种解决方法是查找两次。 如下所示
lookup_result = tf.nn.embedding_lookup(emb, index)
masked_emb = tf.concat(0, [tf.zeros([1, 1]),
tf.ones([emb.get_shape()[0] - 1, 1])
mask_lookup_result = tf.nn.embedding_lookup(masked_emb, index)
lookup_result = tf.mul(lookup_result, mask_lookup_result)
答案 1 :(得分:-1)
似乎在rnn模型中,我们不需要屏蔽填充值,只要我们屏蔽丢失(无论是否屏蔽输入填充,损失都是相同的,我通过运行测试代码获得结果) !
当然,当sequence_len
中的tf.nn.dynamic_rnn
参数未通过时,填充可以加速计算零乘法。
最后,如果模型在序列之间进行交互(例如CNN,卷积可能会影响填充嵌入),则必须进行零填充嵌入。