【深度学习】文本生成

http://www.renwuyi.com/index.php?action=artinfo&id=19036&cat_id=2#topphp

 文本生成是比较学术的说法,一般在媒体上见到的“机器人写做”、“人工智能写做”、“自动对话生成”、“机器人写古诗”等,都属于文本生成的范畴。网络

  2016年里,关于文本生成有许多的新闻事件,引发了学术界之外对这一话题的普遍关注。框架

  2016年3月3日,MIT CSAIL【1】报道了,MIT计算机科学与人工智能实验室的一位博士后开发了一款推特机器人,叫DeepDrumpf,它能够模仿当时的美国总统候选人Donald Trump来发文。机器学习

  2016年3月22日,日本共同社报道,由人工智能创做的小说做品《机器人写小说的那一天》入围了第三届星新一文学奖的初审。这一奖项以被誉为“日本微型小说之父”的科幻做家星新一命名。提交小说的是“任性的人工智能之我是做家”(简称“我是做家”)团队【2】。post

  2016年5月,美国多家媒体【3】【4】报道,谷歌的人工智能项目在学习了上千本浪漫小说以后写出后现代风格的诗歌。学习

  基于人工智能的文本生成真的已经达到媒体宣传的水平了吗?这些事件背后是怎样的人工智能技术?关于机器人写小说的工做,咱们会在另外一篇文章《会有那么一天,机器人能够写小说吗?》里进行深刻的讨论,他们的工做更多的是基于模板的生成。在这篇文章里,咱们主要想经过三篇文章介绍另外一大类方法,即基于统计的文本生成。优化

 

  使人吃惊的Char-RNN

 

  关于基于深度学习的文本生成,最入门级的读物包括Andrej Karpathy这篇博客【5】。他使用例子生动讲解了Char-RNN(Character based Recurrent Neural Network)如何用于从文本数据集里学习,而后自动生成像模像样的文本。编码

  图一直观展现了Char-RNN的原理。以要让模型学习写出“hello”为例,Char-RNN的输入输出层都是以字符为单位。输入“h”,应该输出“e”;输入“e”,则应该输出后续的“l”。输入层咱们能够用只有一个元素为1的向量来编码不一样的字符,例如,h被编码为“1000”、“e”被编码为“0100”,而“l”被编码为“0010”。使用RNN的学习目标是,可让生成的下一个字符尽可能与训练样本里的目标输出一致。在图一的例子中,根据前两个字符产生的状态和第三个输入“l”预测出的下一个字符的向量为<0.1, 0.5, 1.9, -1.1>,最大的一维是第三维,对应的字符则为“0010”,正好是“l”。这就是一个正确的预测。但从第一个“h”获得的输出向量是第四维最大,对应的并非“e”,这样就产生代价。学习的过程就是不断下降这个代价。学习到的模型,对任何输入字符能够很好地不断预测下一个字符,如此一来就能生成句子或段落。人工智能

图片描述

  Andrej Karpathy还共享了代码【6】,感兴趣的同窗不妨下载来试试,效果会让你震惊。Andrej Karpathy在底层使用的RNN的具体实现是LSTM(Long-Short Term Memory),想了解LSTM能够阅读【7】,讲得再清楚不过。lua

  研究人员用Char-RNN作了不少有趣的尝试,例如,用莎士比亚的做品来作训练,模型就能生成出相似莎士比亚的句子;利用金庸的小说来作训练,模型就能生成武侠小说式的句子;利用汪峰的歌词作训练,模型也能生成相似歌词的句子来。

  在本文一开始提到的【1】,MIT计算机科学与人工智能实验室的博士后Bradley Hayes也正是利用相似的方法开发了一款模仿候任美国总统Donald Trump的推特机器人,叫DeepDrumpf。例如,图二中,这个机器人说,“我就是伊斯兰国不须要的。”

