东时 资讯

撩一撩机器人 看机器人如何做诗

开心果烁烁 2017-09-13 511 0

摘要: 如果你在想给妹子写个有她名字的藏头诗而搜肠刮肚难以思考的时候,估计它……嗯,也帮不上什么忙,你需要重新写一个有藏头功能的作诗姬。反正算法的本质在基本理解之后,自由发挥的空间就有了。

作诗机器人作为一个玩具也好一个科学研究的领域课题也罢,很早就有人开始研究了。就但从数学模型角度来说,作诗姬应该属于隐马尔可夫模型的变种。 

所谓隐马尔可夫模型HMM就是从时间序列的随机事件中去统计前后状态的转化概率。这种模型在NLP领域应用是非常广泛的,在作诗姬这种玩具中也少不了它抛头露面。

遇到这种命题,首先应该想到的是使用RNN模型(LSTM)来进行训练。因为RNN具有一种天生就最适合拟合隐马尔可夫模型的构造,所以这个大的思路应该是没有什么问题的。可是,中文有中文的特点,而且中文当中有一些令我们中国人最自豪的,最优美的韵律感,同时也是我们自己在尝试写诗的过程中最不好把握的东西——平仄和韵脚。隐马尔可夫模型可以统计出来在一个字后面出现另一个字是多大概率,而且可以有一定自由度地选择其中的一个字作为下一个接续字——可以选择概率最大的那个字,这种情况下一旦第一个字确定后,后面整个诗文理论上就是全部确定的;也可以按照概率从大到小排列,用概率的比例去生成一个 “不均匀的骰子”,使得下一个字的产生有一定变化。

QQ图片20170913161826.png

用隐马尔可夫模型生成字的时候,选择概率较大的字出现的目的是为了让语句更为通畅,因为两个字有较大概率紧邻出现的话大多是因为它们是一个词,或者在单字词盛行的古诗文中至少是词组或者常用短语。例如“红颜”、“春光”、“山河”、“相送”等。而概率小的邻接字含义很可能表示的是这两个字从来没有前后脚出现过,或者偶尔出现过那么一两次还是一个属于前面的词尾一个属于后面的词头的情况,那如果采用的话自然是狗屁不通。


QQ图片20170913161946.png


光是用隐马尔可夫模型去统计还是不够的,要生成一个有一定“含义”的诗文是需要有一定的意境和惯用词汇的。为此,有这样一本书作为辞典备用,叫做《诗学含英》,不过别找了京东上没有,这么偏门小众的书求助万能的淘宝吧。由于在五绝和七绝这样的诗律中是讲究押韵和平仄工整的,所以第二三四句实际上是根据第一句来生成的,它们的生成要在规则上与第一句呼应。那么就要先重点生成第一句,再一句一句按照规则去生成其余的句子。

先给定一些Keywords,也就是关键词,作为这首诗的梗概、要义、主题,再到《诗学含英》中去寻找相关语汇。这样会找到一些备选词(Candidate lines),根据这些词汇生成所有可能的排列,并且挑选一个最为合适的充当第一句。就是满足下面的这个等式最大化。


QQ图片20170913162101.png


看上去又挺吓人,其实又是那个的连乘形式,是一系列概率的连乘形式,最大化的意思就是这些挑出来的备选词在我们统计的隐马尔可夫模型里究竟是怎么排列最顺溜,也就是一句话组成的最大似然度的白话解释。

QQ图片20170913162151.png

下面要出场的是这么个听着很高科技其实内容很普通的东西,一个叫CSM(Convolutional Sentence Model,卷积句子模型),一个叫RCM(Recurrent Context Model,卷积内容模型),还有一个叫RGM(Recurrent Generation Model,循环生成模型)。

QQ图片20170913162352.png

QQ图片20170913162406.png

QQ图片20170913162554.png


由于内容片段都是从《诗学含英》中挑选出来的,又经过了若干次调整顺溜的过程,这样生成的内容就会相对比较通顺。这里还是有一些不好克服的问题,比如平仄和韵律。平仄就不用说了,把平仄规则做进去的话,就需要建立相应的限制条件,在生成的语句中进行过滤,只留下那些符合的,当然后果就是可能那些尚且通顺的句子被滤掉了,却留下了一些不大通顺的例子;而韵律方面也是做了一个Trick——就是只让二、四两句押韵,在生成的过程中会生成不止一个第二句,不止一个第四句,让它们充当候选集,然后过滤掉那些不押韵的而只输出押韵的。


QQ图片20170913162827.png


如果你在想给妹子写个有她名字的藏头诗而搜肠刮肚难以思考的时候,估计它……嗯,也帮不上什么忙,你需要重新写一个有藏头功能的作诗姬。反正算法的本质在基本理解之后,自由发挥的空间就有了。

     

     

     

标签: 人工智能算法
在线咨询
在线报名
客服QQ
视频下载
回到顶部