多模态文本摘要及其应用实践

原创
10/28 19:30
阅读数 1.6K

点击上方“蓝字”关注我们


作者 | 郑江、聂砂、于航

编辑 | 张婵


概述


随着深度学习技术的发展,NLP 领域各项任务指标、应用效果近年来都有了显著提升,比如文本分类、命名实体识别、关系抽取、文本摘要、阅读理解等。其中,文本摘要作为 NLP 领域一项基础任务,在产生参考的有意义信息方面起着越来越重要的作用,如新闻标题自动生成、文献报告自动生成、电商营销介绍内容生成、知识内容推理、搜索结果概述等多个应用领域。


在智慧政务应用场景中,对于一些地方的扶贫产品推荐,需要为这些产品生成相应的宣传海报,在生成海报图片的过程中,对于产品标题、副标题等文案信息,也希望是自动化生成,根据实际情况,这些产品信息往往会由商家提供一个比较详细的文本信息说明,有可能还会配以图片,因此是希望从这些较细致、长篇幅的描述文本信息、结合图片等信息,自动化的生成摘要信息。


目前,虽然文本摘要在 NLP 技术领域已经有了不少方法,但在实际应用上也还存在着一些挑战,主要体现在产生摘要过程中,希望能够准确表述原文内容的同时,也能在一定程度上提升灵活性和可读性。


我们对现有主流的文本摘要方法进行了分析整理,重点分析了基于深度学习的文本摘要方法,以及结合多模态信息的摘要提取方法,并在前述场景尝试进行应用实践,这里对相关工作进行简要介绍。


自动文本摘要方法分类




图1. 文本摘要方法分类

如上图所示,文本摘要方法可以分为下述几种方法:
  1. 抽取、压缩式摘要:直接从原文中抽取已有的句子,并简化原文中的重要句子组成摘要

  2. 理解生成式摘要:改写或重新组织原文内容形成摘要

1
抽取压缩式摘要

抽取、压缩式摘要从原文种得到摘要,主要是先通过对原文的句子进行重要性评估,在此基础上再对信息冗余句子进行去重,并结合摘要长度等约束条件,得到文本摘要。 其中关键是对原文中句子重要性评估,目前有多种方法可以选择,比如通过启发式规则、通过机器学习聚类方法、图模型等方法(如 TextRank、PageRank 无向图)。

比如基于机器学习的聚类方法,它会把整篇文章看做聚类中心,先计算聚类中心的向量表示,再把文章拆分成多条完整的句子,计算所有句子向量与聚类中心向量的距离或相似度,并进行排序,取相似度得分最高的 topk 个句子作为摘要句。

再比如基于图的方法,以常用的 TextRank 算法为例,它首先把文章分割成完整的单句,其次再计算所有句子的句向量表示,第三再计算所有句向量相似度,得到转移概率矩阵,第四再将转移概率矩阵转换成图结构(句子为节点、相似度得分为边),计算句子的 TextRank 值,最后按 TextRank 值对句子进行排序,取 topk 句子作为文本摘要。
 
2
基于深度学习的抽取式文本摘要

抽取式摘要提取是有监督学习,是通过转化为序列标注任务或句子排序任务实现的。

比如 转化为序列标注任务,就是为原文中的每一个句子打一个二分类标签(0 或 1),0 代表该句不属于摘要,1 代表该句属于摘要,并基于此训练模型。 最终将所有标注为 1 的句子作为摘要。

而如果建模成句子排序任务,则是通过模型预测每个句子作为摘要的概率,选择概率最大的 topk 个句子作为摘要。 基于深度学习的抽取式摘要方法比较典型的目前是 Bert-Sum 算法,虽然 BERT 模型仅仅通过 Transformer 的 Encoder 编码器结构进行训练,并不擅长于自然语言生成任务,Bert-Sum 算法对 BERT 的输入层和 Fine-Tuning 层进行了修改,使其适用于抽取式文本摘要任务。



图2. Bert-Sum 模型结构

上图是 Bert-Sum 算法模型结构图,该模型在原有 BERT 模型基础上做了改进,在输入层将文本原文按句子分开,句子与句子中间插入 [SEP] 和 [CLS] 输入,在 Interval Segment Embeddings 中将句子分别依次设置成 EA 和 EB,最终训练整个模型,在  output 层拿到 [CLS] 标签的状态表征,在其后再接入一层全连接层、RNN 或者一层 Transformer。

通过这样的改进最终实现了一个分类任务,其作用是如果一个句子是最终文本摘要的结果,那么这个句子输出标签为 1,不是摘要则输出为 0,从而实现抽取式文本摘要提取。