图片描述

  据做者介绍,他受到一篇模拟莎士比亚的论文启发,以Donald Trump的演讲和辩论(时常大约几个小时)的字幕做为训练语料,使用深度神经网络学习去训练Trump的模型。他也声称,由于有一篇文章调侃Trump的发言只有小学四年级的水平,于是想到用Trump的语料多是最容易控制的。

  这是一个有趣的应用,记者评论称这个机器人也并非总能写出好的句子,但至少部分是通顺的。其实,风格并非很难学到,只要使用的训练语料来自同一我的,而这我的的写做或者发言具备辨识度高的特色。

 

  深度学习生成对话

 

  推荐阅读的第二篇文章是诺亚方舟实验室的尚利峰、吕正东和李航在2015年ACL大会上发表的“Neural Responding Machine for Short-Text Conversation” 【9】。你们也许据说过微软小冰,它由于开创性的主要作闲聊(即以娱乐为目的的聊天)式对话,被哈尔滨工业大学的刘挺教授誉为是第二波人机对话的浪潮的表明【8】。小冰的出现也影响到了学术界。除了原来作知识性的问答,一些研究也开始关注闲聊,让机器人和人类搭话,这方面诺亚方舟实验室发表了一系列有影响力的文章。今天介绍的这篇文章在Arxiv.org上发布短短一年时间,已经有67次的引用。

  【9】这篇文章尝试用encoder-decoder(编码-解码)的框架解决短文本对话(Short Text Conversation,缩写为STC)的问题。虽然encoder-decoder框架已经被成功应用在机器翻译的任务中,可是对话与翻译不一样,对应一个输入文本(post)每每有多种不一样的应答(responses)。文中举了一个例子,一我的说“刚刚我吃了一个吞拿鱼三明治”,不一样的应答能够是“天哪,才早晨11点”、“看起来很美味哟”或是“在哪里吃的”。这种一对多的状况在对话中很广泛也很天然。的确,不一样的人会对同一句话作出不一样的反应,即便是同一我的,若是每次回答都如出一辙也是很无趣的。

  针对这一特色,做者们提出Neural Responding Machine(简称NRM,见图三)框架来解决短文本对话的问题。他们尝试了全局编码和局部编码,最终发现先分别训练,再用图四的结构来作微调训练,效果最佳。全局编码的优势是可以得到全局信息,一样的词在不一样情境下会有不一样的意义,全局信息能够部分解决这类状况;缺点是,它供给解码的输入比较固定。局部编码利用局部信息,比较灵活多样,恰好能够缓解全局编码的弱点。

图片描述
图片描述

  这篇论文的另外一大贡献是构建了一个比较大的数据集和标注来评价不一样的方法。经过对比,所提出的混合全局和局部的方法比以往基于搜索的方法和机器翻译的方法都要好不少。机器翻译的方法生成的句子每每不通顺,得分最低。能比基于搜索的方法好不少也很是不容易,由于基于搜索的方法获得的已是人使用过的应答,不会不通顺。你们能够在图五的实例中直接感觉一下生成的效果。NRM-glo是全局编码的模型,NRM-loc是局部编码的模型,NRM-hyb是混合了全局和局部的模型,Rtr.-based则是基于搜索的方法。

图片描述

  2015到2016年,这篇论文的做者组织了NTCIR-12 STC任务【10】,公开他们的数据集,并提供公共评测。有16个大学或研究机构参加了中文短文本对话任务的评测。2017年,他们将会继续组织NTCIR-13 STC【11】,现已开放注册【12】。除了上一届的基于搜索的子任务,这一次还设立了生成应答的子任务。咱们预计今年的结果会更精彩。

  被媒体误解的谷歌人工智能写诗

  第三篇文章是Samuel Bowman等发表在Arxiv.org上的名为“Generating Sentences from a Continuous Space”的文章【13】。做者分别来自斯坦福大学、马萨诸塞大学阿姆斯特分校以及谷歌大脑部门,工做是在谷歌完成的。

  这一工做曾被媒体普遍报道,但我发现不少报道(例如【3】【4】)都对论文的工做有一些误解。一些记者将图六所示的文字误认为是机器人写出来的后现代风格的诗歌,其实否则。这只是做者在展现他们的方法可让句子级别的编码解码更连续。具体而言,在他们学习到的空间中,每一个点能够对应一个句子,任意选定两个点,例如在图六中,一对点对应的句子分别是“i want to talk to you.”和“she didn’t want to be with him”,两点之间的连线上能够找出间隔均匀的几个点,将它们也解码成句子,会发现,这些句子好像是从第一句逐渐变化成了最后一句。

