【NLP】一文详解生成式文本摘要经典论文Pointer-Generator

2023-10-29

写在前面

Pointer-Generator Network 以及微软的 Unilm 是小喵在20年所研读的自动文本摘要方向系列论文中的两篇,到今天为止个人依旧认为它们是非常值得一读的。今天我们先分享 Pointer-Generator Networks

简单地说,Pointer-Generator Networks 这篇论文的idea以及背后的动机具备说服力。它直接抛出问题,给出解决办法,并且解决办法的motiviation以及本身的描述都不会让人困惑,接受度强。

需要注意的是,Pointer-Generator Networks 所针对的是 长文本摘要(multi-sentences summaries、longer-text summarization),而不是 短文本摘要(headline、short-text summarization)。

  • 本文关键词:自动文本摘要、文本生成、copy机制、attention

论文名称:《Get To The Point:Summarization with Pointer-Generator Networks》

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

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

1. 背景

1.1 为什么要做文本摘要

简单地说就是信息过载,再加上时间就是金钱。大家可能不愿意同时也没有那么多时间从头到尾去看一篇或许自己并不感兴趣的文章。

这个时候,就需要咱们的 NLP 的技术了。可以利用 摘要/关键词/实体识别 等技术对文章进行加工处理获得一些概括性信息。这些信息虽然短,但表达了文章的大意、关键信息,可以让读者对文章有个大体的认识,帮助读者更快地过滤信息,进而选择自己更感兴趣的文章再去了解细节。

1.2 文本摘要的主要技术路线

自动文本摘要主要有两条技术路线:抽取式生成式

(1) 抽取式文本摘要

抽取式文本摘要 通常是从原文中抽取短语/词/句子形成摘要,也可视为二分类问题或者是重要性排序问题。

其优点是概括精准且语法正确。但是,抽取式的结果不符合大多数情况下人阅读以后做总结/概括的模式:建立在理解的基础上,可能会用原文中的词,也可能会用新词(未出现在原文中的词)来做表述,即允许一定的用词灵活性

(2)生成式文本摘要

生成式文本摘要 类似的任务有:标签生成关键词生成等。通常,生成式任务的模型基础就是 seq2seq/encoder+decoder,也就是一个序列到序列的生成模型。attention 出现以后,生成式的基础模型就是 seq2seq+attention

其优点是相比于抽取式而言用词更加灵活,因为所产生的词可能从未在原文中出现过。总的来说,与我们在阅读文章后为其写摘要或总结的模式一致:基于对原文的理解,并以相较于原文更简短的语句来重述故事。

2. 问题

根据第1部分所述,似乎生成式相比于抽取式更加优越。其实不然,因为我们还没有提生成式的缺点。那这一节,我们就来看看生成式弱在哪儿?

2.1 生成式的基本原理

4ddb82f2065634c1d8306e26aa46ea3b.png

生成类模型的基本建模思想是语言模型

这是一个序列生成过程:每个time step(时间步)都在一个fixed vocabulary(预先设定好的固定词库)中选一个词。实际上,每个时间步都在做多分类,我们通过计算固定词表中的每个词在当前条件下出现的概率,来选出当前时间步下应该出现的词。

2.2 生成式模型的问题

总的来说,抽取式技术毕竟用的就是原文的内容,所以通常在语法层面的正确性以及对原文概括的准确性上比较占优势;而生成式的灵活性则导致了生成式模型普遍具有的问题:易重复还原事实时不可控:可能生成语义不完整/不连续的句子,或者压根就跟原文表达的意思相去甚远;OOV问题。

(1) OOV

既然是 fixed vocabulary,那么必然就会有词 out of the fixed vocabulary。换句话说,生成模型存在 OOV 问题:无法生成OOV的词,只能生成固定词表中的词。

(2) 重复性

另外一点就是重复性,模型可能在某些time step上生成先前time step 已经生成过的词。

(3) 语义不连贯、语法逻辑性低、重述准确性不高

每一步去 fixed vocabulary 中选词,最终形成摘要,这里面就会存在生成的摘要语义不连贯、语义不通顺。相较于抽取式,更为严重的问题就是重述原文的准确性不高。

3. 核心思想

那么如何解决生成式模型的这些问题,以提高生成式摘要的质量呢?

其实,我们可以看到生成式的这些缺点都是相较于抽取式而言的。那么融合抽取模式,是不是就可能既保留了生成式的灵活性,又将生成的摘要的质量向抽取式的质量标杆靠近了些呢?

答案是可以的。那究竟怎么做呢?

3.1 hybird pointer-generator network

针对重述语义不正确/精确的问题,同时也针对OOV问题,设计了一个个融合模型 pointer-generator

模型基础依旧是 seq2seq+attention,这部分作为 generator;此外,引入了 pointer。所以,它既能基于 pointer 从原文中选词,也能基于 generator 生成词。

注意这里的 generator 本质上还是选词,但是是基于固定的词库通过 softmax 来选。词库本身是在训练模型时从训练数据统计构造的。

