神经机器翻译任务中的句子指示
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,我添加了一个注释,作为左支语言和右支语言的使用者,您可能会感兴趣。以上是关于神经机器翻译任务中的句子指示的主要内容,如果未能解决你的问题,请参考以下文章