神经机器翻译任务中的句子指示

Posted

技术标签:

【中文标题】神经机器翻译任务中的句子指示【英文标题】:Sentence Indicating in Neural Machine Translation Tasks 【发布时间】:2021-05-23 11:09:59 【问题描述】:

我见过很多人致力于神经机器翻译。通常,在训练网络之前,它们会在<BOS><EOS><START><END> 等标签之间表示自己的句子。当然,指定句子的开头和结尾是一个合乎逻辑的解决方案,但我想知道神经网络如何理解字符串<END>(或其他)表示句子的结尾?

【问题讨论】:

【参考方案1】:

没有。

在推理时,有一个硬编码规则,即如果生成了该标记,则序列完成,并且将不再要求底层神经模型提供下一个标记。

source_seq = tokenize('This is not a test.')
print(source_seq)

此时你会得到类似的东西:

[ '<BOS>', 'Thi###', ... , '###t', '.' , '<EOS>' ]

现在我们用相同的格式构建目标序列:

target_seq = [ '<BOS>' ]

while true:
    token = model.generate_next_token(source_seq, target_seq)
    if token == '<EOS>':
       break
    seq.append(token)

模型本身只预测最有可能给出当前状态的下一个标记(到目前为止的输入序列和输出序列)。

它不能退出循环,就像它不能把你机器的插头从墙上拔下来一样。

请注意,这不是这里唯一的硬编码规则。另一个是决定从第一个标记开始并且只追加 - 从不前置,从不删除...... - 就像人类说话一样。

【讨论】:

@BurhanBilen 然后模型将没有机会学习预测该标记,您将获得一个有效的无限循环。 然后它会生成无限长的句子——除非你使用其他规则将其截断,比如“如果长度大于 200 就停止” 自回归序列生成(你会知道如果你不这样做)通过一次生成一个单词来工作,直到你生成特殊的“停止符号”单词 EOS。 非常感谢你们两位的解释非常好和清晰,现在更容易理解和清晰了。 Burhan,我添加了一个注释,作为左支语言和右支语言的使用者,您可能会感兴趣。

以上是关于神经机器翻译任务中的句子指示的主要内容,如果未能解决你的问题,请参考以下文章

机器学习小白关于循环神经网络的5个问题

如何为语言翻译重新训练序列到序列神经网络模型?

神经网络机器翻译与注意力机制

机器学习——神经网络

文本分类/机器学习:我还需要“默认”类别吗?

神经网络机器翻译Neural Machine Translation: Attention Mechanism