首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >今年春节,推荐三个 AI 工具为你写春联

今年春节,推荐三个 AI 工具为你写春联

作者头像
HyperAI超神经
发布2019-11-30 13:27:34
13.2K0
发布2019-11-30 13:27:34
举报
文章被收录于专栏:HyperAI超神经HyperAI超神经

by 超神经

盼望着,盼望着,春节就要来了,今年春节有什么值得期待的事情么?不如趁着爸妈还没来得及催婚催生之前,先好好在家里表现一番。

比如给家里写写春联,或者再原创定制几个送给亲友,那我这里有三个机器人,能够帮你对对联,了解一下。

会对对联的 AI

这都 9012 年了,突然脑子一热打算找个 AI 来写个对联,借助万能的互联网,还真找到了三个 AI 工具。

微软对联

上线时间:2015 年

https://duilian.msra.cn/app/couplet.aspx

微软的对联 AI ,是微软亚洲研究院的一个网页产品。 它最早要追溯到 2004 年关于自动对联的设想。

经过了这些年的变更,最新的版本由 15 年推出,它能快速的完成对对联的任务。

而且会提供多个选项,如果还不满意,会在每个对应的字上给你几种选择 。最人性化的在于可以按需要嵌入你喜欢的字。

王斌给您对对联

上线时间:2017 年 10 月

https://ai.binwang.me/couplet/

这是一个简洁的网页对联系统,据说这是一位深藏不露的工程师的「练手项目」。

它于 2017 年 10 月发布,面世后意外的受到了广大吃瓜群众的喜爱,因为据说可以是一天的快乐源泉,还有网友专门录制了测试视频,上传到 bilibili 上。

而它使用的方式也很简单,给上联,立马回复你下联,毫无商量的余地,干净利落。

作者在网上抓取了几百万组对联数据,用 seq2seq 模型悬链除了现在的工具,完成后也将自己的数据集和模型都开源在了 Github 上。

AINLP 的对联机器人

上线时间:2019 年 1 月

它算是 AI 对联界的一位萌新,于一周前诞生,是一个接入公众号的 AI 模型。作者是在看到了一份对联的语料库之后,技痒难耐创作出来的。

使用的方法是在公众号的后台回复「上联 输入上联内容」,会得到下联,当然也有它对不出来的时候。

如果你忘记了输入上联,那后台就是一个聊天机器人。

是骡子是马,拉出来对对联

为了比较一下这三个 AI 工具的效果,我们进行了几轮测试,输出的顺序依次是微软对联、王斌对对联、AINLP 对联的结果。

Round 1 :上联 谁是李飞飞

这一轮,除了微信机器人有些读不懂之外,另外两位选手都还算正常

Round 2 :上联 王思聪吃热狗

对于校长这个行为, AINIP 的机器人无法给出结果,直接开始卖萌了,哈哈哈哈,看来果然 AI 不知思聪富。

Round 3 :上联 人工智能写春联

这一轮三者各有特色,微软给出的「三叉神经」是要笑死我么,AINLP 的「鬼斧神工」也是有些莫名,第二位「自由自在」显得平淡了几分。

Round 4 :上联 落霞与孤鹜齐飞

对于这个经典的句子,王斌对对联给的结果也太调皮了吧。(事实上微软在选项里也提供了标准答案)

Round 5 :上联 爆竹声声辞旧岁

言归正传,还是要写春联。

可最后这一轮,结果上来看,都可以拿来挂门前了哇。

如何训练 AI 写春联?

看完了这些小工具,基本上能看出中国传统文化里,不仅古诗词、对子、对联,这些语言单元之间有着极强的规律性,非常适合通过机器来学习并容易自动化完成的事情。

1. 使用 Encoder-Decoder 模型

Encoder-Decoder 框架可以看作是一种文本处理领域的研究模式,应用场景异常广泛。

抽象的 Encoder-Decoder 框架

Encoder-Decoder 框架可以这么直观地去理解:可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。对于句子对<X,Y>,目标是给定输入句子 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生成下联

只需要找到大量的对联数据对这个模型进行训练,那么即可利用这个模型,输入上联,机器就可以自动产生下联了。

Encoder-Decoder 框架加上 Attention 应该会显著提升产生下联的质量,原因还是因为它是要求严格对仗的,所以在生成下联某个字的时候,找到对应上联相应字作为生成的重点参考信息无疑是非常重要的。

比如看到上联的「三」字,Attention 模型使得下联产生对应字「一」的时候重点参考上联的「三」这个字,应该知道对应的应该是一个数字型汉字。

Attention模型

使用 Encoder-Decoder 来做这个事情,汉字之间的对仗关系应该能够很好地被学会,但是如何保证生成下联语义能够一致其实并不一定能够很好地解决。这是什么意思呢?意思是可能机器看到上联「风云三尺剑」,极有可能对出下面的内容:「雨风万丈刀」,单看每个字对仗的都很工整,但是作为一个整体,语义看上去不那么协调。(注:其实如果真对出这个下联,想想其实还是挺豪情万丈的,是吧?这其实跟人在意识上会把连续出现的字通过想象组合出一种合理语境有关。)

本质上 Encoder-Decoder 在解码阶段是能够学会语言模型的,而很明显语言模型的引入对于生成下联的可读性和语言一致性是很有帮助的。

但是如果训练数据不是那么大,相信通过使用大量古诗来训练一个诗词语言模型,在 Decoder 生成阶段,每个时间节点 t 生成很多可能的候选汉字,然后利用这个语言模型+Beam Search 应该能够使得生成的对联保证一定的语义一致性。

作为对联生成其实还有上下联对应汉字的平仄问题,也可以类似语言模型一样作为后处理的步骤进行筛选过滤。

2.使用 RNN 完成

使用 RNN 构建一个古诗词的语言模型,然后上联通过这个 RNN 语言模型自动生成。

图完全自动生成对联

此外,对于对联来说,还遗留一个小问题,就是对联的横批如何生成的问题。因为一般对联还需要配上一个横批来归纳上下联的主旨。

这个其实思路也是类似的,可以把上下联看做一个整体作为 Encoder 的输入,Decoder 用来生成横批即可,这个类似于用 Encoder-Decoder+Attention 做摘要的思路。

参考文献:

1. https://blog.csdn.net/malefactor/article/details/51124732

《使用Encoder-Decoder模型自动生成对联的思路》by 张俊林

2.https://mp.weixin.qq.com/s/ettmrvz0SMpdBd5HU1xhnw

《第一届人工智能对对联大赛》by 公众号:想当然

3.https://duilian.msra.cn/app/couplet.aspx

微软对联工具

4.https://ai.binwang.me/couplet/

王斌自动对对联系统

5.微信公众号对联工具:AINLP

超神经百科

单词

decoder

[ˌdi:ˈkoʊdə(r)] n.解码器

multivariate

[mʌltɪ'veərɪɪt] adj. 多变量的

词组

Beam search 定向搜索

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HyperAI超神经 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档