3
基于深度学习的生成式文本摘要

   

除了抽取式摘要外,深度学习应用于文本摘要最突出的优势还是通过其较强的语义表征能力,建模文本中的复杂语义信息。 在这方面,采用深度学习建立生成式摘要抽取模型往往更 具优势。


图3.深度学习生成式摘要模型架构

从 2014 年 Google Brain 团队提出 Sequence-to-Sequence 序列模型,通过编码器+解码器结构可以更好的建模复杂文本信息序列到序列的映射能力。再后来,还是 Google 的科学家又将注意力机制引入了 NLP 领域,使得从原文编码再解码生成摘要时,能够更好的刻画文本序列间的相关性,从而实现更有针对性的解码,得到更合理的摘要生成结果。典型的 seq2seq+attention 摘要生成架构如下图所示:



图4.Seq2Seq+attention 的生成式摘要抽取模型架构

再后来,Google 发布 Transformer 模型(在《Attention Is All You Need》这边文章),即只用 Self-Attention 和 Encoder-Decoder,实现端到端的翻译任务。从生成式文本摘要原理看,它是把原文编码为向量,通过解码这个向量来提取信息、获取语义、形成摘要。这种模式按理和前述基于注意力的 encoder-decoder 架构是比较匹配的,但在实际套用过程中,仍旧出现了一些需要克服的问题,主要包括:


  1. OOV 问题 :源文档语料中词的数量级通常会很大,但其中经常使用的词数量一般相对比较固定,为了控制词汇表大小,在执行实际生成任务前一般会根据词的频率过滤掉一些词做成词表,这样的做法会导致生成摘要时会遇到 UNK 的词,即无法解决词表中未出现词的 OOV 问题。
  2. 可读性 :摘要生成最后的解码处理通常使用贪心算法或者集束搜索方法来做,这些方法生成的句子有时候会存在不通顺的问题,可能导致无法准确再现原始文本的事实细节信息。
  3. 重复性 :由于一些解码方法的自身缺陷,导致模型会在某一段连续 timesteps 生成重复的词。
  4. 长文本摘要生成 。对于机器翻译类生成任务,输入和输出的内容长度大致都在一个量级上,因此生成式模型执行效果一般比较理想。但对于文本摘要,部分场景下会是对多文本、超长文本进行摘要,造成源文本长度与目标文本长度相差很大,如果采用生成方式,就需要 encoder 能够较好的对源文档信息进行提取,而 decoder 需要能够较好的捕捉 encoder 输出的语义,并生成摘要句子,而这通常是一个很难的任务。
  5. 在这里我们主要整理了基于 seq2seq+ 注意力机制的改进策略类方法和基于自注意力机制的序列生成两类生成式文本摘要方法,前者较好的解决了前述的前三个问题,而后者对第四个问题给出了一些可行的解决方案。
 
基于 seq2seq+ 注意力机制的改进模型

基于 seq2seq+ 注意力机制的改进模型,目前效果最显著的就是指针网络,它是由 google 在 2018 年提出的,结合了抽取式和生成式两方的有点,通过从原文中复制词语,可以再现原文的重要细节,并保留了生成文本的能力,可以生成原文中没有的词语;此外,通过运用 Coverage 机制,对已经出现在摘要中的词语,降低其注意力权重,从而降低其再次被生成的概率,在一定程度上也解决了重复生成的问题。典型的指针网络架构如下图所示:

图5. 改进的 Seq2Seq+attention 的生成式摘要抽取模型架构

在原有 seq2seq 摘要抽取的模型架构基础上,增加了指针网络(Pointer Network)和 Coverage 机制。整体模型结构简述如下。
 
1. 编码器和解码器架构 | 注意力计算 | 损失函数设计

编码器是把文本序列输入到 Encoder(一个双向 LSTM)中,得到每个 token 对应的隐状态(Hidden State)hi(i=1,..,n)。

解码器是在 Decoder 中输入一个 <START> 标记,用于预测第一个词,从第二个词开始,用前一个词来预测下一个词。在训练阶段这也称为 Teacher Forcing。有了编码阶段输入序列的隐状态序列,以及解码阶段第n步的隐状态,可以计算注意力权重。

在论文中,使用了 BahdanauAttention 机制计算注意力分布,并通过注意力分布告诉解码器,在预测下一个词语时,编码器输入的词语哪个更重要。并以注意力分布为权重,对编码器的隐状态序列进行加权求和,得到上下文向量。在解码器中是把其输入和上下文向量拼接,再经过两个线性层,来计算输出单词的概率分布。这种处理机制也体现了注意力的本质:在解码的每一步,会关注原文中不同的单词。

