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

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

【问题讨论】:

    标签: neural-network recurrent-neural-network machine-translation seq2seq encoder-decoder


    【解决方案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,我添加了一个注释,作为左支语言和右支语言的使用者,您可能会感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2020-11-26
    • 2021-12-27
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多