Get To The Point: Summarization with Pointer-Generator Networks

论文:https://arxiv.org/abs/1704.04368

代码:https://github.com/abisee/pointer-generator

背景

摘要技术整体分为两种:

  1. 抽取式extractive
  2. 生成式astractive 。

​ 抽取式比较简单,目前的performance也一般比较高,因为它是直接从原文抽取一些段落。但是想要生成高质量的摘要,必须具备一些复杂的摘要能力(如释义(paraphasing), 概括(generalization), 与现实世界知识的融合(incorporation of real-world knowledge),这些只有通过生成式模型才可能得以实现。
​ 鉴于生成式摘要任务的困难性,早期的摘要技术一般都是抽取式的,然而随着seq2sq架构的出现(Sutskever et al., 2014),使用这种架构来读取与自由地生成文本就变得可行了。虽然这种模型很有前景,但存在本文摘要中所说的那三种缺点。
​ 虽然最近的生成式摘要方面的工作专注于标题生成任务(headline generation)(将一个或两个句子减少到单个标题),但此文作者认为较长文本的摘要更具挑战性(需要更高级别的抽象同时避免重复)并最终更有用。

任务

在生成式摘要任务中,对于传统的seq2seq+attention的模型架构,作者提出它们有以下缺点:

  • 难以准确复述原文细节
  • 无法处理原文中的未登录词(OOV)
  • 在生成的摘要中存在一些重复的部分

本文提出了一种新颖的架构来增强标准的seq2seq+attention模型,采用了两种正交(互相之间不存在交集)的新颖手段:

  • 使用指针生成器网络(pointer-generator network),通过指针从原文中拷贝词,这种方式的高明之处在于正确复述原文信息的同时,也能使用生成器生成一些新的词。
  • 使用覆盖率(coverage) 机制,追踪哪些信息已经在摘要中了,通过这种方式以期避免生成具有重复片段的摘要。

不同模型的摘要生成效果:

QQ20220311-110456@2x

方法(模型)

seq2seq+attention model

本文的Baseline model

模型结构:

image-20220311110722271

  • encoder部分,本文采用单个 双向LSTM(bidirectional LSTM) 单元构成的层,训练数据中的文档中的token(词语或一些切割后的符号) $w_i$ 作为encoder的输入,产生一个encoder的隐藏层状态 $h_i$ 的序列。
  • decoder部分,本文采用单个 单向LSTM(unidirectional LSTM) 单元构成的层,时刻 $t$ 时接收上一个词的嵌入(embedding) (训练阶段这是前一个参考摘要中的词,测试阶段这是前一个decoder产生的词),生成解码状态 $s_t$。

  • 注意力分布 $a^t$ 的计算:

image-20220312164830443

其中 $v , Wh , W_s , b{attn}$ 都是可学习参数。

  • 注意力分布可以看作是建立在源文本(上图中的source text)中所有词上的一个概率分布,告诉decoder该看向哪里去生成下一个词。接下来,注意力分布用于产生encoder隐藏状态的加权和,即上下文向量(context vector) $h_t^*$。

image-20220312165200280

  • 依靠这个上下文向量 $ht^*$ 和decoder的隐层向量 $s_t$ ,共同决定$t$时刻 预测在词表上的概率分布 $P{vocab}$ 。

image-20220312165648820

其中 $V, V’, b, b’$ 都是可学习参数。

  • $P_{vocab}$ 是建立在整个词表上的概率分布,提供最终的预测词分布 $P(w)$ :

image-20220312165931380

  • 训练阶段,时刻 $t$ 的损失函数是生成目标词$w_t^*$ 的负对数似然概率 $loss_t$ :

image-20220312170047713

  • 那么对于一条序列来说,将每个词的损失计算平均即得到这条序列的损失 $loss$:

image-20220312170122720

pointer-generator network

指针生成器网络是一个上面的baseline模型和指针网络(pointer network)的混合模型,模型架构如图:

image-20220312170914267

  • 其中注意力分布 $a^t$ 与上下文向量 $h_t^*$ 的计算公式与上文相同。(见公式(1), (2), (3))

  • 在时刻 $t$ ,由上下文向量 $ht^*$ ,decoder状态向量 $s_t$ ,decoder输入 $x_t$ 共同计算 生成概率 $p{gen}$ 。

image-20220313103242563

其中 $w{h^*}, w_s, w_x $ 与标量 $b{ptr}$ 都是可学习参数,$\sigma$ 是sigmoid函数。

  • 这个$p{gen}$的计算相当关键,它被用作一个两种决策的软连接: 通过P{vocab} 从词表中生成一个词, 还是从输入序列的注意力分布 a^t 中进行采样得到一个词。同时,对于每一篇文档,用扩展后的词表(extended vocabulary) 来表示整个词表和这篇文档中的词的并集(解决OOV问题)。

  • 得到如下在扩展词表上建立的概率分布:

image-20220313103659217

如果$w$是一个未登录词(OOV),$P{vocab}(w)$ 就为 0;如果$w$在这篇文档中出现,但未在词表中出现,那么 $\sum{i:w_i=w}a_i^t$ 就将为 0。

  • 能生成未登录词是pointer-generator网络的一个主要优势,损失函数的计算和上文公式中的(7), (8)相同,但注意对应的 P ( w ) P(w) P(w)计算过程要替换成公式(9)。

覆盖机制(coverage mechanism)

采用覆盖模型来解决生成摘要中出现重复片段的问题。

  • 在此覆盖率模型中,本文保留了一个 覆盖率向量(coverage vector) $c^t$ ,它是在之前所有decoder步骤上的注意力分布的求和:

image-20220313104934530

  • 直观上看,$c^t$是源文档单词的 非标准化(unnormalized) 分布,表示到目前为止这些单词从注意力机制积累的覆盖程度。注意$c^0$是一个零向量,因为在第一步,对于源文档没有被覆盖的部分。覆盖率向量也被用来作为注意力机制的额外输入,将公式$(1)$变化为:

image-20220313105648609

其中 $w_c$ 是一个可学习的参数,具有和向量 $v$ 一样的长度。

  • 这确保了注意力机制做当前的决策时(下一步选择关注哪个词)会考量其先前的决定。这种方案使得对于注意力机制来说避免重复关注同一块地方的问题,因此能避免生成重复摘要的问题。
  • 此外,通过实验发现额外定义一个 覆盖率损失(coverage loss) 来惩罚将注意力重复放在同一区域的行为是非常必要的:

image-20220313105824431

注意这个损失是 有界(bounded) 的:image-20220313105935119

最终的复合损失函数(composite loss function):

image-20220313110025442

其中 $\lambda$ 是一个超参数,权衡两种损失的代价。

数据集

  • CNN/Daily Mail数据集

包括在线新闻文章(平均每篇文章781个token)及其对应的摘要(平均长度为3.75个句子,56个token)。
训练集:287,226条
验证集:13,368条
测试集:11,490条

性能水平

QQ20220314-142832@2x

结论

​ 本文提出的指针生成器网络解决seq2seq模型生成句子中经常有重复片段现象,通过指针从源文本中复制单词以解决OOV问题,并且有能力生成新词。在长文本数据集上摘要生成能力表现不错。