自动作词:离我们有多遥远?
分词完成后,词频的统计就是小事一桩了。之前有人把宋词的高频词语统计表 发到网上 ,一时间几乎每个理科生都能写宋词了。就技术层面而言,大部分自动作诗词的尝试都是在“高频——关联”这样的框架下完成的。即给定一个词语,搜索与之关联度较大的另外一批词作为候选集合,再通过预先设定好的准则进行筛选。
但这样的方法显然比较简陋。相比之下,有人研究了更高级的方法,例如有一篇名为 一种宋词自动生成的遗传算法及其机器实现 的论文就采用填词的思想:给定一个词牌,就相应地给出了格律、押韵和平仄等硬性要求,将满足要求的词语填入相应的句法中,再通过一系列评价指标计算每个填词组合的“得分”,最后利用 遗传算法 计算出“得分”最高的填词方案。
以“清平乐”这个词牌为例,其填词约束为
*0 / *1, *1 / 0 / 01. *1 / *0 / 0 / 11, *1 / *0 / *1.
*0 / *1 / 00, *0 / *1 / 00. *1 / *0 / *1, *0 / *1 / 00.
其中 0 表示平声, 1 表示仄声, * 表示两者皆可, / 是词语的分割。可以看到,对于“清平乐”这个词牌,实际上就是要将 24 个词填入相应的空档中,其中第一个词以平声结尾,第二个词以仄声结尾,第四个词是一个平声单字……此外如果再考虑押韵,那么搜索的词语空间又会进一步减小。
在给定了一种填词方案后,就可以构造这种方案的评分体系。上述的论文从四个方面(句法合法性、主题相关性、词句搭配的适当性、风格和情感统一性)考虑,最后得到一个综合加权的指标。因此,自动作词的过程就抽象为了一个高维的最优化问题,即试图找到一种填词的组合,使得最终这个加权指标达到最大。
这篇论文的一个亮点在于使用了遗传算法作为主要的优化方法。遗传算法的细节比较复杂,在自动作词这一特定问题中,其主要思想是:
1、 随机生成若干个满足约束条件(格律、押韵等)的填词方案;
2、 选取其中较优的一些结果作为父代,然后利用遗传算法中的交叉和变异操作,从父代来生成子代。换言之,就是在已有的填词方案基础上生成新的填词方案;
3、 不断进行评判和迭代,直到跳出循环。
遗传算法的好处在于其算法的不确定性和可变异性,这是受生物的进化得到启发而发展起来的。虽然遗传算法作出的算词像模像样(例如本文开头的例子),但需要说明的是,遗传算法本质上是一个最优化算法,因此填词的好坏仍然与词库和评价指标直接相关。从某种意义上说,计算机作词实际上是利用已有的词库进行组合,而不是创造。
无论如何,一个丰富而优秀的词库仍然是有意义的——对于电脑来说,这是它进行“创作”的基石;对于人来说,它至少能告诉读者以往词人常用的意象是什么,从而提供一些创作上的灵感(当然不应该是词作本身)。