大数据文摘出品
作者:Andy、蒋宝尚
今天是腊月二十九,按照*历,是解除、破屋、坏垣的好日子。
中国人的传统也是在这一天贴对联,准确来说是春联。
对联来源于对偶句和骈俪句,讲究工整对仗,充分展现了我们中国人独特精致的艺术美感。
古人常以“吟诗作对”交友比试,但到了今天,为了让写出的对联“出奇不意”,文摘菌决定用最近NLP领域大火的Transfomer模型,训练一个聪明的AI,我出上联,它对下联,将这个“对穿肠”的任务交给它。
模型介绍
关于对春联这个任务,可以明显看出是一个序列到序列的任务。于是就得祭出现在自然语言处理里面的大杀器了,Seq2Seq+Attention!
于是,文摘菌便采用了Transformer序列到序列模型。Transformer由论文《AttentionisAllYouNeed》提出,渐渐有取代RNN成为NLP中主流模型的趋势,现在更是谷歌云TPU推荐的参考模型,包括谷歌给自己TPU打广告的Bert就是Transformer模型。
Transformer架构完全舍弃了深度学习里经典的RNN和CNN结构,而只用注意力机制还搭建。最早在机器翻译任务上进行测试就超越RNN,达到了当时SOTA的效果。Transformer不光像CNN一样克服了RNN最被人诟病的训练慢问题,利用self-attention机制实现快速并行,层数还可以增加到比较深,充分发掘DNN模型的特性,提升模型准确率。同时,在NLP任务上,还比CNN和RNN的性能都普遍要好,它不为王,谁为王。
大数据文摘之前与百度NLP联合出品了一篇文章:BERT大火却不懂Transformer?读这一篇就够了。对Transformer不熟悉的同学可以点击超链接阅读文章,保你理解的透透的。
这里我们用6层Transformer单元,里面的Self-Attention的头数为8,隐单元数个。模型采用tensorflow框架,GPU则用深度学习标配的TeslaK80。
好了,下面先介绍一下数据集。
数据集
文摘菌所使用的数据集来自一位名为冯重朴_梨味斋散叶的博主的新浪博客,总共包含超过70万副对联。
然而,由于未知的原因,这位博主的博客已经无法访问了……
但是,这一珍贵的数据集却在GitHub上广为流传。
github地址(脚本已无法使用,可以用我们上传的couplets,googledrive需科学翻墙):