先来看看下面的几首宋词:
宋词一:
西江月
饮酒开怀酣畅,洞箫笑语尊前。欲看尽岁岁年年,悠然轻云一片。
赏美景开新酿,人生堪笑欢颜。故人何处向天边,醉里时光渐渐。
宋词二:
清平乐
相逢缥缈,窗外又拂晓。长忆清弦弄浅笑,只恨人间花少。
风雨重阳又过,登高多少黄昏。黄菊不待清尊,相思飘落无痕。
宋词三:
佳人 点绛唇
人静风清,兰心蕙性盼如许.夜寒疏雨,临水闻娇语.
佳人多情,千里独回首.别离后,泪痕衣袖,惜梦回依旧.
第一感觉是不是在想这是哪位大家的手笔,如果告诉你这是由遗传算法自动生成的,你会不会对之前的上过的语文课有些许感慨。你觉得计算机的作诗能力如何呢?
什么是遗传算法?
遗传算法指的是迷你达尔文生物进化论自然选择,以及遗传学机理生物进化的过程的一种计算模型。
有人说遗传算法很少用,实际上,在很多地方,遗传算法都有很有趣的应用。这不,有人就把遗传算法用在宋词中。分享者称是用在NLG(自然语言生成)技术中的。
自动生成宋词的遗传算法
生成宋词的算法是来自厦门大学和浙江大学的三位学者,主要针对宋词这种特殊的汉语诗歌体裁,设计了其自动生成算法及其实现方法。
根据宋词特点设计了基于平仄的编码方式,将“平、仄”与“0、1”编码相对应的编码方案.比如词牌《清平乐》平仄分布如下:
⊙平⊙仄,⊙仄平平仄.⊙仄⊙平平仄仄,⊙仄⊙平⊙仄.
⊙平⊙仄平平,⊙平⊙仄平平.⊙仄⊙平⊙仄,⊙平⊙仄平平.
其中⊙表示可平可仄.根据我们的编码方案可得如下编码串:
*0*1,*1001.*1*0011,*1*0*1.
*0 *100,*0*100.*1*0*1,*0*100.
通过对大量宋词语句构成的分析,发现组成句子的有效模式的数目是有限的,并且呈现出了层次化的结构,因此比较适合采用DFA(deterministic finite automata)来表示。随机组合的词语,在产生大量的备选个体后,逐个进行DFA 分析测试,通过留下,没通过则剔除。
宋词的语义计算问题,包括词义相关度计算、词义相似度计算,以及风格情感一致性计算3 个方面。计算词义相关的目的是建立词语间的关联,发掘词语共现和搭配的可能,从而保证生成诗词行文和主题上的连贯。
下面是该算法的论文,感兴趣的可以读一读。
Via W3Cschool