如何实现“遇见<eos>时做点什么”

时间:2019-03-14 01:14:55

标签: python nlp recurrent-neural-network machine-translation

令牌<EOS>在NLP中被普遍使用。因为我还没有使用它,所以对它的条件化实施对我来说还不清楚。谁能提供一段Python代码。 (如果可以使用语句。)

示例1:有一个单词序列,其中插有一些<EOS>标记。该序列通过RNN进行编码。每当遇到<EOS>时,时间步都会输出其状态。

示例2:机器翻译任务。当遇到<EOS>时,它将停止生成令牌。

1 个答案:

答案 0 :(得分:0)

EOS令牌对解码器也很重要:显式的“ end”令牌允许解码器发出任意长度的序列。解码器将告诉我们何时完成了令牌的发布:如果没有“结束”令牌,我们将不知道解码器何时与我们交谈,并且继续发出令牌会产生乱码。

因此,对于给出的示例,我有image captioning中的这段代码,它与机器翻译有关:

        # Which sequences are incomplete (didn't reach <end>)?
        incomplete_inds = [ind for ind, next_word in enumerate(next_word_inds) if
                           next_word != word_map['<end>']]
        complete_inds = list(set(range(len(next_word_inds))) - set(incomplete_inds))

此处令牌<end><EOS>类似。生成图像标题时,此代码段正在寻找<end>令牌。当然,我们想知道何时停止,并且在训练步骤中预先知道了字幕的长度,用于图像的字幕边界。