Get To The Point: Summarization with Pointer-Generator Networks

ACL 2017 论文 Get To The Point: Summarization with Pointer-Generator Networks作者 Abigail See、Peter J Liu 和 Christopher Manning。[ 论文] [ 代码]

">

通过指向(pointing)从原文中拷贝词语(方案提出者: (Vinyals et al., 2015)),这样在保留可生成新的词的能力的同时,也能准确复述原文内容(个人认为作者很有洞见性,知道抽取式方案有其自身的优势,通过这种方法来达到抽取式(extractive)和生成式(abstractive)两种方案的平衡点)。
————————————————
版权声明:本文为CSDN博主「Dongxue_NLP」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DongxueB/article/details/123984994

驯服递归神经网络以获得更好的总结

2017 年 4 月 16 日

这篇博文是关于ACL 2017论文Get To The Point: Summarization with Pointer-Generator Networks,作者 Abigail See、Peter J Liu 和 Christopher Manning。[论文] [代码]


互联网时代已经为数十亿人的指尖带来了深不可测的海量信息——如果我们有时间阅读它就好了。尽管我们的生活已经因随时访问无限数据而改变,但我们也发现自己被信息过载所困。出于这个原因,自动文本摘要——将一段文本自动压缩为更短版本的任务——变得越来越重要。

两种总结

自动文本摘要大致有两种方法:抽取式和抽象式。

  • 提取方法从源文本中选择段落,然后将它们排列成一个摘要。您可能会将这些方法视为荧光笔。

  • 抽象方法使用自然语言生成技术来编写新颖的句子。同样的比喻,这些方法就像一支笔。

