3

中文诗歌生成论文学习笔记

 2 years ago
source link: https://alanxiuxiu.github.io/2018/09/02/Chinese-poems-generating-note/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在CSLT实习的第一个任务是阅读三篇论文,内容主要是讨论中文诗歌生成,分别为:

第一篇是讲注意力机制的诗歌生成模型,主要用于元曲生成;第二篇将模型应用到唐诗绝句上,做了一些改动;第三篇针对注意力机制模型在生成诗歌时创新性不足的问题,对模型结构进行了改进,加入了记忆机制。整理了阅读论文后记录的笔记,供参考。

Chinese Song Iambics Generation with Neural Attention-based Model

提出:利用注意力机制的seq2seq模型生成宋词,encoder部分是双向LSTM,decoder部分是另外一个LSTM。

诗歌的三个约束(dancing in fetters):

  • Structural pattern 控制行数以及每行的字数
  • Rhythmical pattern 控制某几行的最后一个字有同样的元音
  • Tonal pattern 要求特定位置的字有特定的平仄声

这三个约束重要性降序排列;除此之外,还需要有语义上以及情感特征上的一致性。宋词比起其他形式的文学作品,更加flexible。第一,比唐诗更长,不好控制主题;第二,约束比较复杂多样,不容易学习;第三,流传至今的样本有限。

诗歌生成的老方法:基于规则和模板、基于各种遗传算法、统计机器翻译(SMT,给出各个part的每种可能翻译,然后选取概率最大的最可能出现的)、从现有诗歌中拼凑总结。

怎样提升模型:首先,用双向LSTM做输入;其次,pretrain word embedding matrix,解决注意力模型中data sparsity的问题;Hybrid-tune Training,将tune有关的内容加在背景向量中,告诉模型正在用的是什么tune。

Can Machine Generate Traditional Chinese Poetry? A Feigenbaum Test

本篇仍是注意力机制的RNN模型,输入主题关键词输出相应主题的诗。应用于唐诗绝句。
Quatrain:唐诗绝句,四行诗,五言或七言;第二行和第四行的最后一个字押韵;平仄要求。因为唐诗比较严格,所以很难写(咋跟上一篇说元曲的时候矛盾了呢…)

比起之前一个论文的模型更简单,所以应用更广,可以应用到Sonnet and Haiku,十四行诗和俳句。之前元曲的模型应用到绝句时出现了很大问题。做了一些修改:通过关键词而不是第一局来生成诗句;single-word注意机制,用来提升对关键词的敏感度;loop generation方法,提升模型的流畅连贯和前后一致性。

该模型中encoder部分是双向gru,decoder部分也是gru。Gru和lstm区别:

  1. GRU和LSTM的性能在很多任务上不分伯仲。
  2. GRU 参数更少因此更容易收敛,但是数据集很大的情况下,LSTM表达性能更好。
  3. 从结构上来说,GRU只有两个门(update和reset),LSTM有三个门(forget,input,output),GRU直接将hidden state 传给下一个单元,而LSTM则用memory cell 把hidden state 包装起来。

目标函数为交叉熵(decoder生成的和ground truth之间的交叉熵),为了加速训练采用Minibatch stochastic gradient descent (SGD)算法,每句话都会重新计算梯度,采用AdaDelta算法调整learning rate。在训练阶段没有关键词的输入,所以用第一行作为输入来生成整句诗。

但是基础模型效果不好,原因是诗歌的感情各不相同,导致各自的训练数据都不够;还有就是在生成的最后阶段,即使有注意力机制,主题还是会变得模棱两可。关于模型改进:

  1. Character Vector Initialization:诗歌各自比较独特,直接训练模型会有data sparsity的问题,于是先用外部语料库学习每个字的语义表达,在用这些预训练过的表达去训练注意力模型。在实际中,先用word2vec将原字生成字向量,再用字向量来初始化word embedding matrix。
  2. Input Reconstruction:诗歌表达感情的方式比较隐晦含蓄,不好学习,导致生成的时候会跑题(theme drift),于是在根据句1生成234句后,再强制生成第1句,这样便于模型记住第一句,不会跑题。
  3. Input Vector Attention:隐含层表达的是综合后的语义,所以主题往往比较global,而不能根据各个关键词生成diverse的诗歌。于是采用多注意力机制,既关注隐含层也关注输入的字向量,这样accumulated和individual的语义都会被考虑到。关键词越多,生成的诗歌越惊艳。
  4. Hybrid-style Training:用杂交方式用同一个模型训练两种绝句(五言和七言),用一个type indicator来区分。这个indicator是一个200x200的随机矩阵的特征向量,每首诗都被分配了一个唯一的特征向量,输入到decoder的第一个隐含层,在训练过程中作为常量。

Flexible and Creative Chinese Poetry Generation Using Neural Memory

诗歌除了要遵循抽象的规则,还应该有美学上的创新。提出一个memory-augmented neural model。原问题出在只有rule-based reasoning(neural model), 没有instance-based memory。在模型基础上加上neural memory,这样特殊实例就能被saved and referred to。这个灵感来自neural Turing machine,但无需训练。

在memory augmentation的机制中,除了原本的neural model component,还有memory component。后者由从输入到输出的映射组成,记录特定例子。这里memory部分也可以看成是一种对neural model的regularization。Neural model部分,encoder用的是双向rnn(with gru units)。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK