九歌多样化古典诗歌机器写作模型MixPoet开源
2020-07-02

中文古典诗歌形式规则,表达凝练,同时具有丰富的情感和内容,是研究文学性文本自动理解和生成的重要切入点。近年来诗歌自动写作这一任务在自然语言生成领域逐渐受到重视, 多个不同的模型相继被提出。然而大多数模型只关注到评价诗歌质量的一些基本指标(如上下文连贯性,扣题程度,韵律的匹配),却忽略了生成诗歌的多样性。

一个基础的Seq2Seq模型依据两个不同的关键词生成的两首五绝.png

图1 :一个基础的Seq2Seq模型依据两个不同的关键词生成的两首五绝。

如图1所示,当我们输入不同的关键词时,现有的古典诗歌生成模型倾向于生成雷同的短语甚至一模一样的句子。这一性质使得生成的诗歌中充满大量重复乏味的内容,损害了生成诗歌的多样性、新颖性和趣味性,大大降低了用户的使用体验。

以不同关键词为输入,作诗模型生成的诗歌及人类诗人作品中高频词所覆盖的内容占比.png

图2:以不同关键词为输入,作诗模型生成的诗歌及人类诗人作品中高频词所覆盖的内容占比

区别于模型生成的诗歌,人类诗人创作的诗歌往往是高度新颖多样的。如图2所示,对大多数现有的模型来说,生成的诗歌中最高频的20个词占了所有生成内容的20%,即大量的内容是雷同重复的。相比之下,人类诗作词汇分布更加均衡多样(最高频的20词只占了约5%)。这是因为每一位诗人都有自己独一无二的写作风格,即使在同样的主题下,每个诗人在遣词用句、情感表达及主题立意上都有所不同,这些差异性赋予其诗作较好的区分度。

受这一观察的启发,清华大学自然语言处理与社会人文计算实验室(THUNLP)“九歌”人工智能诗歌写作研究团队中的成员矣晓沅、李若愚、杨成及李文浩在导师孙茂松教授的指导下,提出了基于学习可控混合隐空间的半监督模型MixPoet,通过结合不同的风格来提升生成诗歌的多样性和差异性(论文发表于AAAI2020)。

MixPoet模型结构图.png

图3: MixPoet模型结构图

区别于其他模型,MixPoet没有直接建模每个诗人的风格,而是考虑影响诗人风格形成的多种因素(factor),如诗人所处的时代背景,诗人的人生经历等等。即我们将“风格”这一概念解释为多种factor的混合。在这一假设下,MixPoet允许定义不同的factor,并且通过为每一factor指定不同的取值,从而混合形成不同的风格。

具体如图3所示,MixPoet采用半监督的条件变分自编码器(Conditional Variational Autocoder), 构建一个隐空间z来捕捉风格因素,并将隐空间解耦为条件依赖到每一个factor上的子空间,从而实现不同factor的混合。

图4 以“明月”为关键词,MixPoet在不同factor混合下生成的诗歌。不同颜色标出了对应风格因素的内容。在同样的关键词下,生成的诗歌更加多样.png

图4:以“明月”为关键词,MixPoet在不同factor混合下生成的诗歌。不同颜色标出了对应风格因素的内容。在同样的关键词下,生成的诗歌更加多样。

总结而言,MixPoet具有如下特点:

  • 可控风格混合。对于一个给定的关键词,用户可以自己制定不同的风格混合,从而生成不同的诗歌。MixPoet也可以为关键词自动预测合适的混合,无需人为指定。
  • 半监督训练。MixPoet采用了半监督的VAE框架,仅用部分标注数据即可。
  • 多样性提升。生成的诗歌语义更加丰富新颖。

论文标题:MixPoet: Diverse Poetry Generation via Learning Controllable Mixed Latent Space

论文链接:
https://arxiv.org/pdf/2003.06094.pdf

代码链接:
https://github.com/THUNLP-AIPoet/MixPoet


附 “九歌”团队其他开源模型及代码:

  • BERT-CCPoem

基于九歌团队约900万句古诗句预训练的BERT模型,可用于诗句相似度计算,诗歌自动分类等下游任务。

资源链接:
https://github.com/THUNLP-AIPoet/BERT-CCPoem

  • WMPoetry (IJCAI 2018)

基于Memory Network的诗歌生成模型。该模型能够较好支持多关键词输入,并将中文古典诗歌的格律拆解为字级别的格式embeding,能够较好地控制生成诗歌的格律和韵脚,并提升上下文呢关联性和扣题程度。

代码链接:
https://github.com/THUNLP-AIPoet/WMPoetry

  • StylisticPoetry (EMNLP18)

基于互信息解耦的无监督风格诗歌生成模型。该模型任务标注数据,能够自动将生成的诗歌划分为用户指定的任意数量个不同风格。

代码链接:
https://github.com/THUNLP-AIPoet/StylisticPoetry