by 超神经微信
----app
盼望着,盼望着,春节就要来了,今年春节有什么值得期待的事情么?不如趁着爸妈还没来得及催婚催生以前,先好好在家里表现一番。框架
好比给家里写写春联,或者再原创定制几个送给亲友,那我这里有三个机器人,可以帮你对对联,了解一下。工具
这都 9012 年了,忽然脑子一热打算找个 AI 来写个对联,借助万能的互联网,还真找到了三个 AI 工具。学习
微软的对联 AI ,是微软亚洲研究院的一个网页产品。 它最先要追溯到 2004 年关于自动对联的设想。测试
通过了这些年的变动,最新的版本由 15 年推出,它能快速的完成对对联的任务。ui
并且会提供多个选项,若是还不满意,会在每一个对应的字上给你几种选择 。最人性化的在于能够按须要嵌入你喜欢的字。编码
这是一个简洁的网页对联系统,听说这是一位深藏不露的工程师的「练手项目」。人工智能
它于 2017 年 10 月发布,面世后意外的受到了广大吃瓜群众的喜好,由于听说能够是一天的快乐源泉,还有网友专门录制了测试视频,上传到 bilibili 上。.net
而它使用的方式也很简单,给上联,立马回复你下联,毫无商量的余地,干净利落。
做者在网上抓取了几百万组对联数据,用 seq2seq 模型悬链除了如今的工具,完成后也将本身的数据集和模型都开源在了 Github 上。
它算是 AI 对联界的一位萌新,于一周前诞生,是一个接入公众号的 AI 模型。做者是在看到了一份对联的语料库以后,技痒难耐创做出来的。
使用的方法是在公众号的后台回复「上联 输入上联内容」,会获得下联,固然也有它对不出来的时候。
若是你忘记了输入上联,那后台就是一个聊天机器人。
为了比较一下这三个 AI 工具的效果,咱们进行了几轮测试,输出的顺序依次是微软对联、王斌对对联、AINLP 对联的结果。
这一轮,除了微信机器人有些读不懂以外,另外两位选手都还算正常
对于校长这个行为, AINIP 的机器人没法给出结果,直接开始卖萌了,哈哈哈哈,看来果真 AI 不知思聪富。
这一轮三者各有特点,微软给出的「三叉神经」是要笑死我么,AINLP 的「鬼斧神工」也是有些莫名,第二位「自由自在」显得平淡了几分。
对于这个经典的句子,王斌对对联给的结果也太调皮了吧。(事实上微软在选项里也提供了标准答案)
言归正传,仍是要写春联。
可最后这一轮,结果上来看,均可以拿来挂门前了哇。
看完了这些小工具,基本上能看出中国传统文化里,不只古诗词、对子、对联,这些语言单元之间有着极强的规律性,很是适合经过机器来学习并容易自动化完成的事情。
Encoder-Decoder 框架能够看做是一种文本处理领域的研究模式,应用场景异常普遍。
Encoder-Decoder 框架能够这么直观地去理解:能够把它看做适合处理由一个句子(或篇章)生成另一个句子(或篇章)的通用处理模型。对于句子对,目标是给定输入句子 X,期待经过 Encoder-Decoder 框架来生成目标句子 Y。X 和 Y 能够是同一种语言,也能够是两种不一样的语言。而 X 和 Y 分别由各自的单词序列构成:
Encoder 顾名思义就是对输入句子 X 进行编码,将输入句子经过非线性变换转化为中间语义表示 C:
对于解码器 Decoder 来讲,其任务是根据句子 X 的中间语义表示 C 和以前已经生成的历史信息 y1,y2….yi-1 来生成i时刻要生成的单词 yi
每一个 yi 都依次这么产生,那么看起来就是整个系统根据输入句子 X 生成了目标句子 Y。
这种场景是典型的 Encoder-Decoder 框架应用问题。所须要作的就是配置好 Encoder-Decoder 框架的具体模型,好比 Encoder 和 Decoder 都采用RNN模型来作。
只须要找到大量的对联数据对这个模型进行训练,那么便可利用这个模型,输入上联,机器就能够自动产生下联了。
Encoder-Decoder 框架加上 Attention 应该会显著提高产生下联的质量,缘由仍是由于它是要求严格对仗的,因此在生成下联某个字的时候,找到对应上联相应字做为生成的重点参考信息无疑是很是重要的。
好比看到上联的「三」字,Attention 模型使得下联产生对应字「一」的时候重点参考上联的「三」这个字,应该知道对应的应该是一个数字型汉字。
使用 Encoder-Decoder 来作这个事情,汉字之间的对仗关系应该可以很好地被学会,可是如何保证生成下联语义可以一致其实并不必定可以很好地解决。这是什么意思呢?意思是可能机器看到上联「风云三尺剑」,极有可能对出下面的内容:「雨风万丈刀」,单看每一个字对仗的都很工整,可是做为一个总体,语义看上去不那么协调。(注:其实若是真对出这个下联,想一想其实仍是挺豪情万丈的,是吧?这其实跟人在乎识上会把连续出现的字经过想象组合出一种合理语境有关。)
本质上 Encoder-Decoder 在解码阶段是可以学会语言模型的,而很明显语言模型的引入对于生成下联的可读性和语言一致性是颇有帮助的。
可是若是训练数据不是那么大,相信经过使用大量古诗来训练一个诗词语言模型,在 Decoder 生成阶段,每一个时间节点 t 生成不少可能的候选汉字,而后利用这个语言模型+Beam Search 应该可以使得生成的对联保证必定的语义一致性。
做为对联生成其实还有上下联对应汉字的平仄问题,也能够相似语言模型同样做为后处理的步骤进行筛选过滤。
使用 RNN 构建一个古诗词的语言模型,而后上联经过这个 RNN 语言模型自动生成。
图彻底自动生成对联
此外,对于对联来讲,还遗留一个小问题,就是对联的横批如何生成的问题。由于通常对联还须要配上一个横批来概括上下联的主旨。
这个其实思路也是相似的,能够把上下联看作一个总体做为 Encoder 的输入,Decoder 用来生成横批便可,这个相似于用 Encoder-Decoder+Attention 作摘要的思路。