自动文本摘要技术

622 阅读9分钟

随着互联网带来的信息爆炸,文本内容过载问题日益严重。我们每天都在公众号,百度等信息流平台上阅读大量新闻等文本内容且这些文本内容质量不一,鱼龙混杂,如何对文本内容进行过滤,快速定位到对自己有用的关键信息,成为困扰很多人的问题。因此,对各类文本进行一个“降维”处理显得非常必要,而自动文本摘要就是其中一个重要的手段。

本文简单介绍了经典的文本摘要方法,包括抽取式摘要方法和生成式摘要方法,以及神经网络模型在文本摘要中的应用,希望能给从事自然语言处理等相关研发工作的同学带来一些启发或帮助。

1. 文本摘要简介

文本摘要旨在将文本或文本集合转换为包含关键信息的简短摘要。 文本摘要系统按照输入类型,可分为单文档摘要和多文档摘要:

  • 单文档摘要从给定的一个文档中生成摘要;
  • 多文档摘要从给定的一组主题相关的文档中生成摘要。

按照输出类型可分为抽取式摘要和生成式摘要:

  • 抽取式摘要:从源文档中抽取关键句和关键词组成摘要,摘要信息全部来源于原文;
  • 生成式摘要:根据原文,允许根据语义理解生成新的词语、短语来组成摘要。

此外,按照有无监督数据,文本摘要可以分为有监督摘要和无监督摘要。根据输入数据领域,文本摘要又可以分为新闻摘要、专利摘要、论文摘要等等。

textsumma.png

自动文本摘要可以看作是一个信息过滤和信息压缩的过程,我们将输入的一篇或多篇文档自动压缩为一篇简短的摘要,该过程不可避免地存在信息损失,但要求我们保留尽可能多的重要和关键的信息,文本摘要属于有损压缩。自动文摘模型通常包含对输入文档的理解要点的筛选以及文摘合成这三个部分。其中,文档理解是关键部分,对文档的理解可浅可深,也影响到了摘要的效果,很多自动文摘系统只需要进行浅层的文档理解,例如段落划分、句子切分等,也有文摘系统需要依赖句法解析、语义角色标注甚至深层语义分析等技术。

2. 文本摘要模型介绍

文本摘要从生成方式上可分为抽取式摘要和生成式摘要两种模式。抽取式摘要通常使用算法从源文档中提取现成的关键词和关键句作为摘要句。在通顺度上,抽取式摘要一般优于生成式摘要。但是,关键词和关键句的判断有时候是困难的,因此,抽取式摘要可能会引入过多的冗余信息,无法体现摘要本身的特点。而生成式摘要则是基于NLG(Natural Language Generation)技术,根据源文档内容,由算法模型进行语义分析和理解,生成自然语言描述,而非直接提取原文的句子。

目前,生成式摘要很多工作都是基于深度学习中的序列到序列(Seq2Seq)模型。最近在以BERT为代表的大量预训练模型出世后,也有很多工作集中在如何利用预训练模型来做NLG任务。下面分别介绍上述两种模式下的经典模型。

2.1 抽取式摘要模型

抽取式摘要模型从源文档中抽取关键词或关键句组成摘要。这种方法在语法和句法上错误率较低,保证了一定的效果。传统的抽取式摘要方法使用TextRank,文本聚类等方式完成无监督摘要。目前流行的基于神经网络的抽取式摘要,往往将问题建模为序列标注和句子排序两类任务。下面首先介绍传统的抽取式摘要方法,接着简述基于神经网络的抽取式摘要方法。

传统抽取式摘要方法

Lead-3方法

通常结构清晰的文档,如学术论文,新闻报道等常常会在标题和文档开始就表明主题,因此一个最简单的摘要提取方法就是抽取文档中的前几句或前一段作为摘要。常用的方法为Lead-3,即抽取文档的前三句作为文档的摘要。有时候最简单的方法就是最有效的方法,Lead-3方法虽然简单直接,但往往也能解决大多数的文本摘要问题。

TextRank算法

TextRank算法仿照搜索引擎用到的PageRank算法,将每个句子作为节点,计算句子间相似度,并构造无向有权图。使用边上的权重值迭代更新节点值,然后计算每个节点的得分,最后,得分最高的节点即被认为关键信息,我们只需要选取N个得分最高的节点,作为摘要即可。

textrank.png

pagerank.png

聚类算法