3.2 coverage-mechinism

针对重复性问题,设计了coverage-mechinism。其本质上是会跟踪记录在当前step前已经被选过的词,这样能在后续step生成词时弱化对这部分的关注,从而减少重复性问题。

4. 模型细节

3b4518e4bf2ed979e55b7b496fcc7da7.png

4.1 baseline model:seq2seq+attention

这部分主要分享其思想,就不再赘述相关公式了。

  • 编码器(encoder): 双向序列模型,如双向lstm/rnn

  • 解码器(decoder): 因为解码的过程是一个马尔可夫过程,要确保不能见到将来的信息,所以解码器一般是单向序列模型,如单向的lstm/rnn

  • 注意力机制(attention): 基于当前解码步的decoder state 以及编码器所有时刻的 hidden state 计算 attention score,即对编码器的所有时刻 hidden state 的关注程度。然后基于 attention score 加权编码器端的 hidden state 形成当前解码步的 context vector。解码步再基于这个 context vector 和当前 decode state 去生成词。

4.2 pointer-generator network

(1) 思路

要抽取原文的内容,加一个 pointer 就可以,它的作用是告诉我们当前 time step 应该从原文中选择哪一个词。

另一方面,生成的灵活性我们也不能丢掉。那么问题就可以这样

转换成这样:

其中,就是生成式的模型,是抽取式的模型。也就是说每个 time step的词一定概率我们用生成获取,一定概率我们用抽取获取。

进一步还可以更加 soft,不是非此即彼,而是二者加权表决。怎么做呢?

(2) 解法

在决定生成哪一个词时,取二者的加权和:

402 Payment Required

其中:

  • 生成式模型,也就是公式中的,计算方式和 baseline model一致;

  • 抽取式模型,利用pointer来实现,也即公式中的,这里就是简单地就是利用生成模型计算出的attention求和,表示所有位置处对该词关注度的和。

  • 则利用contex vectordecode statedecode input来计算,表示是生成式的权重;代表抽取式的权重。

这里相当于是扩展词库了,利用待抽取摘要的文章中的词把 fixed vocabulary 变成 extened vocabulary,模型有能力可以生成 OOV的词。

对于OOV的词来说,它的,所以是利用pointer从原文中获取;而对于未出现在原文中的词来说,我们自然有它的,所以是依靠generator从固定词库中获取。对于既出现在原文又出现在词库中的词,当然就是两部分一起作用。

4.3  coverage-mechinism

(1) 思路

说了这么多,还有一个待解决的问题,就是repetition(重复性问题)。

要怎么解决呢。简单且直观的做法就是追踪前面已经用过的词,这样就能避免或者说一定程度上减缓重复。

(2) 解法

具体怎么做呢,就是利用一个coverage vector综合计算每个词在当前时间步前受到的总的关注度。这里呢,主要就是累加各个时间步的 attention score:

这个可以这么理解:pointer的部分不就是利用attention score 来选词的吗(选 attention score 大的词),所以我把这个记住,然后加一个损失惩罚来惩罚选词的重复性:

显然只有 attentioncoverage vector 在每一个位置上都极大差异,这个损失才能最小(有上界的损失)。所以这个损失可以避免attention的重复:也就是当前时间步尽可能被忽视在当前时间步之前受关注度大的词(极大可能已经被选过的词)。

此外,对于generator部分,我们可以动的就是改进attention的计算

每一步,把先前的这个coverage vector考虑进去,让它起作用:期望能够生成不一样的attention score, 从而产生不一样的context vector,进而在解码生成词的时候不一样

最终每一步的损失即为两部分损失和,一部分为抽取式的,另一部分为生成式的负对数似然:

402 Payment Required

而总的损失即为:

总结

好了,关于生成式摘要论文 pointer-generator Networks 的内容就到这里了。如果本文对你有帮助的话,欢迎点赞&在看&分享,这对我继续分享&创作优质文章非常重要。感谢

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【NLP】一文详解生成式文本摘要经典论文Pointer-Generator 的相关文章

