作者:孙茂松;转自:公众号 DH数字人文

前沿动态

孙 茂 松 / 清华大学计算机系

中国古典诗歌写作系统“九歌”

一、诗歌自动写作研究的意义

自然语言生成(Natural Language Generation, NLG)是自然语言理解的一个重要研究领域,被认为是最难的计算挑战任务之一[1]属于Colton and Wiggins 所阐释的“计算创造力”范畴,[2]下分多个研究子领域,如新闻、作文、散文、诗歌等的自动写作,近年来日益得到人工智能学界的高度重视。[3]其中诗歌自动写作,尤其是中国古典诗歌的自动写作,是自然语言生成中最引人注目的研究课题之一。

九歌所做七言

诗歌是中国文学中最早成形的文学体裁(在我国历史上最早的诗歌总集《诗经》中,最早的诗作于西周初期),已绵延三千年,其发展较其他文学形式也更为充分。古典诗歌早已深深融入世世代代中国人的精神特质中,成为中华文化血脉中的一部分,对中华文明的发展产生了巨大的影响。归纳起来,开展中国古典诗歌自动写作研究具有如下意义:

(一)从人类认知角度来看,中国古典诗歌创作属于一种具有高度智慧的文学艺术创造活动,对人工智能来说,无疑是一个与围棋可比的、非常合适的艰巨挑战任务;

(二)计算角度来看,这个任务足够困难。《康熙字典》共收录汉字47,035个,现代记录汉语的通用规范字集《通用规范汉字表》共收录汉字8,105个,如果我们粗略假设中国古典诗歌使用的比较通用的汉字在1 万字左右,则对七律而言,理论上可能产生的诗歌总数是10,000 的7*8 次方,即2 的744次方,这是一个不折不扣的天文数字(围棋的可能盘面总数为3的19*19 次方,也就是3的361次方)。

在这个浩瀚无比的诗歌可能空间中,如何通过算法尽可能多地生成古人还没有“来得及”写出来的那些“良态”(well-formed)诗歌(这个数量显然极其巨大,古人只是创作出了其中微乎其微的一小部分,绝大部分空间还有待于我们通过算法去“挖掘”,即基于已知的古人诗歌创作空间对未知空间进行合理推衍),同时排除掉那些“病态”(ill-formed)的可能诗歌,其难度不言而喻;

(三)从研究角度来看,诗歌创作是一种与下围棋截然不同的人类智力活动,属于自然语言范畴,在形式上有平仄、押韵等要求,在内容上有文辞流畅性、上下文连贯性乃至整体一致性(包括整体语义、意境、风格、情感)等要求,并且对一首诗歌的评判,仁者见仁、智者见智,没有统一、确定的标准(这一点也与围棋截然不同),这就给算法设计提出了诸多新的挑战。

“九歌”研发团队部分成员在第57届国际计算语言学年会上(2019)

二、诗歌自动写作研究的发展历程及现状

诗歌自动写作研究在进入20 世纪后得到了越来越多的重视。早期工作几乎都是基于规则和模板的,典型如基于专家系统的西班牙文诗歌写作系统ASPERA[4]和日本俳句写作系统。[5]当时产生的主流机器学习常被用来提高诗歌写作的质量, 如遗传算法被用于外国诗歌写作,[6]也被用于宋词写作。[7]还有尝试其他途径的, 如融合了信息检索、生成性总结(Generative Summarization)及约束优化的诗歌写作方法。[8]由于缺乏有效的计算模型,上述工作总的来说还处于“初级”阶段,并且往往伴有一定的受限使用条件(如有些工作需要大量人为参与)。接下来,随着机器学习和自然语言处理不断取得重大进展,诗歌自动写作的计算范式发生了两次显著转变。

九歌所做绝句

第一次计算范式转变是源于统计机器翻译模型(Statistical Machine Translation, SMT)的出现(IBM Model 1-5)。微软亚洲研究院将其用于中国对联的自动写作,[9]可以在开放条件下生成较高质量的对联,在当时取得了颇为“震撼”的效果,He等[10]将这个方法进一步扩展到中国古典诗歌写作中, 所生成绝句的质量较以往的方法有了明显提升,充分展示出统计机器翻译模型的力量。第二次计算范式转变则是源于深度学习(深层神经网络)的出现。若干研究工作表明,其诗歌自动写作效果明显好于统计机器翻译模型,前一个计算范式差不多被彻底“终结”。