将文档中的句子视为一个点,将所有句子进行聚类,即得出聚类中心,聚类中心的句子即可作为文本摘要。例如Padmakumar和Saran将文档中的句子使用Skip Thought Vectors和Paragram Embeddings两种方式进行编码,得到句子级别的向量表示。然后再使用K均值聚类和Mean-Shift聚类进行句子聚类,得到N个类别。最后从每个类别中,选择距离质心最近的句子,得到N个句子,作为最终的摘要。

clustering.png

基于神经网络的抽取式摘要方法

近几年,神经网络在自然语言处理已经获得巨大成功,基于神经网络的抽取式摘要方法相比比传统的抽取式摘要方法效果和性能明显更高。基于神经网络的抽取式摘要方法主要分为序列标注方式和句子排序方式,其区别在于句子排序方式使用句子收益作为打分方式,考虑句子之间的相互关系。

序列标注方式

序列标注方式即将文本摘要的提取建模为序列标注任务进行处理,其核心想法是:为原文中的每一个句子打一个二分类标签(0或1),1代表该句属于摘要,0则代表该句不属于摘要。最终的摘要即由所有标签为1的句子构成。这种方法的关键在于获得句子的标签,即将句子编码为一个向量,根据该向量进行二分类任务,例如SummaRuNNer模型,使用双向GRU分别建模词语级别和句子级别的表示(模型如下图所示)。蓝色部分为词语级别表示,红色部分为句子级别表示,对于每一个句子表示,有一个0或者1标签输出,代表其是否是摘要。

biaozhu.png 该模型的训练需要监督数据,即预先标注好的数据,现有数据集往往没有对应的句子级别的标签。但是,我们可以通过启发式规则获取句子的标签。

具体方法为:首先选取原文中与标准摘要计算ROUGE得分最高的一句话加入候选集合,接着继续从原文中进行选择,保证选出的摘要集合ROUGE得分增加,直至无法满足该条件。得到的候选摘要集合对应的句子设为1标签,其余为0标签。

句子排序方式

抽取式摘要还可以建模为句子排序任务,与序列标注任务的不同点在于,句子排序方式针对每个句子输出其是否是摘要句的概率,最终依据概率,选取Top N个句子作为最终摘要。虽然任务建模方式(最终选取摘要方式)不同,但是其核心关注点都是对于句子表示的建模。

序列标注方式的模型在得到句子的表示以后对于句子进行打分,这就造成了打分与选择是分离的,先打分,后根据得分进行选择,没有利用到句子之间的关系。NeuSUM提出了一种新的打分方式,使用句子收益作为打分方式,考虑到了句子之间的相互关系。其模型NeuSUM如下图2所示:

juzipaixu.png

2.2 生成式摘要模型

抽取式摘要在语法、句法上有一定的保证,但是也面临了一定的问题,如:内容选择错误、连贯性差等问题。生成式摘要允许摘要中包含新的词语或短语,连贯性较高。随着近几年神经网络模型的发展,序列到序列(Seq2Seq)模型被广泛地用于生成式摘要任务,并取得一定的成果。下面介绍生成式摘要模型中基于要点的生成式摘要模型Leader-Writer。

Leader-Writer模型主要通过挖掘对话中存在的要点 (如背景、结论等) 来生成摘要。生成式摘要现存的几个问题主要有:

  • 逻辑性,例如在客服对话中,背景应该在结论之前;
  • 完整性,即对话中存在的各个要点都应该在摘要中存在;
  • 关键信息正确,例如“用户同意”和“用户不同意”虽然只有一字之差,但含义完全相反;
  • 摘要过长问题。为了解决这些问题,本文提出了如下解决方案:

Leader-Writer模型

  1. 引入要点序列预测辅助任务,并利用对话的要点序列信息引导模型生成具有逻辑性、完整性、关键信息正确的摘要。如下图所示,Leader-Writer模型用一个层次的Transformer编码器编码每个话语,用Leader解码器对每个话语的要点进行分类,并使用Writer解码器进行摘要生成。Leader解码器解码的输出作为Writer解码器初始状态的输入,以利用不同对话片段的要点信息。
  2. 引入Pointer-Generator模型,以生成更长、信息更丰富的摘要。

leadwriter.jpeg

3.总结和展望

深度学习及其在自然语言处理的应用使得自动文本摘要技术的效果和性能都有了大幅提升,如何让人们更便捷的获取信息,找到所求,用最简单的方式理解复杂的世界,一直是很多技术人苦苦追求的。我们看到了人工智能的曙光,同时期待着新技术带给我们更加便捷和美好的生活。