随机推荐

  • Unreal4引擎开发学习日志

    Unreal4引擎开发学习笔记1 相关说明 本游戏引擎学习日志是笔者根据网上相关教学视频所写 是对视频内容的精炼与总结 如果您认为笔者所写不清晰明确 可以访问以下链接 Unreal入门第一季 虚幻C 基础训练 虚幻4引擎介绍 虚幻4是一套为
  • 插件编写傻瓜教程>>VC6.0

    gt gt 写在前面本教程主要讲解如何用按键精灵自带的模版编写插件 请大家在教程没全部写完之前不要跟贴 谢谢合作 需要的工具 VC6 0 编辑语言 C gt gt 初步接触1 安装VC6 0 建议不要使用创天的汉化版 2 解压插件自带的模版
  • 软件定价:我们深谙其道吗?

    本文为翻译初稿 更多精彩内容 敬请关注 高效能程序员的修炼 人民邮电出版社 一段时间以来频繁光顾iPhone应用商店 以致于产生了个副作用 我开始从根本上改变了对软件定价的看法 这么多优秀的iPhone应用程序 要么是免费的 要么只卖区区几
  • 关于在windows使用msys2 + mingw + gcc/g++ 编译godot的笔记

    关于在windows使用msys2 mingw gcc g 编译godot的笔记 编译参数 1 target release debug release debug 2 多线程参数 j数字 3 profile是自定义构建参数 可以启用或者禁
  • python中找出numpy array数组的最值及其索引介绍

    转自 微点阅读 https www weidianyuedu com 在list列表中 max list 可以得到list的最大值 list index max list 可以得到最大值对应的索引 但在numpy中的array没有index
  • Echarts饼状图属性设置大全

    1 标题设置 title text 学生生源地来源分布图 subtext 模拟数据 x 设置水平安放位置 默认左对齐 可选值 center left right number x坐标 单位px x center y 设置垂直安放位置 默认全
  • FPGA--IP核之RAM

    RAM 的英文全称是 Random Access Memory 即随机存取存储器 它可以随时把数据写入任一指定地址的存储单元 也可以随时从任一指定地址中读出数据 其读写速度是由时钟频率决定的 RAM主要用来存放程序及程序执行过程中产生的中间
  • 深度学习理论总结(1)

    0 前言 为了在暑假能更好的发展自己 鉴于对深度学习的浓厚兴趣 楼主开始学习深度学习的相关知识 本系列内容是在楼主学习吴恩达老师的深度学习课程后进行的总结 使用的程序软件为python 如有纰漏还请各位大佬指出 我将虚心接受 1 深度学习概
  • Visual Studio Code常用插件详解

    文章目录 前言 VS Code必备插件 1 IntelliCode 2 IntelliCode API Usage Examples 3 Settings Sync 前端必备插件 1 Auto Close Tag 2 Auto Rename
  • USB移植(FLASH)

    USB移植 FLASH 一 说明 准备好USB源文件 可参考正点原子USB读卡器实验例程 下载正点原子资料或光盘资料 例程在 STSW STM32121 STM32 USB FS Device Lib V4 0 0 Projects Mas
  • UID卡、IC卡、ID卡、CUID 卡、FUID 卡、UFUID 卡 有什么区别?

    生活中 我们经常用到门禁卡 考勤卡 电梯卡还有停车卡 这些功能是怎么实现的呢 这是靠卡里封装的芯片和线圈来实现各种功能 不同的芯片频率 容量 读写性各不相同 常见的是IC卡还有ID卡 还有一种叫UID的卡 许多客户不了解UID卡是什么 有什
  • Mac:Split文件分割命令

    1 背景 在宁波银行工作 发现一个包太大传不了 因此要转成小文件 2 分割文件 split b 300m cheetah node v1 1 0 SNAPSHOT tgz cheetah node v1 1 0 SNAPSHOT tgz 那
  • elementUI的下拉框

    效果图 代码
  • [Obsidian]懒人必备插件附使用教程

    最近才知道了Obsidian 就使用Obsidian整理了一下笔记 评价是Obsidian确实是一种挺好的整理笔记的东西 主要就是想复习时候翻书其实挺麻烦 Obsidian提供了链接功能 可以比较好地查找到以前的知识 虽说笔记多了容易不太好
  • 用python实现神经网络

    一 BP神经网络 这里介绍目前常用的BP神经网络 其网络结构及数学模型如下 x为 n 维向量 y 为 n 维向量 隐含层有 q 个神经元 假设 N 有个样本数据 1 2 y t x t t 1 2 N 从输入层到隐含层的权重记为 1 2 1
  • 关于交换机端口的Trunk和Access模式的分析与验证

    1 理论简析 以太网交换机的通信是基于端口的通信 其端口类型分为Trunk port 干道端口 Access port 接入端口 Hybird port 混合端口 三种 Access port一般用于交换机和用户PC主机相连 连接用户主机和
  • MATLAB热力图绘图及颜色更改

    绘制热力图 定义数组p 定义一个数组 p 0 0 249531282218369 0 538162020204790 0 00892397889578578 0 224699560921490 0 000149245738789272 0
  • 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止 所以如何解决滑块问题已经成为自动化测试不可或缺的 今天以网易易盾网站的滑块举例 https dun 163 com trial sense 要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用p
  • RobotFramework(一)基本介绍

    前言 本人自2020年11月从制造业转行软测 以此记录点滴学习记录 希望大家多多指导 批评指正 一 RobotFramework是什么 RobotFramework是一款python编写的功能自动化测试框架 具备良好的可扩展性 支持关键字驱
  • 【NLP】一文详解生成式文本摘要经典论文Pointer-Generator

    写在前面 Pointer Generator Network 以及微软的 Unilm 是小喵在20年所研读的自动文本摘要方向系列论文中的两篇 到今天为止个人依旧认为它们是非常值得一读的 今天我们先分享 Pointer Generator N
Powered by Hwhale