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

问题描述

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

解决方法

没有。

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

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)

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

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

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