GPT-based Generation for Classical Chinese Poetry

1. 优点

  1. 模型简单,使用标准的GPT。没有人工规则,没有调整神经网络结构。
  2. 诗歌的多样性。在生成过程中,我们采用了截断的top-k抽样策略。因此,在相同的形式和主题下,所产生的诗歌在不同的运行中具有高度的多样性。
  3. 结构良好性。 输出结果符合预期。
  4. 质量高。


    GPT-based Generation for Classical Chinese Poetry_第1张图片

    其中一首诗是真的,其余三个系统生成的。

2. 原理

整个研究中,需要做的就是把训练用的诗词序列化为格式化的文本序列,作为训练数据。

然后通过对语言模型token的抽样,生成满足形式和内容要求的诗词,比如绝句、律诗、词,以及对联等等。

而且,他们还提出并实现了一种对模型进行微调以生成藏头诗的方法。

这背后的能量来自GPT,一个由OpenAI提出的预训练自然语言模型,核心理念是先用无标签的文本去训练生成语言模型,然后再根据具体的任务通过有标签的数据对模型进行微调。

乐府AI是首个基于GPT打造的作诗系统,而且与谷歌提出的BERT息息相关。

整体的GPT模型是在BERT的源代码基础上实现的,Transformer大小的配置与BERT-Base相同,也采用了BERT中发布的tokenization 脚本和中文 vocab。

3. 模型

具体来说,训练诗歌生成模型的过程如下:


GPT-based Generation for Classical Chinese Poetry_第2张图片
image.png

整个模型训练过程一共有两个阶段: 预训练和微调。

华为的这个GPT模型,是用一个中文新闻语料库进行预训练的,然后通过收集了公开可得的中国古诗词进行微调。

如上图所示,首先将示例诗歌转换为格式化序列。序列包括三个主要部分:格式、主题和诗体,中间用标识符分开。

在对联中,因为没有主题,就上句为主题,第二行为正文。所以,在生成对联的时候,就成了给出上联,生成下联的模式,也符合了“对对子”的习惯。


GPT-based Generation for Classical Chinese Poetry_第3张图片
image.png

整体的数据集规模并不小,预训练用的中文新闻语料库,有2.35亿句子。微调用的数据集有25万绝句和律师,2万首词以及70万对对联。

预训练是在华为云上完成的,使用8块英伟达V100(16G) GPU训练了4个echo,一共耗费了90个小时。

微调的过程是将所有诗歌序列输入Transformer,并训练一个自回归语言模型。目标是观测任何序列的概率最大化:


image.png

微调的过程,不需要特别长的时间,如果训练过长,这个模型就在生成过程中,就会倾向于从语料库中直接用原始句子了。

训练完成后,先将要生成的诗歌的格式和主题转化为一个初始序列,然后将初始序列输入到模型中,然后对诗体部分的剩余字段按token进行解码。

在解码过程中,并不使用硬约束来保证格式的正确性,而是让模型自动为特定位置分配逗号和句号,在识别到token为“EOS”的时候,解码过程结束。

而且,采用截断 top-k 抽样策略来获得不同的诗歌,而不是束搜索。具体是每次采样一个Token时,首先选择具有 top-k 最大概率的Token,然后从 top-k Token中采样一个特定的token。

他们说,即使采用截短的 top-k 抽样策略,生成的诗歌仍然是正确的形式。

论文中介绍称,训练藏头诗的方法也是这样,只是在格式化序列的时候方法有所不同:用每一行中第一个字符的组合来代替一首诗的原始主题:“五言绝句(格式)床疑举低(藏头诗)床前明月光,疑…月,低头思故乡。”

你可能感兴趣的:(GPT-based Generation for Classical Chinese Poetry)