壹沓AI探索:五类主流文本生成方法实测
近期,壹沓科技通过对如LSTM,GRU,transformer-xl,GPT2等主流的文本生成方法进行实验探索,对深度学习的文本生成算法和工具从行业领域应用视角开展了测评,本文简单介绍了几类方法的基本思想和实验结果,从中可以直观地感受到人工智能在NLP领域快速的发展。
在深度学习的文本生成算法和工具流行之前,NLP文本生成的主要任务是文本摘要(从一篇文章中提取出一篇文章的中心,即摘要的自动生成),文本摘要生成大体的思想是先去除文章中的一些停用词,对句子的相似度进行度量,计算相似度得分,对其进行迭代直到误差小于某个阈值。针对得到的关键语句进行排序从而得到想要的摘要。自动摘要的生成应用场景如自动报告生成、新闻标题生成、搜索结果预览等。伴随大数据条件下训练大规模的语料网络的发展,为给定的一句话开头或者关键词来进行生成一篇可以阅读的文章创造了条件。
壹沓认为:目前此类自然语言处理中关于文章的生成大多依赖于文本预测的基本方法,大体思路就是在给定的一句话或者关键词来预测下一个词是什么,在拿预测出来的下个词加上之前的词再作为输入进行预测下个词,以此类推。但如果这样类推下去,当文章长度一长便会出现问题,一是输入过长;二是输入文本过长,可能前面部分内容并不需要保留,而只需要当下的几句话(长时间依赖或遗忘不相关的数据)。
先介绍一下关于文本(词)预测的两种思想,第一种是针对已有大量的数据集进行训练,用训练好的模型去预测下一个词是什么,具体需要预测多少个词,这个可以根据需要进行设置(步长)。
上图中缺少一个字,用模型去预测该字是什么。根据已有的句子去训练预测,这里就会把前面的语句当作输入来进行预测空格处的字。这里有两个问题需要注意,一是输入的长度多长。二是空格处后面的句子对预测会不会有帮助。
有两个情况,第一种情况:当预测的时候,如果只输入“我会说__语”前面的一句话,这个时候空格处预测大概率是“英”,但是这个也要看训练文本数据集中英语这个词出现的频率。但是如果考虑到“我出生在法国”这个时候预测出来“法”语,才是我们想要的答案。这里就是长时间依赖问题。第二种情况,考虑到双向预测,把要空格后面的语句也作为输入,这个时候可能也会预测到我们想要的答案(双向学习)。
壹沓NLP团队意识到双向学习的提出是源于有时候如果我们只看前面的信息来预测后面的信息是不够的。
比如:我今天不舒服,我打算____一天。
如果只根据前面的语句,“不舒服”,可能预测出“去医院”,“睡觉”,“请假”等等。但如果加上后面的“一天”,能选择的范围就小很多,“去医院”这种就不能再选择,而“请假”,“休息”之类的词被选择的概率较大。这体现出的就是双向学习的重要性。这里放个网上的图供参考:
以上说到的两个问题,一是长时间依赖、二是双向的问题。现有比较好的文本生成模型主要是用来解决这两个问题,还有在对文本处理上下功夫。下面针对目前研究的五种模型进行论述和总结,以及提出一个新的角度去更好地解决文章生成,能够更好的去控制文章的质量。
阅读本文你可以了解到以下内容:
(1)如何用生成模型产出文章。
(2)五种生成模型的实验效果。
(3)从一个新的角度(文章要素控制)去生成文章。
(4)从应用角度来看文章生成。
1.LSTM+One-hot
壹沓推荐优先上手实验最简单的神经网络模型。首先对文本文件进行读取,将文本向量化,再采用one-hot编码为三位向量。这里为了能够快速地得到实验结果以及便于和其它模型对比,这里模型参数设置比较宽松(训练时间短)。
LSTM模型+ one-hot 编码来进行预测,主要面临着长时间依赖以及one-hot编码会造成稀疏性,需要的内存空间比较大,在表达语义方面也有所欠缺。但总的来说还是可以进行预测,不过需要注意的是如果输入的语句或者关键词,是在训练集中未出现的词,通过概率计算可能会得不到下一个词。如果有这种情况出现,可以通过以下方法解决,一是加入解决方法,二是增大训练集(足够大)。
用训练好的模型去对文本进行生成,主要步骤包括以下:
(1)将已生成的文本同样进行one-hot编码,用训练好的模型计算所有字符的概率分布。
(2)根据给定的 temperature 得到新的概率分布(可以省略)。
(3)从新的概率分布中抽样得到下一个字符。
(4)将生成的字符加到最后,并去掉原文本的第一个字符,作为输入再预测下一个词。
其中(2)步骤提到的temperature是指采样策略,当设置这个参数的时候即表示使用采样策略。考虑到语言模型中的预测输出就是字典中所有词的概率分布中最大的那个词,这里加上采样策略就是为了生成的时候可能并不总是要概率最大的那个词(比如:前文说到的“__语”预测)。如果严格按照概率最大生成模型,那么最后预测出来的文章可能就是某某人讲话稿了。因此引入采样策略,让其从概率分布中选择词的过程引入一定的随机性,进而让文本变得有趣,采样参数temperat分布为:
实验数据集来源于:搜狐新闻数据集中包括汽车内容的文章,6539篇文章。
数据集连接:https://www.sogou.com/labs/resource/cs.php
备注:该数据集从网上采集,包含很多调查问卷类型的文章,训练出来的模型,在预测文章时可能会出现一些跟汽车相关的奇怪数字或者语句。
样例输入:简短的语句。
样例输出:预测下文。
从预测效果来看,在不加采样策略下(概率最大来选),续写出来的文章还是具有一定的可阅读性。但在采样的策略下面,输出内容与不使用采样策略效果有所不同,当采样参数设置越大,随机性越强,生成的语句会更奇怪,不过可以根据需要适当调整。从整理效果来算,如果给定一些关键词,而不是从测试集中选择一句让其续写,效果会相对差一些。原因主要是实验训练的篇数少(考虑到训练时间的问题,只是用了汽车文章中一小部分),从结果来看生成的效果看起来不顺畅,主要是源于数据集的问题。
2.双向 GRU+Embedding
壹沓NLP团队认为该模型与第一个模型LSTM主要的区别有三点:
(1)LSTM模型是基于字符级别的语言模型,每个句子都是以字符为单位,而双向GRU加Embedding为词组为单位进行训练,使用jieba分词来将句子分成词组(当然也可以使用其它方式进行分词)。
(2)使用词嵌入(Embedding)代替One-hot编码,节省内存空间,同时词嵌入可能比one-hot更好地表达语义信息。
(3)双向GRU代替LSTM,从正向和反向两个方向来进行学习训练。GRU是LSTM的一个变种,相比于LSTM优点是:参数更少更容易收敛,性能上有所提高。
双向GRU+Embedding模型输入的时候对输入样本进行分词,因此在进行输入的时候不能保证输入样本一致,这里样例输入与 LSTM 模型有一些出入。采样策略与 LSTM 模型使用的参数保持一致,从实验结果来看,在不启用采样策略下,输出的结果比较符合逻辑。可见,启用采样策略,输出结果有意想不到的表达方式。
3.GRU+Embedding+Conv
壹沓NLP团队认识到尽管卷积的概念一般只出现在图像领域,但也可以使用卷积的概念来完成文章生成,其特点就是对局部特征的学习提取功能。后来有研究学者发现卷积神经网络同样适用于时序数据的处理,其能够提取长序列中的局部信息,这在NLP特定领域非常有用(如机器翻译、自动问答)。因此这里提出引入卷积来进行处理。
在双向GRU+Embedding基础之上加入卷积之后,不管是使用采样策略或者不使用采样策略的情况下,生成的文章语句看起来与预期输出的关联性较弱。而这主要是输入的样本语句给定的词在训练样本集中有多个,在使用统计模型预测下文的时候,按照概率的大小来进行选择时就会导致这种情况。
4.transformer-xl
该模型是由谷歌开源的语言模型,该模型是在transformer模型(具有固定长度内容建模的局限性)基础之上进一步完善,主要针对长文本问题进行改进。一是对transformer模型使用的位置编码进行改进,transformer使用的位置编码是一种绝对位置编码,当对文本进行分段处理之后,绝对位置会出现问题,通过计算公式来对其进行改进,引入相对位置编码。二是对分段文本进行编码时,加入相连的上一段的编码信息。(而不再是单独的一段)。
壹沓科技利用收集的汽车语料库来训练Transformer-xl模型,通过输出结果得出,该模型能够较好的根据输入内容继续生成文章。生成的内容相对于LSTM模型和GRU模型效果要好一些。但随着生成的文本过长,模型也会出现一些意想不到的生成。为提升效果,还需要收集更多的语料库来进行完善。
5.GPT-2
对于语言模型来说,很多学者不断刷新自然语言中的记录,其中包括BERT、Transformer-XL、XLNet等大型自然语言处理模型。但上述模型大部分用于理论研究,在工业界中由OPEN-AI提出的GPT、GPT2模型凭借着稳定、优异的性能受到业界广泛关注。
GPT-2相比于GPT模型差别并不大,采用了更大的数据集进行试验。预训练的方式和上述几种语言模型一样,可以通过上下文的学习,根据输入的文本来预测下一个词。
其中参数最小为1.17亿,也就是GPT模型,第二参数为3.45亿与BERT是一个量级,最大的15.42亿个参数的模型成为GPT-2。
GPT-2模型与其它模型的对比试验结果就不再一一列出,本文提供本试验测试的结果供大家参考,该模型是GPT-2预训练好的模型,并未增加相关数据集进行调整。为了展示效果,这里样例输入与上述几种模型保持一致。
从GPT-2实验结果来看,生成的文章与使用汽车语料库训练出的模型有所差距, GPT-2生成的文章相比其它模型阅读起来更顺畅。但是查看样例输入的语句上下文会发现,前面几种模型给出的结果要好于GPT-2,这个跟GPT-2训练数据样本有关,后续会考虑把收集到的汽车语料库对模型进行完善,以便得到更好的效果。另外,如果样例输入变成某个关键词,GPT-2生成文章的质量要好于其它语言模型。
6.如何利用上述模型来实现可供阅读的文章
通过上述自然语言模型的介绍,我们大体了解到自然语言处理现阶段的发展过程,以及近年来自然语言模型在处理不同任务上的各个优势。自然语言模型在进行文章生成任务时是通过给定的输入,对其输入进行预测下一个词是什么,以此类推,直到达到设置的生成长度。
但这可能会出现一些问题,比如设置的生成长度过长时,生成的词可能会不通顺、不连贯,导致生成的一篇文章后半部分无法达到阅读的逻辑要求。
针对这一问题,我们可以考虑将一篇文章进行拆分段落来分块进行生成,针对每一部分可以对输入的语句(关键词)有所不同。因为每一部分侧重点有所不同,这时可以根据需要的侧重点给予相应的关键词来进行预测。
以下为壹沓NLP团队针对“大众汽车”为开头来生成的一篇文章,从大众汽车的集团概况、平台、内饰、价格等方面来介绍大众汽车,从中可以看到文本生成仅千字内容时还能基本保持语句通顺的初步效果。
“大众汽车集团(中国)公司,并且已经在中国市场取得了一定成功。目前,中国市场已经成为全球第二大汽车消费市场。
大众汽车国内采用了成熟的mqb平台,在布局上延续了老款捷达、桑塔纳等车型的传统车身结构,未见有太多特别之处。但在内饰配置上,却有了进步。按照新款捷达、桑塔纳的配置配置,它的价格区间也在5-10万元之间。除了12万元以上的高端车,大众汽车更倾向于入门级配置,而这些入门级配置并非朗逸、轩逸的主打选择,而是入门价格售价更低、年销量接近50万辆的帕萨特、迈腾等车型。主流的保值率对于许多追求高性价比的消费者来说很重要,大众品牌的保值率有目共睹,毕竟入门级保值率要低于宝马和奥迪。1~2年的保值率对比1~2年的保值率下,使用2年以上后帕萨特、雅阁仍然具有非常高的性价比。帕萨特、雅阁、迈腾的保值率数据作为与捷达、桑塔纳同级的全新一代帕萨特,2017年全年的销量达到1.68万辆,蝉联轿车销量冠军,其品牌形象更为突出。不仅有口皆碑,帕萨特的保值率还高于大众标三剑客的保值率,帕萨特维持在1.58%左右,雅阁为1.80%左右,迈腾也维持在1.71%左右。2018年上半年帕萨特依然维持1.68%的不变,全年保值率较去年进一步增长。帕萨特有着非常高的性价比,一般情况下性价比较高的轿车保值率较差,因为性价比高的轿车往往价格更低,而保值率更高的汽车往往价格更高。对于全新一代帕萨特来说同样是如此,虽然捷达被很多人评价是“中国牌照的迈腾”,不能进口大众的入门级轿车帕萨特,在标轴版帕萨特进入国内时又获得了很大的销量优势,提前下探全新一代帕萨特入门级价格,使得两款车的保值率进一步拉低。2018年7月入门级车型雅阁仍有1.94%的保值率,迈腾也仅有1.68%。对于性价比更高的帕萨特来说,这个消息值得注意。大众轿车的价格都差不多,捷达是品牌唯一受损的对象,速腾变为“速腾奔”,桑塔纳变为“捷达”,朗逸变为“桑塔纳1.5l”等,这些措施会让捷达变得更加性价比低。有力打击帕萨特的车型主要是品牌保值率较低的轿车,不仅仅是桑塔纳1.5l和雅阁的全新帕萨特,还有朗逸和迈腾均维持在1.65%的保值率。雅阁的保值率为1.65%,帕萨特1.65%,速腾2.2%,全新帕萨特1.78%,朗逸为1.61%,速腾为1.92%,朗逸为1.92%,速腾的保值率远远高于帕萨特。雅阁、帕萨特的保值率都很高,全新帕萨特的保值率更高,如此表现也说明了帕萨特的保值率确实不是帕萨特性价比最高的车型。这就是大众品牌认知度不断提升的过程,也是帕萨特同级车型变相拉低性价比的结果。当然,大众的终端优惠,亦或者是车型的调整都是影响。”
关于壹沓科技
壹沓科技成立于2016年11月,聚焦于前沿技术在企业数字化中的应用,我们在自然语言处理-NLP、图像文字识-OCR、知识图谱-KG、大数据挖掘-Data Mining、机器人流程自动化-RPA和业务流程重构及管理-BPR&BPM等领域具备完整的自主研发能力,已获得软件知识产权数十个。
公司核心的业务包括数字机器人产品(矩阵数字机器人-Matrix Robot)和互联网大数据品牌管理(品牌方程-Formula DBM),已经为多个行业数百家企业及政府提供专业解决方案。
总部位于上海 ,在北京、深圳设有分公司, 已获得高新技术企业、双软及专精特新企业等专业认证 。核心团队来自于多家知名上市公司,在企业服务及互联网从业超过10年,拥有大数据、云服务及人工智能领域的丰富经验。
转载请在文章开头和结尾显眼处标注:作者、出处和链接。不按规范转载侵权必究。
未经授权严禁转载,授权事宜请联系作者本人,侵权必究。
本文禁止转载,侵权必究。
授权事宜请至数英微信公众号(ID: digitaling) 后台授权,侵权必究。
评论
评论
推荐评论
暂无评论哦,快来评论一下吧!
全部评论(0条)