一种宋词自动生成的遗传算法及其机器实现

一种宋词自动生成的遗传算法及其机器实现

2011-01-30. Category & Tags: Others Leading, Others

自厦门大学和浙江大学的三位学者开发的“宋词自动生成(的)遗传算法”,主要针对宋词这种特殊的汉语诗歌体裁,设计了其自动生成算法及其实现方法。

3 个示例:

keyword=菊 Ci Pai=清平乐 Style=风格婉约

相逢缥缈,窗外又拂晓.长忆清弦弄浅笑,只恨人间花少.
黄菊不待清尊,相思飘落无痕.风雨重阳又过,登高多少黄昏.

(这篇写的真的太NB了。。。)

keyword=饮酒 Ci Pai=西江月 Style=风格豪放

饮酒开怀酣畅,洞箫笑语尊前.欲看尽岁岁年年,悠然轻云一片.
赏美景开新酿,人生堪笑欢颜.故人何处向天边,醉里时光渐渐.

keyword=佳人 Ci Pai=点绛唇 Style=风格婉约

人静风清,兰心蕙性盼如许.夜寒疏雨,临水闻娇语.
佳人多情,千里独回首.别离后,泪痕衣袖,惜梦回依旧.

—-节选——————————————————–

根据宋词特点设计了基于平仄的编码方式,将“平、仄”与“0、1”编码相对应的编码方案.比如词牌《清平乐》平仄分布如下:
⊙平⊙仄,⊙仄平平仄.⊙仄⊙平平仄仄,⊙仄⊙平⊙仄.
⊙平⊙仄平平,⊙平⊙仄平平.⊙仄⊙平⊙仄,⊙平⊙仄平平.
其中⊙表示可平可仄.根据我们的编码方案可得如下编码串:
01,1001.10011,101.
*0 100,0100.101,0100.

……….

通过对大量宋词语句构成的分析,发现组成句子的有效模式的数目是有限的,并且呈现出了层次化的结构,因此比较适合采用DFA(deterministic finite automata)来表示。随机组合的词语,在产生大量的备选个体后,逐个进行DFA 分析测试,通过留下,没通过则剔除。

……….

宋词的语义计算问题,包括词义相关度计算、词义相似度计算,以及风格情感一致性计算3 个方面。计算词义相关的目的是建立词语间的关联,发掘词语共现和搭配的可能,从而保证生成诗词行文和主题上的连贯.我们可以基于语料库统计来给出利用潜在语义分析和互信息两种方法词义相关度计算方法…….利用潜在语义分析(latent semantic analysis,简称LSA)和是基于互信息(mutual information,简称MI)的方法计算词义相关度…………对于最终的计算结果,我们首先选取两种算法的重叠部分,相关度则用两者各占50%的加权和表示;其次对于不重叠的部分,我们按相关度从高到低进行排列,并保留相关度大于10−3 的词。

…………..

词语相似度主要用于衡量文本中词语的可替换程度.计算词义相似度,目的是在保证所选词紧扣主题的前提下,尽量使生成诗词的语言更丰富多变.目前自然语言的词义相似度有两类常见的计算方法,一种是利用大规模的语料库进行统计,另一种是根据本体知识来计算。……..考虑到计算的复杂性和词义相似度在应用中较强的针对性,在实际计算相似度时,我们仅对词库中高频名词545 个和形容词367 个近义词集进行计算。

……………

有了具体的宋词生成算法,就可以构建宋词自动生成系统,按用户输入的关键词(要求输入1∼3 个关键词)和词牌名自动生成宋词.实际系统共分数据库建立、句法语义处理、基于遗传算法的生成3 个基本模块.实际系统是在普通微机的Windows 平台上采用VisualC++ 6.0 开发实现的,测试机器基本参数为:CPU 1.83GHz,内存512 MB.目前系统仅支持10 个常见词牌的宋词生成,这10 个词牌分别是《蝶恋花》、《青玉案》、《清平乐》、《浣溪纱》、《西江月》、《点绛唇》、《鹧鸪天》、《江城子》、《长相思》、《浪淘沙》。
例如,取种群大小k1 为100,最大进化代数k2 为5 000,交叉概率k3 为0.8,变异操作次数k4 为3 000,变异概率k5 为0.15,父代接受概率k6 为0.3.当输入主题关键词为“菊”,词牌名为《清平乐》时,系统经过如下运行过程.
首先系统提取主题关键词“菊”,在词义相似和词义相关库中进行查找,形成表1 所示的计算结果.接着,系统根据《清平乐》词牌的要求随机生成两个韵部.上阙仄韵“小”,下阙转平韵“魂”,即随机生成了一个平声韵部和一个仄声韵部.规定每个个体中至少出现一个与主题词的词义相似词.生成的初始种群个体举例如下(之一):
登临多少,入夜催秋草.憔悴田园添缠绕,携手光阴欢笑.
金菊零落离魂,春风相近黄昏.为我悲秋斜倚,此生天气重门.

表 1 “菊”的词义相似和词义相关计算结果

Synonyms of “JU”=黄菊 紫菊 嫩菊 槛菊 兰菊 菊花 金菊 菊蕊 野菊 松菊 晚菊 庭菊 细菊 篱菊 赏菊 丛菊 新菊 菊香 白菊

Firstly correlation=轻寒登高 秋色 重阳 晓寒 离恨 雁 黄 管弦 香 秋 晚秋 微雨 萧疏 零乱 凄然 黯淡 凄楚 憔悴 萦绊 愁颜 梦 影 夜 西风 零落 幽怨 微凉 斜日 馨香 鸿雁 金 祝寿 紫 中秋 新酿 东篱 高歌 醉 残 良辰 庭院

Secondly correlation=情舞 携手 竟 金尊 忆 轻轻 朱阑 残 难忘 红烛 朦胧 寒 烛影 无端 明镜 雁 梧桐燕 吹 扁舟 故国 潇湘 残荷 露 叠翠 晨星 浩渺 清泪 回首 遥看 人间 笙歌 共舞 冷艳 长亭 相逢 双桨 红颜 暮云 吟 幽愫

——————————my view————————

算法也是在发展的。根据分而治之思想,考虑完字音,词义,下面就该是句与句的逻辑关系了。当然对偶,互文就比较难,典故就更需要特别的资料库和算法。

不过话说回来,能有韵律公整,辞藻精美,合理承接转折并且有对偶/互文并且包含典故的,那即便是人写的也是精品中的精品了。想想这1000年来流传下来的辞,和妇孺皆知朗朗上口的句,实在难得。

其实,我觉得最主要的问题在于,这软件只是组合,不是创造

这篇论文目的也不是写辞,是实践遗传算法,实现方向比较新颖罢了。或许这样的软件出来也顺带能kill掉那些“词匠”,活着的人只能去努力创造。

from:http://blog.renren.com/blog/62118/464512730

http://www.jos.org.cn/ch/reader/view_abstract.aspx?file_no=3596

周昌乐,游维,丁晓君.一种宋词自动生成的遗传算法及其机器实现.软件学报,2010,21(3):427-437