诗歌自动写作还面临一个回避不了的基本问题—所生成诗歌质量的评判标准问题。Manurung 等[11]指出,原则考量应包括如下三条:一是满足语法约束(Constraints of Grammaticality,即所生成的诗歌在句法上必须是“良态”的);二是有意义(Meaningfulness,即所生成的诗歌能够表达传递在某种解释下有意义的信息);三是诗性(Poeticness, 具有区别于其他诗性文体的特征)。

第一条是最基本的要求,貌似简单,但其实并不容易做到,经验表明,如果利用马尔科夫语言模型或者隐马尔科夫语言模型,其生成诗句的文辞流畅性在很多情况下是难以保证的;第二条属于深层次的,既有单一诗句是否有意义的问题,也有上下文连贯性以及整首诗歌整体语义是否合理、明确、一致的问题;第三条是分层次的,有平仄、押韵等形式上的基本层次要求,更重要的是关涉到意境、风格、情感等深层次要求。这三条原则得到了相关研究者们的广泛认同。以之为指导,在具体考量指标上,研究者们通常会选择无须人工介入的Perplexity 或者BLEU 值以及人工介入的评判(请一定数量的诗人独立打分),来综合决定所写作诗歌的质量。

九歌所做集句诗

近年来诗歌自动写作的主要工作几乎都是在深度学习的计算范式下进行的。Zhang 和Lapata[12]提出了一种以循环神经网络(Recurrent Neural Networks, RNN) 为主,卷积神经网络(Convolutional Neural Networks, CNN)为辅的中国古典诗歌绝句写作方法,这应该是深度学习计算范式下的第一个诗歌写作研究工作。这个工作涉及了三个子模型:卷积句子子模型(嵌入了汉字向量)、循环上下文子模型和循环生成子模型。其中关键是循环上下文子模型,这里所有上下文(多个句子向量)都被动态“粗暴”压缩成一个向量供循环生成子模型使用。

实际上, 在诗歌自动写作过程中如何处理好“上”文(一般是指生成当前字之前已经生成了的所有诗句,所以也被称作history)是每一个系统设计者都必须认真思索的一个关键因素。理论上,考虑的history 越长,就越有利于保持上下文连贯性和全诗一致性,但另一方面,会导致训练数据稀疏现象变得越严重,生成句子的流畅性因此可能受到较大影响,这始终是一对“此长彼消”的矛盾,需要设计者精心权衡(trade-off)。另外,如果history 的向量表示过于粗放(coarse-grained),其语义细节的丢失也会对诗歌的连贯性产生不利影响。严格来说,这个工作不是“纯粹”的神经网络模型,为了保证一致性,嵌入了传统的SMT 特征和三元语言模型,整个模型显得比较“臃肿”,属于两个计算范式之间转变的过渡态。

Yan[13]的工作同样混合利用了RNN 和CNN, 其可圈点之处是增加了一个多趟“迭代打磨”(iterative polishing)机制。作诗过程不是一趟就完成,而是产生一首完整的诗后, 其向量表示会被认作诗的“要点”而与用户输入的intention(用户主题词,通常为一个或一组关键词)合并在一起参与到下一趟的生成中。这样做显然会使作诗用时大大延长。

九歌所做绝句

Wang 等[14]Yi 等[15]最早受神经机器翻译模型的启发,[16]把带attention 的端到端长短时记忆神经网络模型(End-to-End Long Short-Term Memory, End-to-End LSTM)用于中国古典诗歌写作的两个独立的工作(Yi 等在2016 年已将相关论文公布在arXiv 上),前者写作宋词,后者写作绝句,其中Yi 等通过引入字的全局tf*idf 信息对attention 机制进行了改造,从迄今为止的全部history 中动态提取出“显著性”高的局部history,在上下文连贯性和生成句子流畅性之间找到了一个比较好的平衡,缓解了Zhang 和Lapata 将history“粗暴”压缩成一个向量带来的弊端。

在history 处理机制方向上另一个进展是,Zhang 等[17]利用静态memory 存储一些古人写的诗歌,用以提升多样性。Yi 等[18]则借鉴认知心理学中关于工作记忆(working memory)的机理,提出了动态history memory 模型, 可在训练以及生成的过程中对memory 动态地读写,具有显著性历史信息记忆和选择性擦除功能, 能较好满足较长篇幅诗歌生成连贯性的需要,且生成质量得到了进一步提升。

