生成式文本摘要分析实践

1     短版

自动生成文本摘要主要有两类方法,第一类是通过关键词,位置等多种特征,摘取原文内容做摘要,简称“摘取式摘要”。第二类是通过深度学习模型学习大量数据进行编码,解码,产生抽象的摘要内容,摘要内容来源不限于原文内容,简称“生成式摘要”。

 

第一类方法是传统摘要方法,常见应用于新闻摘要,但是该方法扩展性,通用性很有限,难以适应多变的文本内容。

 

第二类方法是最新基于深度学习的方法,可以应用于各种文本,不过生成的摘要通常是一句话,不适合生成比较长的摘要(难度太大)。这种方法是近两年,学术界研究的热点内容。主要模型就是深度学习的模型之一,Seq2Seq 模型,同时加上Attention学习机制。其中Seq2Seq模型,是由两个深度学习模型组成,一个负责对原文进行编码(encode),一个负责对摘要进行解码(decode),通常采用RNN模型(包含LSTM,GRN等变种模型),也可以使用其他深度学习模型。

 

Seq2Seq模型示意图:


由于近些年深度学习的发展很热,在2015年到2016年期间,学术界出现了大量基于深度学习(主要是Seq2Seq模型)做文本摘要的论文,论文中描述的生成式摘要,可以得到比较好的结果。而且Google的Tensorflow机器学习框架,也在业界越来越流行。本次分析测试“生成式”文本摘要模型,主要目的是,验证分析,目前业界最新的深度学习技术,在文本摘要领域,具体的应用效果,能否达到商用要求,能否具体应用于某个领域。同时,实践分析Tensorflow框架,测试该框架的实用效果,运行效率等。


下文描述的文本摘要,全部是基于第二类“生成式”方法,实践测试分析了多个最新的生成式文本摘要模型,重点是Google的textsum模型(地址:https://github.com/tensorflow/models/tree/master/textsum),该模型基于Tensorflow开发,是一个Seq2Seq(LSTM)模型+Attention学习机制。encoder每层是个双向LSTM,默认4个隐层,每层256个神经元,每个神经元是基本LSTM单元(无peephole),fw前向,bw后向神经元定义相同。输入序列长度是文章的长度(截取文章的前100个句子,每个句子的每个词做词向量embedding处理成128维)。decoder也是4层RNN,每层是attention_decoder,神经元是256个LSTM。最后使用BSDecoder做解码得到摘要句子(BSD:Beam search decoder. 集束搜索解码。),模型输出是30个词以内的摘要。该模型参考论文:《A Neural Attention Modelfor Abstractive Sentence Summarization》。


初步结论:


1、RNN模型的训练效率很低,经Google的textsum模型作者确认,


他们的模型,使用了10台服务器,每台4个GPU,约400万英文训练数据,训练了一周,训练步数是a few million steps,才得到一些相对比较好的结果。


我用一台x86服务器,240多万的中文微博数据,训练30天,训练步数是82800 steps,还是远远不够的。


2、Seq2Seq可以生成抽象的句子,但是,生成指定文章的摘要是很困难的。我的分析是,该模型来源于机器翻译领域,机器翻译领域,A语言与B语言中词有对应关系的语料是很多的,只要词有对应关系,大多数时候是可以通过词的对应来完成翻译的,所以通过大量数据学习,学习上下文语言环境,可以得到一些编码对应关系,来完成机器翻译。 但是文本摘要,文章与摘要的对应关系是独特一对一的关系,虽然总体数据量大,但是独特对应关系的训练数据是不多的,摘要不仅要看词是否准确,还要看多个词组成的句子,是否能表达正确的语义,而且还要和原文的语义对应,这是非常难的。所以,要让计算机,学习到文章的表达含义,encode,再decode到摘要,还是很困难的事情。(类似的,生成式问答QA模型,也有同样的问题。)


3、从我测试的已有结果看,Seq2Seq生成的摘要,并不稳定,有一些看起来比较好的结果,但是很多是不好的结果。因为该模型很复杂,训练时间很长,调参数是很困难的事情。而且,由于此类模型的可解释性比较差,针对具体应用场景和训练数据的调优也很困难。而且文本摘要的质量,客观地自动评价是比较困难的,很多需要主观评价,所以自动筛选优质的摘要也是很困难的。所以,“生成式”摘要在商用场景下会面临很多困难。


4、Google的Tensorflow框架,目前流行程度很高,相关资源很多。不过,该框架基于函数式编程模式,调测比较困难,同时该框架定义的Tensor,Graph, Session机制比较灵活,而且有大量封装函数,使用起来很灵活多变,同时调测难度也比较大。 对于机器学习,特别是深度学习的各种模型,有大量封装好的函数,开发时,模型的定义和使用比较简单,不用开发者处理模型开发的细节问题。该框架还在发展中,发展比较快,0.8版本到0.9版本就发现有接口变更。

 

5、Tensorflow框架可以基于分布式,GPU运行。本次测试RNN模型,在CPU的服务器上运行,非常慢,所以,配置GPU的服务器很有必要。测试运行Tensorflow时,简单估计,运行效率不高,没有做深入的对比分析,对于性能分析网上有一些文章可以参考。


总体结论:基于深度学习的Seq2Seq模型,做生成式文章摘要,目前还不能达到商用要求。


Tensorflow的流行程度很高,可用资源很多,但是开发调测门槛比较高,运行效率不高,目前可以基于该框架做简单模型应用。



【作者:吴斌】

猜你喜欢

转载自blog.csdn.net/qq_37175369/article/details/80916692