【问题标题】:TrainingHelper in Tensorflow seq2seq don't use start token as the initial input?Tensorflow seq2seq 中的 TrainingHelper 不使用起始标记作为初始输入?
【发布时间】:2017-08-22 01:59:56
【问题描述】:

据我了解,seq2seq 模型的解码器的第一个输入是起始标记。但是当我在tensorflow/contrib/seq2seq/python/ops/helper.py中阅读TrainingHelper的代码时,我发现它只是将目标标记的第一个标记作为第一个标记返回:

  def initialize(self, name=None):
    with ops.name_scope(name, "TrainingHelperInitialize"):
      finished = math_ops.equal(0, self._sequence_length)
      all_finished = math_ops.reduce_all(finished)
      next_inputs = control_flow_ops.cond(
          all_finished, lambda: self._zero_inputs,
          lambda: nest.map_structure(lambda inp: inp.read(0), self._input_tas))
      return (finished, next_inputs)

是吗?

【问题讨论】:

    标签: python machine-learning tensorflow neural-network nlp


    【解决方案1】:

    Em...我在 nlp 上工作过很多次,包括 seq2seq 翻译。但是我从来没有听说过开始令牌,只有结束令牌(EOF)。

    虽然我的 seq2seq 任务在没有类似启动令牌的情况下运行良好,但我不确定它是否是一项新技术。如果是的话,谢谢你告诉我。

    【讨论】:

    • 我正在阅读来自Google nmt 的代码。该图显示它在解码时将<s> 作为开始令牌提供。但是在实现中,它只在推断部分使用了开始标记。
    • 那么没有起始标记,解码器 RNN 的初始输入是什么?
    • 可以只是目标token的第一个token。看了那篇文章,我觉得 start token 是个好主意,它等于 output 中的 end token。
    • 哦,那跟TensorFlow中TrainingHelper的实现是一样的。但是infer时没有目标token,初始输入用什么?
    • 您阅读了整篇文章吗? github.com/tensorflow/…查看此部分。
    【解决方案2】:

    原来是需要自己添加start token才能输入到TrainHelper

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多