绝大多数现有的自动摘要方法都是抽取式的——主要是因为选择文本比从头开始生成文本要容易得多。例如,如果您的提取方法涉及从源文本中选择和重新排列整个句子,则可以保证生成一个合乎语法、可读性强且与源文本相关的摘要。当应用于中等长度的事实文本(如新闻文章和技术文档)时,这些系统(有几个在线可用 可以相当成功。

另一方面,提取方法限制性太强,无法生成类似人类的摘要——尤其是更长、更复杂的文本。想象一下,仅仅通过选择和重新排列书中的句子来尝试编写一部维基百科式的小说情节提要——比如《远大前程》。这是不可能的。一方面,《远大前程》是用第一人称写的,而大纲应该用第三人称写。更重要的是,将整个行动章节浓缩成一个句子,比如Pip 拜访 Havisham 小姐并爱上了她的养女 Estella,这需要强有力的释义,而这只有在抽象的框架中才有可能。

简而言之:抽象的总结可能很困难,但它是必不可少的!

进入循环神经网络

如果您不熟悉循环神经网络或注意力机制,请查看WildMLAndrej KarpathyDistill的优秀教程。

在过去的几年里,循环神经网络 (RNN)——一种可以对顺序数据(例如单词序列)执行计算的神经网络——已成为许多自然语言处理任务的标准方法。特别是,带有注意力的序列到序列模型,如下图所示,已成为流行的摘要。让我们逐步了解图表!

在此示例中,我们的源文本是一篇新闻文章,开头是德国在周六 2-0 战胜阿根廷的比赛中取得胜利,我们正在生成抽象的摘要德国 2-0 击败阿根廷。首先,编码器 RNN逐字读取源文本,产生一系列编码器隐藏状态。(两个方向都有箭头,因为我们的编码器是双向的,但这并不重要)。

一旦编码器读取了整个源文本,解码器 RNN开始输出应形成摘要的单词序列。在每一步,解码器接收摘要的前一个单词作为输入(在第一步,这是一个特殊的 <START> 标记,它是开始写入的信号)并使用它来更新解码器隐藏状态。这用于计算注意力分布,这是源文本中单词的概率分布。直观地说,注意力分布告诉网络在哪里寻找以帮助它产生下一个单词。在上图中,解码器到目前为止已经生成了第一个单词Germany,并且专注于源单词win获胜才能产生下一个词节拍

接下来,注意力分布用于生成编码器隐藏状态的加权和,称为上下文向量。在解码器的这一步,上下文向量可以被视为“从源文本中读取的内容”。最后,使用上下文向量和解码器隐藏状态来计算词汇分布,这是一个固定的大词汇表(通常是几万或几十万个词)中所有词的概率分布。选择概率最大的单词(在这一步,beat)作为输出,解码器继续下一步。

解码器能够以任何顺序自由生成单词——包括诸如节拍之类没有出现在源文本中的单词——使得序列到序列模型成为抽象摘要的潜在强大解决方案。

两大问题

不幸的是,这种总结方法存在两个大问题:

问题 1:摘要有时会不准确地再现事实细节(例如,德国以3-2击败阿根廷)。这对于诸如2-0之类的稀有或词汇表外的单词尤其常见。

问题 2:总结有时会重复(例如德国击败德国击败德国击败……

事实上,这些问题通常在 RNN 中很常见。与深度学习一样,很难解释为什么网络会表现出任何特定的行为。对于有兴趣的人,我提供以下猜想。如果您不感兴趣,请跳至解决方案

问题 1的解释:sequence-to-sequence-with-attention 模型使得从源文本中复制单词w变得非常困难。在信息经过几层计算(包括将w映射到其词嵌入)之后,网络必须以某种方式恢复原始词。

特别是,如果w是一个在训练期间很少出现的稀有词,因此词嵌入很差(即它与完全不相关的词聚集在一起),那么从网络的角度来看, w与许多其他词无法区分,因此不可能重现。

即使w具有良好的词嵌入,网络仍可能难以重现该词。例如,RNN 汇总系统经常用另一个名字(例如Anna → Emily)或用另一个城市(例如,德里→ Mumbai)替换一个名字。这是因为例如女性名字或印度城市的词嵌入往往聚集在一起,这可能会在尝试重建原始词时引起混淆。

简而言之,这似乎是一种不必要的困难方式来执行简单的操作——复制——这是摘要中的基本操作。

问题2的解释:重复可能是由于解码器过度依赖解码器输入(即之前的摘要词),而不是在解码器状态中存储更长期的信息造成的。这可以从一个重复的单词通常触发一个无限的重复循环的事实中看出。例如,一次换人失误德国击败德国会导致灾难性的德国击败德国击败德国击败德国……,而不是错误较少的德国以 2-0 击败德国

使用指针生成器网络更容易复制

我们对问题 1(不准确复制)的解决方案是指针生成器网络。这是一个混合网络,可以选择通过指向从源中复制单词,同时保留从固定词汇表生成单词的能力。让我们逐步了解图表!

此图显示了解码器的第三步,此时我们已经生成了部分摘要德国节拍。和以前一样,我们计算注意力分布词汇分布。但是,我们也计算了生成概率 p_{\text{gen}}​ge n​​,这是一个介于 0 和 1 之间的标量值。这表示从词汇表生成从源中复制生成概率p_{\text{gen}}​ge n​​用于对词汇分布 P_{\文本{词汇}}​vo c a b​​(我们用于生成)和注意力分布 一个a(我们用它来指向源词w_i​i​​)进入最终分布 P_{\文本{最终}}​fi n a l​​通过以下公式:

\displaystyle {P_{\text{final}}(w) = p_{\text{gen}} P_{\text{vocab}}(w) + ( 1-p_{\text{gen}} ) \sum_{我: w_i = w} a_i}​fi n a l ​​( w ) = ​ge n ​​P​vocab ​​( w ) + ( 1 − ​ge n ​​)​i​i ​​= w​∑ ​​a​i​​

这个公式只是说产生单词的概率在w等于从词汇表生成它的概率(乘以生成概率)加上指向它在源文本中出现的任何位置的概率(乘以复制概率)。

与带有注意的序列到序列系统相比,指针生成器网络有几个优点:

  1. 指针生成器网络使从源文本中复制单词变得容易。网络只需要对相关词给予足够大的关注,并使p_{\text{gen}}​ge n​​足够大。
  2. 指针生成器模型甚至能够从源文本中复制词汇表外的单词。这是一个主要的好处,使我们能够处理看不见的单词,同时还允许我们使用更小的词汇表(这需要更少的计算和存储空间)。
  3. 指针生成器模型的训练速度更快,需要更少的训练迭代来实现与序列到序列注意系统相同的性能。

通过这种方式,指针生成器网络是两全其美的,结合了提取(指向)和抽象(生成)。

通过覆盖消除重复

为了解决问题 2(重复摘要),我们使用了一种称为覆盖的技术。这个想法是我们使用注意力分布来跟踪到目前为止所涵盖的内容,并惩罚网络再次关注相同的部分。

在每个时间步吨解码器的t ,覆盖向量 c^t​t​​是所有注意力分布的总和一个^{t'}到目前为止__

\displaystyle {c^t = \sum_{t'=0}^{t-1}a^{t'}}​t ​​=​t​′ ​​​= 0​∑​t− 1 ​​a​t​′

换句话说,一个特定源词的覆盖率等于它迄今为止受到的关注量。在我们的运行示例中,覆盖向量可能会像这样建立(黄色阴影强度代表覆盖):

最后,我们引入了一个额外的损失项来惩罚覆盖向量之间的任何重叠c^t​t​​​和新的注意力分布一个^t一个​​​​:_

\displaystyle {\text{covloss}_t = \sum_i \min(a_i^t, c_i^t)}c o v l o s s ​t ​​=​i​∑ ​​m in( a ​i​t ​​, c ​i​t ​​)

这会阻止网络关注(从而总结)任何已经涵盖的内容。

示例输出

让我们看看系统在一些真实数据上的比较!我们在CNN / Daily Mail数据集上训练和测试了我们的网络,该数据集包含与多句摘要配对的新闻文章。

下面的示例显示了源文本(一篇关于橄榄球的新闻文章)以及文章最初附带的参考摘要,以及我们三个系统生成的三个自动摘要。通过将光标悬停在自动摘要中的一个单词上,您可以查看以黄色投影在源文本上的注意力分布。这会告诉您网络在生成该词时“寻找”的位置。

对于指针生成器模型,生成概率的值也以绿色可视化。将光标悬停在其中一个摘要中的单词上将显示生成概率的值p_{\text{gen}}​ge n​​代表那个词。

注意:您可能需要使用浏览器窗口缩小才能在一个屏幕上查看演示。不适用于移动设备。

源文本

源文本在这里

参考摘要

参考摘要在这里

序列到序列+注意力总结

基线模型摘要在这里

指针生成器总结

指针生成器模型摘要在这里

指针生成器模型 + 覆盖总结

指针生成器 + 覆盖模型摘要在这里

观察:

  • 基本的序列到序列系统无法复制像Saili这样的词汇外单词,而是输出未知标记[UNK] 。相比之下,指针生成器系统可以轻松复制这个词。
  • 虽然这个故事发生在新西兰,但基本的序列到序列系统错误地报告球员是荷兰人,球队是爱尔兰人——这可能反映了训练数据的欧洲偏见。当它产生这些词时,网络主要关注MunsterFrancis的名字——系统似乎很难正确地复制这些词。
  • 由于未知的原因,短语a great added to their backline被荒谬的短语a great add to their 各自的前景由基本的序列到序列系统所取代。虽然网络直接关注单词backline,但它没有被正确复制。
  • 基本的指针生成器摘要会重复出现,我们看到它每次都关注源文本的相同部分。相比之下,指针生成器 + 覆盖模型不包含重复,我们可以看到,尽管它两次使用了Saili这个词,但网络每次都处理完全不同的词出现——这是覆盖系统运行的证据。
  • 绿色阴影表明,每当网络编辑源文本时,生成概率往往很高。例如,p_{\text{gen}}当网络产生一个句号来缩短一个句子时, p ​ge n​​​高,当跳转到文本的另一部分时,例如移动到该省……并且新西兰 20 岁以下的一部分……
  • 对于所有三个系统,注意力分布都相当集中:通常一次只看一两个词。当注意力更加分散时往往会发生错误,这表明网络可能不确定该做什么。
  • 在生成摘要的第一个单词时,所有三个系统都会关注 MunsterFrancis 。一般来说,网络倾向于寻找名字来开始总结。

那么,抽象摘要解决了吗?

不远了!尽管我们已经证明这些改进有助于驯服递归神经网络的一些野蛮行为,但仍有许多未解决的问题:

  • 尽管我们的系统产生了抽象的摘要,但措辞通常与原始文本非常接近。更高层次的抽象——例如更强大、更压缩的释义——仍未解决。
  • 有时,网络没有关注源文本的核心,而是选择总结不太重要的次要信息。
  • 有时,网络会错误地编排源文本的片段——例如,报道阿根廷 2-0 击败德国,而事实恰恰相反。
  • 多句摘要有时无法理解一个整体,例如通过代词(例如she)来指代一个实体而不首先介绍它(例如德国总理安吉拉·默克尔)。

我相信未来研究最重要的方向是可解释性。注意力机制通过揭示网络“在看”什么,为神经网络的黑匣子提供了一些宝贵的光线,帮助我们调试重复和复制等问题。为了取得进一步的进展,我们需要更深入地了解RNN 从文本中学习了什么以及这些知识是如何表示的。

但这是另一天的故事!同时,请查看论文以获取有关我们工作的更多详细信息。

由带有类型主题的Jekyll提供支持

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值