写在前面
最近在梳理文本摘要相关内容,翻到一篇19年关于基于bert模型进行抽取式摘要的老文「bertsum」,在这里分享给大家。该论文一开始挂在arxiv时,为《fine-tune bert for extractive summarization》,主要介绍了如何使用bert模型进行抽取式(extractive)摘要。
paper:https://arxiv.org/pdf/1903.10318.pdfgithub:https://github.com/nlpyang/bertsum 后面,又发表于emnlp2019,为《text summarization with pretrained encoders》,增加了生成式(抽象式,abstractive)摘要部分,并对第一版论文进行了部分内容的补充与删减。
paper:https://aclanthology.org/d19-1387.pdfgithub:https://github.com/nlpyang/presumm 介绍
文本摘要任务主要分为抽象式摘要(abstractive summarization)和抽取式摘要(extractive summarization)。在抽象式摘要中,目标摘要所包含的词或短语会不在原文中,通常需要进行文本重写等操作进行生成;而抽取式摘要,就是通过复制和重组文档中最重要的内容(一般为句子)来形成摘要。那么如何获取并选择文档中重要句子,就是抽取式摘要的关键。
传统抽取式摘要方法包括lead-3和textrank,传统深度学习方法一般采用lstm或gru模型进行重要句子的判断与选择,而本文采用预训练语言模型bert进行抽取式摘要。
模型结构bertsum模型
结构如下图所示
主要由句子编码层和摘要判断层组成,其中,「句子编码层」通过bert模型获取文档中每个句子的句向量编码,「摘要判断层」通过三种不同的结构进行选择判断,为每个句子进行打分,最终选取最优的top-n个句子作为文档摘要。
句子编码层
由于bert模型mlm预训练机制,使得其输出向量为每个token的向量;即使分隔符可以区分输入的不同句子,但是仅有两个标签(句子a或句子b),与抽取式摘要需要分隔多个句子大不相同;因此对bert模型的输入进行了修改,如下:
将文档中的每个句子前后均插入[cls]和[sep]标记,并将每个句子前的[cls]标记进入模型后的输出向量,作为该句子的句向量表征。例如:文档为”我爱南京。我喜欢nlp。我学习摘要。“,输入序列为”[cls]我爱南京。[sep][cls]我喜欢nlp。[sep][cls]我学习摘要。[sep]“
采用segment embeddings区分文档中的多个句子,将奇数句子和偶数句子的segment embeddings分别设置为和,例如:文档为,那么segment embeddings为。
摘要判断层
从句子编码层获取文档中每个句子的句向量后,构建了3种摘要判断层,以通过获取每个句子在文档级特征下的重要性。对于每个句子,计算出最终的预测分数,模型的损失是相对于金标签的二元交叉熵。
simple classifier,仅在bert输出上添加一个线性全连接层,并使用一个sigmoid函数获得预测分数,如下:
transformer,在bert输出后增加额外的transformer层,进一步提取专注于摘要任务的文档级特征,如下:
其中,为句子的句向量,,posemb函数为在句向量中增加位置信息函数,mhatt函数为多头注意力函数,为transformer的层数。最后仍然接一个sigmoid函数的全连接层,
最终选择为2。
lstm,在bert输出增加额外的lstm层,进一步提取专注于摘要任务的文档级特征,如下:
其中,分别为遗忘门、输入门和输出门;分别为隐藏向量、记忆向量和输出向量;分别为不同的layer normalization操作。最后仍然接一个sigmoid函数的全连接层,
实验细节训练集构建
由于目前文本摘要的数据大多为抽象式文本摘要数据集,不适合训练抽取摘要模型。论文利用贪心算法构建每个文档抽取式摘要对应的句子集合,即通过算法贪婪地选择能使rouge分数最大化的句子集合。将选中的句子集合中的句子的标签设为1,其余的句子为0。
模型预测
在模型预测阶段,将文档按照句子进行切分,采用bertsum模型获取每个句子的得分,然后根据分数从高到低对这些句子进行排序,并选择前3个句子作为摘要。
在句子选择阶段,采用trigram blocking机制来减少摘要的冗余,即对应当前已组成摘要s和侯选句子c,如果s和c直接存在tri-gram相同片段,则跳过句子c,也就是句子c不会增加在已组成摘要s中。
数据超出bert限制
bert模型由于最大长度为512,而现实中文档长度常常会超出。在《text summarization with pretrained encoders》文中提到,在bert模型中添加更多的位置嵌入来克服这个限制,并且位置嵌入是随机初始化的,并在训练时与其他参数同时进行微调。
实验结果主要对比了lead、refresh、neusum、pgn以及dca方法,较当时方法,该论文效果确实不错,如下表所示,
在三种摘要判断层中,transformer的效果最优。并且进行了进一步的消融实验,发现采用不同的segment embeddings会给结果带来一些提升,但是trigram blocking机制更为关键,具体如下表所示。
总结个人认为该论文是一篇较为经典的bert模型应用论文,当时2019年看的时候就进行了尝试,并且也将其用到了一些项目中。
放假ing,但是也要学习。
原文标题:bertsum-基于bert模型的抽取式文本摘要
文章出处:【微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。
华为开发者大会比去年推迟1个月,在憋什么大招?鸿蒙3.0?
了解有关齐纳二极管的基础知识
京东发布第一季度未经审计财报 营收将达到176.9亿美元
英飞凌推出采用微型封装工业级eSIM卡 优化物联网设备设计
还在疑惑区块链、比特币是什么鬼么?又炒起来了?比当年牛市还疯狂
如何使用BERT模型进行抽取式摘要
人工智能的“超级风口”,打响“人工智能+山东制造”品牌
交换机,调制解调器,分离器和网桥之间的区别
“自动驾驶明星公司倒在寒冬”,何小鹏称完全无人驾驶还看不到完整的逻辑
MCU软件工程师如何改变些没有软件设计思想?
芯科科技与艾睿电子共同探讨新型智能农业照明控制平台
民用建筑电气设计中消防应急照明系统的应用
苹果申请车载VR专利:在无人车内尽情“抓僵尸”
无杂散动态范围(SFDR)
机智云新版开发者中心,零代码轻松搞定IoT小程序开发及管理
电动车锂电池中使用 Thermistor热敏电阻温度传感器的作用
位移传感厂商:上海新茂半导体有限公司简介
iPhoneSE2或在明年上半年推出 LCD屏幕是由夏普生产
如何避免二极管过载损坏
要想快速充电,必先从充电装置入手