对于同一个意象,不同风格的诗人可以写出不同风格的诗句。大多数自动作诗的研究集中在提高诗句前后的一致性上,对于风格化的作诗,一些研究通过风格转换来实现,但是这类方法严重依赖于标注数据。本文通过引入互信息作为正则约束,提出了基于无监督的方法实现诗词风格化输出。
Introduction
利用计算机来作诗是很有意思,也具有挑战性的任务。近年来,对自动作诗的研究也越来越多,方法从最初基于规则和模板的方法发展到基于神经网络序列到序列(Seq2Seq)的方法,但这些方法大多都在关注生成诗词的质量上,比如连贯性,一致性等。但是古诗中还有另外一个问题,就是对于同一个意象,不同风格的诗人会写出截然不同的诗句,这就要求对于同一个输入,模型需要输出不同的结果,如Fig1所示。
基于Seq2Seq的方法在机器翻译中也广泛应用,但是两者的目的存在很大不同,对于翻译任务来说,它的一一对应关系较强,比如“苹果”这个词在英文翻译中必定会有 “apple” 与之对应,对于诗句则不然。本文提出了一种对于同一输入可以产生多个输出的生成模型,同时保证不同的输出之间有较大的区分性。另一方面,因为语料库中对于诗歌风格暂时没有专家标注,本文的模型利用互信息作为约束正则项,可以实现完全无监督的风格生成。人工评测结果表明,这个模型生成的各种风格都是可识别的,并且其他指标也优于基线模型。
Method
我们首先来回顾下互信息和基于注意力机制的Seq2Seq模型。
互信息
本文提出基于互信息的方法来实现风格化的诗句生成。给定两个随机变量X和Y,互信息I(X,Y)衡量的是给定其中一个变量,能得到关于另一个变量的多少信息量,数学定义如公式1。 互信息也可以用来衡量X与Y的联合分布 P(X,Y) 与它们边缘分布乘积 P(X)P(Y) 之间的相似程度。
Seq2Seq Model with Attention
对于序列到序列的建模,经典的框架是 Encoder-Decoder 框架,这个框架最早用于机器翻译任务中,本文的诗句生成模型也基于这种框架。对于Encoder部分,采用双向的LSTM结构,将输入的句子X映射到特征空间,LSTM隐层状态的计算过程为:
(2)(3) 分别对应着前向和反向的计算,是对输入句子每个字的 Embedding。最后将T 时刻前向和反向计算得到的隐层状态级联起来作为对输入句子进行编码之后的特征表示,然后将其送入 Decoder 部分。
解码器也是用 LSTM,并且采用 Attention 机制。其中的 Attention 机制是在解码每个输出字符时,同时利用 encoder 的每个时刻状态的加权计算一个context 向量 ,共同用来产生当前时刻的输出。因此对于解码第 i 个字符时,对应的概率分布可以表示为:
其中g(·) 是基于 softmax 的分类,si是解码器 LSTM 的第 i 个隐层状态,其中, e(yi-1)是 yi-1的 embedding,ai 是 context 向量。
Decoder Model with Style Disentanglement
为了生成不同风格的诗句,解码器的输入除了上一句诗句的特征,还需要一个表示风格的输入。对于风格采用 one-hot 编码表示,假设拥有 K 种风格,然后将句子的特征 hT 和风格的 one-hot 编码级联起来。但是这样输出模型并不能保证生成的句子和 style 之间有很强的相关性。换句话说,当 style 改变的时候,输出的句子也可能完全一样,导致这个问题的根源在于在模型训练时没有相关的监督信号使得模型对于不同的 one-hot 风格编码产生不同的输出。因此,需要添加一个正则来加强风格化编码和生成诗句之间的相关性。
在这里我们假设输入的 style 是服从均匀分布的,即。由于互信息是衡量两个随机变量之间的相互依赖性,因此本文提出最大化风格的分布 Pr(Sty) 与生成句子的分布 P(Y; X)之间的互信息来增强它们的相关程度。接下来我们计算 Pr(Sty) 和 给P(Y; X) 之间的互信息:
注意上面推导中用到了这样的性质,后验分布,这是由于 X 与风格 sty 之间相互独立。但是上述的后验分布 Pr(Sty=k|Y) 不可知,因此没法直接求解上述积分。这种情况下,我们采用变分推断的思想,引入另一个分布 Q(sty=k|Y) 来逼近 P,通过推导我们能得到式子7中互信息的下界:
注意上述推导中不等号部分采用的性质是 KL 距离的非负性和当 KL 为0时,两个分布相等。我们的问题从最大化 Str 和 P(Y;X)的互信息,转化为最大化式子8给出的下界。接下来的难题是如何得到分布 Q 和如何计算下界式子中积分。
Posterior Distribution Estimation
给定输出的句子,Q 分布可以估计出给定 Y 时风格的概率分布,因此可以区分出不同的风格。我们利用神经网络来拟合函数 Q。具体地,首先计算输出句子 Y 的平均的 embedding ,然后使用线性映射,通过 softmax 进行归一化,其中:
Expected Character Embedding
最后要解决的问题是对进行积分,由于积分的空间与词汇表的大小成指数关系,不太可能枚举所有的可能性来计算这个积分。我们提出采用expected character embedding来近似输出句子的概率空间。
式子4给出了生成第 i 个字的概率分布,因此对输出字符 embedding 的期望为:
其中。随后作为解码器的 LSTM 的输入,更新下一时刻的隐层状态:
最后,使用所有的作为 Y 的概率空间的近似,因此式子8可以写为:
最后将正则加入到训练的Loss 中,我们的目标是最大化如下的Loss:
实验
具体的实验细节请参考论文, 这里主要来看下人工评测的结果,从Fluency,Coherence,Meaningfulness,Poeticness四个方面进行评测。对比的是 Seq2Seq 模型和利用本文提出的方法 SPG 生成的结果进行评分的结果:
参考链接
1. https://www.paperweekly.site/papers/2500
2. 论文链接:
http://nlp.csai.tsinghua.edu.cn/~yangcheng/publications/emnlp2018.pdf