除了上述针对history 机制的研究之外,诗歌写作研究正沿着若干方向在不断扩展深化。譬如:

方向之一:Wang 等[19]通过预先统计关键词集在古诗库中的句子位置信息,在作诗过程中对关键词出现的先后制约进行“规划”(planning),以期生成整体性强的诗歌。这个策略虽然过于直白、简单,但其试图利用宏观知识对诗歌生成结构进行某种“控制”的基本想法是可取的。

方向之二:Ghazvininejad 等[20]的Hafez 外国诗歌写作系统混合了RNN 和确定性有限状态自动机,值得一提的是,它增加了一个“风格控制”机制以提高所生成诗歌的主题相关性和风格多样性,虽然仅仅是在RNN 的beam search 中通过调整“情感词”“用户主题词”的权重予以简单控制(Hafez 系统获得了ACL 2017 最佳展示奖)。Yang 等[21]在端到端的LSTM 模型中引入了额外的诗句风格间的互信息正则项约束,最大化该约束的理论下界,经过多轮训练使得不同风格的诗句在解码端能够解耦合,从而实现风格可控的诗歌生成。受图像智能处理中风格转换研究正酣的变分自动编码器模型(Variational Autoencoder, VAE)的启发,Yang 等[22]将条件VAE 嵌入通用循环神经网络中,可以全自动地学习隐变量的话题信息,使得所生成的中国古典诗歌对用户给定的主题具有较好的整体连贯性。Li 等[23]的工作类似,也是希望借助条件VAE 提高所生成古诗的主题连贯性(但额外增加了一个生成竞争机制)。上述工作基本上都是在原始诗库上无监督训练的,这是它们的长处,但由于缺乏“示教”,存在性能上的先天不足。

方向之三:Yi 等[24]针对生成诗歌质量的评判标准问题进行了深入思考和探索。以往的诗歌生成模型大都是基于极大似然估计(MLE),即优化目标是使所生成诗歌的每个字都与ground truth 更接近。这样的做法显然不足够,因为我们想要的是一首生成的“好诗”,并非一首与古人完全重复的诗。MLE 是基于单字的似然优化,而人类评价诗歌好坏是基于诗句或整首诗,这个工作直接对通顺性、上下文关联性、语义丰富程度、诗歌的整体质量等人类评价指标进行优化,设计了一种“互增强学习”机制,同时训练两个诗歌生成模型,并在训练过程中让这两个模型互相学习、互相借鉴,以实现互相追赶,共同提升,最终进一步提高生成诗歌的质量, 有效改善了以往模型中存在的优化指标类型不匹配以及粒度不匹配的问题。

三、“九歌”—  中国古典诗歌自动写作的一个案例