解码器逐步进行预测,每预测一个输出词,会进行 loss 计算,最终再把每一步预测的 loss 求和,作为总 loss。通常的策略是对于参考样本预测概率大的词,loss 计算值小,而参考样本预测概率小的词,loss 计算值大。

2. 引入指针网络

指针网络的改进点主要包括;首先增加了对原词表中未出现词的处理,不而不是采用词表是事先构建好的,不包含输入文本中的 OOV 词,每个训练样本构建的词表除了原始的词表外,会增加训练样本输入文本的词表,也就是说每个训练样本数据的词表都是不一样的,包含 global 词表+local 词表,其中 global 词表为整个语料使用传统方法将低频词使用 UNK 表示,其它词添加到词表中,而 local 词表是每个训练样本数据输入文本的词表,与 global 词表用不同的 id_set 表示。

因此,指针网络需要在解码的每一步,都计算一个概率,它由上下文向量、解码器隐状态和解码器的输入,经过一个 sigmoid 函数计算得到。通过这个概率,来决定解码是按原词表的单词概率分布生成单词,还是按照原文单词的注意力分布复制单词,这样就解决了 OOV 问题。

3. 引入 Coverage 机制

Coverage 机制的引入,减少了摘要语句内容的重复问题,这主要是通过对 Attention 和 loss 计算进行改进。首先,在 attention 计算上,会在解码过程中,通过前一步的注意力分布求和计算得到一个 coverage 向量,来表示到上一步为止,原文中每个单词所受到的关注程度。一般如果某个单词之前受到的关注多,那么在当前步,注意力机制就会给予其它单词更多关注。其次,在 loss 计算上,论文中增加了 coverage loss,实现对之前给予太多关注的单词进行惩罚。

基于自注意力的序列到序列生成模

虽然注意力机制、seq2seq 模型,可以在一定程度上实现捕捉文本内容中的长程依赖, 但是对于超长文本的摘要,还是一个比较难的问题。 结合了自注意力机制的 Trans former 模型近来在预训练模型领域得到了广泛应用,对于生成式文本摘要类任务,如果希望引入预训练模型,一般是基于自回归语言模型,如GPT、XLNET(TransormerXL),这主要是因为生成类任务一般是从左向右预测模式,这和自回归语言模型天然匹配,而 Bert 等 DAE 模式匹配的不太好。 这里对 GPT2 和 TransformerXL 的摘要抽取工作也梳理了一下。
 
1. GPT2 摘要抽取

OPENAI 的 GPT2 模型是一个基于 Transformer 结构的语言模型,源自论文《GPT:Improving Language Understanding by Generative Pre-Training》,它是“Transformer + 预训练 + 微调”这种模式的先驱者,通过语言模型来预训练自身,然后在下游任务微调,提高下游任务的表现。目前,一个叫 GPT2_ML 的项目开源了中文版的 GPT2 模型,并包含了最大的 15 亿参数级别的模型。


图 6. GPT2 模型架构

上图所示是 GPT 模型架构,它只使用了解码器部分(Masked Self-Attention)。国内在中文版 GPT2 基础上实现了摘要抽取。其主要思路是基于多轮会话模型的训练过程进行改造,将多轮会话训练语料中的问题|答案对改为原文|摘要对训练语料。GPT2 模型的一个特点是针对每个下游任务微调的模型并不通用,换一个领域进行处理,仍旧需要进行单独的微调,这对于生成式文本摘要任务也一样,而且由于 GPT2 LARGE 模型 15 亿参数的体积,这个对算力要求是比较大的。
 

2. 引入TransformerXL(XLNet)


Transformer 虽然对长距离文本中的语义特征具有较好的表示能力,但对于长文本,为了理解其语义,可能会出现需要参考先前很多词的基础上,才能捕获超长距离语义特征的情况,这是传统 transformer 很难处理的情况,因为资源有限,传统的 Transformer 通常会将语料分割为几百个字符的固定长度的片段,每个片段(segment)之间相互独立,单独处理。Google 和卡梅后来在原有 Vanilla Transformer model 基础上,提出了transformer-XL,Transformer-XL 架构在 vanilla Transformer 的基础上引入了两点创新:

  1. 循环机制(Recurrence Mechanism)

  2. 相对位置编码(Relative Positional Encoding)


其中,循环机制是指 Transformer-XL 仍然使用分段的方式进行建模,但其引入了段与段之间的循环机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。而相对位置编码的引入有助于克服传统 Transformer 中序列位置信息仅考虑段内位置编码的情况。TransformerXL 的这些特性使其更适合长文本语义的建模,有可能对超长文本摘要、多文本摘要类任务取得更好的效果。


