为了使我们的模型输出更连贯,我们允许解码器在生成新单词时回顾部分输入文档,这种技术称为时间注意(temporal attention)模型。与完全依赖自己的隐藏状态不同,解码器可以通过注意函数(attention function)整合不同部分的输入语境信息。调整注意函数,以确保模型在生成输出文本时使用不同部分的输入,从而增加摘要的信息覆盖度。 另外,为了确保我们的模型不产生重复信息,我们还允许它回顾解码器之前的隐藏状态。用类似的方式,我们定义内部解码注意函数(intra-decoder attention function),它可以回顾解码器 RNN 之前的隐藏状态。最后,解码器将来自时间注意模型的语境向量(context vector)与来自内部解码注意函数的语境向量相结合,在输出摘要中生成下一个词。图 5 展示了在给定解码步骤中这两个注意函数的联合过程。 图 5:由编码器隐藏状态和解码器隐藏状态计算得到的两个语境向量(标记为「C」)。使用这两个语境向量和当前的解码器隐藏状态(「H」),生成一个新的词(右)并添加到输出序列中。 如何训练模型?监督式学习 VS. 强化学习 要训练这个模型并应用于新闻文章等真实数据,通常的方法是使用教师强迫算法(teacher forcing algorithm):一个模型在生成一个摘要时使用参考摘要(reference summary),并且该模型在每生成一个新单词时会被分配一个逐词误差(word-by-word error,或「局部监督/local supervision」,如图 6 所示)。 图 6:用监督式学习训练模型。每个生成的单词得到一个训练监督信号,通过与同一位置的正确摘要单词进行比较来进行训练。 该方法可用于训练任意基于循环神经网络的序列生成模型,具有非常好的结果。然而,对于我们的特定任务,正确的摘要不一定要按照逐字来匹配参考序列。你可以想像,对于同样的新闻文章,两个人可能在风格、单词或句子顺序上产生不尽相同的摘要,但仍然认为摘要是好的。教师强迫算法的问题是:一旦产生了前几个单词,训练就会被误导:严格遵守一个官方正确的摘要,但不能适应一个潜在正确但不同的开头。 考虑到这一点,我们可以比教师强迫的逐词方法做得更好。这里可以应用一种称为强化学习(RL)的不同类型的训练。首先,强化学习算法使模型生成自己的摘要,然后使用外部评分器(scorer)来比较生成的摘要与正确摘要。这个评分器然后向模型表明生成的摘要有多「好」。如果分数很高,那么模型进行更新,使得这些摘要更有可能在将来出现。否则,如果得分低,模型将受到惩罚,并改变其生成过程以防止生成类似的摘要。这种强化模型擅长得出用于评估整个序列而不是逐词预测的摘要分数。 图 7:在强化学习中,模型没有对应每个预测词的局部监督信号,而是用基于整个输出和摘要参考的奖励信号(reward signal)进行训练。 如何评估摘要? 评分器到底是什么?它如何分辨出一个摘要的「好坏」?由于要人手动评估数以万计的摘要在很大程度上是耗时并不切实际的,因此,我们使用一种名为 ROUGE(Recall-Oriented Understudy for Gisting Evaluation)的自动评分指标。ROUGE 通过对比摘要中将生成的摘要中的匹配子短语和实际数据的参考摘要中的子短语来运作,即使它们并不是完全一致的。不同的 ROUGE 变体(ROUGE-1、ROUGE-2、ROUGE-L)都以相同的方式工作,但使用不同的子序列长度。 (责任编辑:本港台直播) |