【问题标题】:Embedding lookup table doesn't mask padding value嵌入查找表不会掩盖填充值
【发布时间】:2016-09-12 07:25:02
【问题描述】:

我正在使用 embedding_lookup 操作来为我的文档中的每个标记生成密集向量表示,这些表示将馈送到卷积神经网络(网络架构类似于 WildML article 中的架构)。

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

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

2) 是否已经实现了这样的功能?

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

提前谢谢你,

亚历山德罗

【问题讨论】:

  • 您找到解决方案了吗?

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


【解决方案1】:

@亚历山德罗·苏利亚 我认为这个功能很有用,不幸的是 tf 目前不支持。 获得相同结果但速度较慢的一种解决方法是查找两次。 如下所示

  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)

【讨论】:

    【解决方案2】:

    似乎在rnn模型中,我们不需要屏蔽填充值,只要我们屏蔽损失(无论我们是否屏蔽输入填充,损失都是一样的,我通过运行测试代码得到结果) !

    当然,当tf.nn.dynamic_rnn 中的sequence_len 参数未传递时,零填充可能会加速零乘法的计算。

    最后,如果模型会做序列间的交互(比如CNN,卷积可能会影响padding embedding),零填充embedding是必要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多