图片描述

  获得这样的结果实属不易。在文章的一开始,做者就给出了一个例子,来讲明传统的自动解码并不能很好地编码完整的句子。如图七所示,从句子“i went to the store to buy some groceries”到句子“horses are my favorite animals”,中间取的点通过解码获得的句子呈如今它们之间。能够发现,这些句子未必是符合语法的英文句子。与之相比,图六呈现的句子质量要好不少,不只语法正确,主题和句法也一致。

图片描述

  这篇文章的想法很是有意思,他们想使用VAE(varationalautoencoder的简称)学习到一个更连续的句子空间。如图八所示,做者使用了单层的LSTM 模型做为encoder(编码器)和decoder(解码器),并使用高斯先验做为regularizer(正规化项),造成一个序列的自动编码器。比起通常的编码解码框架获得的句子编码每每只会记住一些孤立的点,VAE框架学到的能够想象成是一个椭圆形区域,这样能够更好地充满整个空间。个人理解是,VAE框架将贝叶斯理论与深度神经网络相结合,在优化生成下一个词的目标的同时,也优化了跟先验有关的一些目标(例如KL cost和crossentropy两项,细节请参考论文),使对一个整句的表达更好。

图片描述

  固然,为了实现这一想法,做者作了不少尝试。首先,对图八所展现的结构作一些变形并无带来明显的区别。但在优化时,使用退火的技巧来下降KL cost和训练时把适当比例的词变为未知词(即word dropout)这两项技术就很是有效。

  做者们经过两个有意思的实验来展现了他们的结果。一个是作填空题,如图九所示,隐藏句子的后20%,让模型来生成后面的部分。从几个例子看,VAE的方法比RNN语言模型(简称RNNLM)更加通顺和有信息量。第二个实验就是在两个句子之间作轮移(Homotopy,也就是线性插值),对比图六和图七,能够看出VAE给出的句子更平滑并且正确,这一点能够间接说明学习到的句子空间更好地被充满。

图片描述

  固然,做者们还给出了一些定量的比较结果。在比较填空结果时,他们使用了adversarial evaluation(对抗评价)。具体的作法是,他们取样50%的完整句子做为正例,再拿50%的由模型填空完成的句子做为负例。而后训练一个分类器,若是一个模型填的越难与正例分开,就说明这种模型的生成效果更好,更具欺骗性。所以,能够认为这一模型在填空任务上更出色。实验的结果也支持VAE比RNNLM更好。

  问题与难点

  人工智能真的会创做吗?使用深度学习技术写出的文章或者对话,的确是会出现训练集合里未见过的句子。例如,一个原句的前半段可能会跟上另外一个原句的后半段;也可能除了词,搭配组合都是训练集里没有的。这看起来有些创做的意味,可是细究起来,每每是原句的部分更为通顺和有意义。目前的技术能够拼凑,偶尔出现一两个好玩的点,可是写得长了,读起来会以为没头没脑,这是由于没有统领全篇的精神,跟人类的做家比固然仍是相差很远。

  机器学习到的还只是文字表面,没有具有人要写文章的内在动因。人写文章表达的是本身的思想和感觉,这是机器所没有的。所以,即便是机器写文章,具体想要表达什么,彷佛还要由人来控制。但若是控制得太多,看起来又不那么智能,少了些趣味。我认为,要想让机器更自由地写出合乎逻辑的话来,咱们还须要相似VAE那篇文章同样更深刻的研究,对句子甚至段落的内在逻辑进行学习。

  另外,人在写一篇文章的时候,很容易自我衡量语句是否通顺、思想是否表达清楚以及文章的结构是否清晰有趣,机器却很难作到。所以,优化的目标很难与真正的质量相一致。目前的天然语言理解技术对于判断句法语法是否正确可能还有些办法,但要想判断内容和逻辑上是否顺畅,恐怕还须要常识和推理的帮助,这些部分暂时还比较薄弱。但也并不是毫无办法,我相信将来对文本生成的研究必定会涉及这些方面。

相关文章
相关标签/搜索