你们家贴春联了吗?如果还没有,不妨考虑这一句。这么不像人话的春联,当然是 AI 对出来的。不过不是 AI 本 I,而是 2017 年 10 月发布的“王斌对对联”。近年来,像这样自动对对联的 AI 不少,例如 AINLP 和微软对联。这些 AI,经常会给出惊为天人的结果。不信,我们拿“王斌对对联”来调戏一下。
先试试今年的新梗——“谁了哉”这个用法,比把王妃挂在城门上暴晒三天的王爷还要让人迷惑。
这位 AI 也太诗意了……还有让你怀疑人生的扎心回复——还是做梦比较快。三姑六婆问你年终奖了吗?网络热词,这位 AI 也是可以的——当阿伟反复死亡的时候,曹永是不是也跟着生了又生?追星女孩:哪个哥哥都难追啊!馋……谁的身子?再试试理工梗——地铁老爷爷看手机.JPG。你们还记得这句口诀说的是什么吗?再试试 AI 同事的名字——我们特地询问了当事人对此的看法。
李小葵:“不要再问小葵有没有男朋友,小葵有老瓜了。”王劈柴:“可以凑一桌乡村爱情故事。”最后看看果壳——本 AI:?????????
当然,这位 AI 也对出过相当漂亮的下联,例如这两个——AI 怎么对对联。虽然 AI 对对联的水平飘忽不定,但它能做到这样,其实已经很了不起了。我们拿“王斌给您对对联”为例子,简单介绍这个 AI 的原理,希望你能看得懂 :)
1. 770491 条对联的“练习册”。简单来说,程序的作者先建立了一个模型,然后将一个语料库丢给它。语料库里含有 770491 条“上联-下联”的对联,供模型作为示例进行训练。一开始,模型也不太熟练;但所谓“熟读唐诗三百首,不会吟诗也会吟”,在不断纠错重来之后,AI 渐渐也能根据上联对出像模像样的下联了。
2. 把文字变成数字。不过,模型是无法直接处理文字的,所以对联中的文字,需要先转化为数值。
“王斌给您对对联”的语料库搭配了一个字典,其中含有 9130 个字。每个字都有自己对应的编号,再通过编码转换成“向量”。具体来说,每个字都会转换成一串共 9130 个只由 1 和 0 组成的数字;例如“春”字,它在字典中的编号是 6,变成向量则为:所以,“春风得意马蹄疾”这个句子,经过转换,则会变成 7 个长度为 9130 的向量。这 7 个向量组成一个序列,输入到模型当中,才能进行下一步处理。
3. 上联:逐字计算,总结成一个向量。处理这些文字的模型包含两个部分——“编码器”(Encoder)和“解码器”(Decoder)。在这类模型当中,向编码器输入一个序列(例如“春风得意马蹄疾”所转换成的一组向量)之后,通过编码与解码,解码器就会输出另一个序列。这样的模型叫做“序列到序列”(seq2seq)。
当编码器接收到“春风得意马蹄疾”的序列时,它会逐字读入,然后从左往右进行计算,最后产生一个用向量表示的语义编码——简单来说,就是把上联的七个向量总结成一个向量。我们试了一下,“春风得意马蹄疾”算出来是一个长度为 1024 的向量——这对人类来说,是一串无法解读的乱码,不过 AI 能读懂就行。
4. 下联:整合上联,衔接前字,考虑对仗。
模型“对”出下联的原理也类似:解码器中的每一个单元,既需要读入前一个字,又需要获取之前的状态信息,进行计算之后才能输出一个向量。以此类推,最后所有的向量都转成编号,再换回文字,拼起来就是人类能看懂的下联了。为了对仗工整,下联还会着重考虑上联中对应的字——这就涉及所谓的“注意力机制”(Attention Mechanism)。简单来说,解码器中的单元,会对编码器的各个单元分配不同的注意力。
下联在给出第二个字“气”的时候,除了要衔接上一个字“花”,要考虑整个上联的信息,还会着重关注上联中的第二个字“风”。
5. 机器学习:反复训练,减少错误。上面说的都是模型怎么预测下联,但它究竟怎么学会这个技能的呢?这要从参数说起——编码器和解码器中的单元,都含有一系列参数。什么是参数呢?举个例子,在公式 y=ax+b 中,a 和 b 就是参数。
正确的参数,能够使模型掌握一定的规则,根据 x 算出正确的 y。AI 对对联模型中的参数,则是 a 和 b 的复杂版本,蕴含了一系列规则,能够帮助程序对各个字的向量进行计算。AI 学习对对联的过程,就是不断更新这些参数,学习正确的规则,减小预测的错误——这也就是传说中的“机器学习”。
一开始,模型只能按照初始的参数,将上联进行一系列近乎随机的变换,输出一些无意义的字的组合;这些组合会和语料库里正确的下联做比较,得到一个差异值;根据这些差异值,模型可以逐渐更新参数,让预测值和正确答案之间的差异越来越小;经过漫长的迭代训练,模型就拥有从上联变换出像样下联的能力啦。AI 对对联,其实是“自然语言处理”(Natural Language Processing,NLP)的一种应用。
当然,它实际的设计和计算,远远要比这里写的复杂得多。近年来,自然语言处理蓬勃发展,翻译软件、聊天机器人、情感分析等程序,都仰赖于它。只不过,这个领域尚在发展,AI 难免“语出惊人”——至于它还会给出什么意料不到的下联,你不妨也去试试看。