多模态机制文本摘要及应用



如开始介绍的,在智慧政务应用中,对于一些地方的扶贫产品推荐,需要为这些产品生成相应的宣传海报,在生成海报图片的过程中,对于产品标题、副标题等文案信息,也希望是自动化生成,根据实际情况,这些产品信息往往会由商家提供一个比较详细的文本信息说明,有可能还会配以图片,因此是希望从这些较细致、长篇幅的描述文本信息、结合图片等信息,自动化的生成摘要信息。

因此从效果上看,这些组成摘要的信息要素,会来源于文本、图片等多个方面,那么如何将视觉特性信息结合到摘要生成中,应该是如下的处理过程:
  1. 获取一定量的商品描性文本信息、商品的图片信息

  2. 获取商品的摘要信息

  3. 设计扩展的商品摘要提取模型(多模态信息处理)


1
扩展摘要模型融合视觉特征信息

基于多模态的特征表示学习目前已经在多种类型的应用场景得到了广泛应用,最典型的领域就是电商广告领域,比如电商领域的基于多模态信息的商品检索、商品推荐召回、多模态信息的智能客服交互等等。 在内容摘要领域,引入多模态信息也已有实践,那么对于商品的摘要信息生成,如果要引入多模态的处理,主要是要考虑多模态信息如何表示,这可能会涉及到多模态序列到序列模型中的注意力机制、多模态词表示、多模态预训练模型等内容。


图7.多模态特征序列学习的注意力机制

Libovický 等人在 ACL17 的论文中,提出了如何在序列到序列框架的模型下,对多模态信息进行注意力计算,如上图所示。假设不同模态数据通过不通的编码器获得向量序列隐层表示,一般可以有三种注意力机制用于对不同模态特征进行融合:

  1. 方式1—flat 模式,即平滑所有编码器端隐层表示,使用解码器隐层状态对平滑后的编码器隐层表示计算注意力得分,得到最终注意力向量。

  2. 方式2—concat 模式,利用解码器隐层状态分别对不同模态数据序列计算得分,得到各自的注意力向量,再将多个注意力向量进行拼接并转换到统一维度。

  3. 方式3—hierarchical 模式,首先得到不同模态对应的注意力向量,然后再利用解码器隐层表示对不同注意力向量计算权重分布,最后根据权重融合多个注意力向量。

该论文作者在多模态机器翻译任务上的实验发现 hierarchical 模式效果最显著,因此之后进行多模态信息融合序列学习的各类工作一般是采用 hierarchical 模式 的注意力机制。

我们在这里采用基于 seq2seq+ 注意力机制的改进模型作为 baseline,参照方式 3,引入扶贫商品的图片信息参与摘要抽取模型的训练。对图片信息通过 RESNET101 网络作为视觉特征编码器,并采用 Pooling5 层输出信息作为视觉特征,并使用视觉特征参与到模型解码器的参数初始化处理过程,原来也考虑过使用多模态的预训练模型作为特征提取器,但考虑到技术栈不熟悉以及迁移学习资源开销可能比较大,所以暂未采用。

模型的处理架构如下图所示:


图8. 政务扶贫产品摘要抽取模型架构
 
2
文本摘要训练数据生成
 

对于模型的训练数据,首先是下载业界公开的部分商品说明文本信息和摘要信息,作为基础数据。在此基础上,通过爬虫技术,参考商品摘要信息中的部分关键词要素,从外部网站上爬取和相关关键词匹配的网页,获取商品图片信息,对得到的商品信息,会进行一个人工的粗筛选,删除明显不合适的图片信息。


此外,为了进一步扩充训练数据语料,通过单词替换、回译、半监督学习等方式,进行文本语料扩充,对于图片信息,由于扩充文本语料不影响图片信息的复用,因此图片信息没有进行专门的数据增强处理。

3
训练和预测
在训练阶段,使用的是标注数据,在每一步 decode 阶段,会根据当前步的输入 X,和之前步的输出,预测当前时刻的输出,这是一个条件概率分布的计算决策过程。而在模型预测阶段,没有了样本数据,实现上是希望得到最大概率的是输出序列,目前是通过集束搜索实现。


展望



截止到投稿,我们这项工作还在进行中,目前实践的方法也比较粗浅,后续还需要从模型优化、提升训练数据质量等方面进一步提升。


 


猜你喜欢  

Python 语言中 asterisk 符号用法小结
大数据,小故事
国内外金融科技应用现状分析及发展路径探索
如何使用 JMockit 进行单元测试


觉得不错,点个在看

本文分享自微信公众号 - 金科优源汇(jkyyh2020)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
1
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
1
分享
返回顶部
顶部