清华大学自然语言处理和社会人文计算实验室自2016年初开始进行基于人工智能算法的中国古典诗歌写作研究,并于2017年4月推出了中国古典诗歌写作系统“九歌”(https://jiuge.thunlp.cn/)。

九歌二维码

迄今为止,“九歌”已为广大互联网用户写作了约500万首诗歌。2017年开发团队骨干成员矣晓沅、陈慧敏、杨成等携“九歌”参加了央视一套黄金档大型科学挑战类节目《机智过人》,“九歌” 与三位当代青年诗人同台竞技,比拼诗歌创作能力,成功通过了现场观众的测试,节目视频在网络上观看次数约1,000万次。

九歌主要研究人员之一、清华大学计算机系研究生矣晓沅(左二)在中央电视台-1《机智过人》节目上

“九歌”还受邀在首届中国北京国际语言文化博览会、《机智过人》人工智能2017年度盛典、第七届吴文俊人工智能科学技术奖颁奖晚会、央视三套《收获2017》、赋能中国-2018人工智能产业化高峰论坛等场合进行公开展示,接受用户的直接检验。2017年,“九歌”获第十六届中国计算语言学大会(CCL2017)最佳系统展示奖。2018年,“九歌”团队参加京澳中学人工智能周,到北京人大附中及澳门培正中学做多场讲座。2018年9月,“九歌”与腾讯合作,推出了“中秋月-为故乡写诗”Web 应用,根据用户拍摄的照片生成与内容基本对应的诗,共产生了300多万个图文并茂的“作品”。

这里列举“九歌”自动写作出来的诗、词各一首,可以约略感受到人工智能诗歌写作的现有水平:

七律·中秋

不道今宵是古天,清辉犹在旧风烟。

月华渐满长安陌,山气微生广武川。

白露乍晞花底桂,素轮仍动镜边莲。

谁堪夜夜思归客,独对寒窗感岁年。

渔歌子·春风

春风吹雨过江湄,

万顷烟波漾碧漪。

红蓼岸,绿杨堤,

白苹洲上小桥西。

实际上,对系统进行稍微细致一点的考察就会发现,“九歌”存在的不足还很多,需要持续改进。为了推动诗歌自动写作研究,“九歌”最近在github 上开放了相关源代码及数据集,参见 https://github.com/THUNLP-AIPoet 。

四、结语

表面上看,中国古典诗歌自动写作是一个非常民族化的研究课题,但其所涉及的众多研究问题不仅具有前沿性,同时具有很强的学术通用性,在文化创意产业和智能教育产业方面具有很好的应用前景。其研究还只是刚刚开了一个头,对不少问题的探索只是蜻蜓点水,面临深刻的学术挑战。我们要不断深化相关研究,持续努力,使中国古典诗歌这个文化传统瑰宝在新时代通过与人工智能的结合焕发新的青春(例如,我们可以通过人工智能写诗系统的某种变形,在互联网上辅助千千万万的人学好、写好中国古典诗歌)。本文为国家社会科学基金重大项目“基于大数据技术的古代文学经典文本分析与研究”(18ZDA238)阶段性成果。

注释:

[1] Katta G. Murty and Santosh N. Kabadi, “Some Np-Complete Problems in Quadratic and Nonlinear Programming,” Mathematical programming, vol. 39, no. 2, 1987, pp. 117–129.

[2] S. Colton and G. A. Wiggins,“ Computational Creativity: the Final Frontier? ”Frontiers in Artificial Intelligence and Applications, Montpellier, vol. 242, 2012, pp. 21–26.

[3] Sidi Lu, Yaoming Zhu, Weinan Zhang, Jun Wang, Yong Yu, “Neural Text Generation: Past, Present and Beyond,” arXiv.org > cs > arXiv:1803.07133, 2018.

[4] Pablo Gervás, An Expert System for the Composition of Formal Spanish Poetry, London: Springer, 2001,pp. 181– 188.

[5] Xiaofeng Wu, Naoko Tosa and Ryohei Nakatsu, “New Hitch Haiku: An Interactive Renku Poem Composition Supporting Tool Applied for Sightseeing Navigation System,” in Proceedings of the 8th International Conference on Entertainment Computing, Paris, 2009, pp. 191-196.

[6] Robert P. Levy, “A Computational Model of Poetic Creativity with Neural Network as Measure of Adaptive Fitness,” in Proceedings of the ICCBR-01 Workshop on Creative Systems, 2001; Hisar Maruli Manurung, “An Evolutionary Algorithm Approach to Poetry Generation,” PhD Thesis, University of Edinburgh, 2003.

[7] 周昌乐、游维、丁晓君:《一种宋词自动生成的遗传算法及其机器实现》,《软件学报》2010年第3期。

[8] Rui Yan, Han Jiang, Mirella Lapata, ShouDe Lin, Xueqiang Lv and Xiaoming Li, “‘I, Poet’: Automatic Chinese Poetry Composition Through a Generative Summarization Framework under Constrained Optimization,” in Proceedings of the 23rd International Joint Conference on Artificial Intelligence, Beijing, 2013, pp. 2197-2203.

[9] Long Jiang and Ming Zhou, “Generating Chinese Couplets Using A Statistical MT Approach,” in Proceedings of the 22nd International Conference, 2008, pp. 377-384.

[10] Jing He, Ming Zhou and Long Jiang, “Generating Chinese Classical Poems with Statistical Machine Translation Models,” in Proceedings of the 26th AAAI Conference on Artificial Intelligence, Toronto, 2012, pp. 1650-1656.

[11] Ruli Manurung, Graeme Ritchie and Henry Thompson, “Using Genetic Algorithms to Create Meaningful Poetic Text,” Journal of Experimental Theoretical Articial Intelligence, vol. 24, no. 1, 2012, pp. 43-64.

[12] Xingxing Zhang and Mirella Lapata, “Chinese Poetry Generation with Recurrent Neural Networks,” in Proceedings of the Conference on Empirical Methods in Natural Language Processing, Doha, 2014, pp. 670-680.

[13] Rui Yan, “I, Poet: Automatic Poetry Composition Through Recurrent Neural Networks with Iterative Polishing Schema,” in Proceedings of the 25th International Joint Conference on Artificial Intelligence, New York, 2016, pp. 2238-2244.

[14] Qixin Wang, Tianyi Luo, Dong Wang and Chao Xing, “Chinese Song Iambics Generation with Neural Attention-Based Model,” in Proceedings of the 25th International Joint Conference on Artificial Intelligence, New York, 2016, pp. 2943-2949.

[15] Xiaoyuan Yi, Ruoyu Li and Maosong Sun, “Generating Chinese Classical Poems with RNN Encoder-Decoder,” in Proceedings of the 16th Chinese Computational Linguistics, Nanjing, 2017, pp. 211-223; Xiaoyuan Yi, Ruoyu Li and Maosong Sun, “Chinese Poetry Generation with A Salient-Clue Mechanism,” in Proceedings of the SIGNLL Conference on Computational Natural Language Learning, Brussels, 2018, pp. 241-250.

[16] Dzmitry Bahdanau, KyungHyun Cho and Yoshua Bengio, “Neural Machine Translation by Jointly Learning to Align and Translate,” in Proceedings of the International Conference on Learning Representations, San Diego, 2015.

[17] Jiyuan Zhang, Yang Feng, Dong Wang, Yang Wang, Andrew Abel, Shiyue Zhang and Andi Zhang, “Flexible and Creative Chinese Poetry Generation Using Neural Memory,” in Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics, 2017 , pp. 1364-1373.

[18] Xiaoyuan Yi, Maosong Sun, Ruoyu Li and Zonghan Yang, “Chinese poetry Generation with A Working Memory Model,” in Proceedings of the 27th International Joint Conference on Artificial Intelligence, Stockholm, 2018, pp. 4553-4559.

[19] Zhe Wang, Wei He, Hua Wu and Haiyang Wu, Wei Li, Haifeng Wang, Enhong Chen, “Chinese Poetry Generation with Planning Based Neural Network, ”in Proceedings of COLING 2016, the 26th International Conference on Computational Linguistics: Technical Papers, Osaka, 2016, pp. 1051-1060.

[20] Marjan Ghazvininejad, Xing Shi, Yejin Cho  and Kevin Knight, “Generating Topical Poetry,” in Proceedings of Conference on Empirical Methods in NaturalLanguage Processing, Texas, 2016, pp. 1183–1191; Marjan Ghazvininejad, Xing Shi,Jay Priyadarshi and Kevin Knight, “Hafez: An interactive poetry generationsystem,”in Proceedings of ACL 2017, System Demonstrations, pp. 43–48, Association for Computational Linguistics, (ACL 2017 best demo paper), 2017.

[21] Cheng Yang, Maosong Sun, Xiaoyuan Yi and Wenhao Li, “Stylistic Chinese Poetry Generation via Unsupervised Style Disentanglement,” in Proceedings of Conference on Empirical Methods in Natural Language Processing, Brussels, 2018, pp. 3960-3969.

[22] Xiaopeng Yang, Xiaowen Lin, Shunda Suo and Ming Li, “Generating Thematic Chinese Poetry Using Conditional Variational Autoencoders with Hybrid Decoders,” in Proceedings of the 27th International Joint Conference on Artificial Intelligence, Stockholm, 2018, pp. 4539-4545.

[23] Juntao Li, Yan Song, Haisong Zhang, Dongmin Chen, Shuming Shi, Dongyan Zhao and Rui Yan, “Generating Classical Chinese Poems via Conditional Variational Autoencoder and Adversarial Training,” in Proceedings of the Conference on Empirical Methods in Natural Language Processing, Brussels, 2018, pp. 3890-3900.

[24] Xiaoyuan Yi, Maosong Sun, Ruoyu Li and Wenhao Li, “Automatic Poetry Generation with Mutual Reinforcement Learning,” in Proceedings of the Conference on Empirical Methods in Natural Language Processing, Brussels, 2018, pp. 3143-3153.

编 辑  |  刘知远 张敬钰

原刊《数字人文》2020第一期, 转载请联系授权。