嵌入查找表不会屏蔽填充值

时间:2016-05-16 13:24:57

标签: python python-3.x machine-learning tensorflow

我正在使用embedding_lookup操作,以便为我的文档中的每个令牌生成密集的向量表示,这些表示被提供给卷积神经网络(网络架构类似于WildML article中的那个)。 / p>

一切正常但当我填充文档时在其中插入填充值时,嵌入查找也会为此标记生成一个向量。我认为这种方法可以改变分类任务中的结果。我想要实现的是类似于Torch LookupTableMaskZero所做的事情。

1)我想做什么是正确的?

2)已经实现了这样的事情?

3)如果没有,我如何屏蔽填充值以防止为其生成相应的向量?

提前谢谢你,

的Alessandro

2 个答案:

答案 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,卷积可能会影响填充嵌入),则必须进行零填充嵌入。