读论文《Toward Controlled Generation of Text》

代码:https://github.com/wiseodd/controlled-text-generation

作者博客:http://www.cs.cmu.edu/~zhitingh/

Toward Controlled Generation of Text这篇论文是Zhiting Hu发布在ICML2017上的paper。这篇paper主要干的事情就是其题目中所描述的,生成可以控制方向的文本,方向也就是文本的各种属性。

这篇paper中提出来的结构是基于VAE的,将VAE和一个判别器D结合的结构。文中刚开始便提到,如果要用VAE做定向的文本生成,必须克服两个困难,一是NLP问题是连续问题不可导,二是VAE中的隐变量z中各项属性是相互纠缠在一起的,不能单独的控制单个属性的定向生成。为了克服这两个问题,作者在优化的时候采取了一些措施,下面会提到。

为了实现定向文本生成,paper中采取了用一个新的变量c与原来VAE中的隐变量z相结合,其中c关联着句子中想要控制的特定属性,而z则控制着其他属性。通过变量的分布(z,c)来生成句子后作为判别器D的输入,而D又根据这些输入来训练改变c的分布,整个模型的结构示意图如下:

图中如果没有下面的判别器D的话,就是一个原始的VAE,而判别器加入是为了得出c的分布。图中蓝色和红色的箭头分别表示的是模型对于独立性的判别方法和优化方法。就优化方法而言,整个模型的优化其实有点像wake-sleep算法,文章中也有提到过,就是交替优化VAE和判别器D,并且有一种竞争优化的感觉。

具体来讲,对于生成器G,其生成输出的过程可描述为:

而每一步都直接取特定的单词作为输出的话,单词间的离散性会导致整个过程的不可微,也就没法优化后面的判别器D。(所谓的这个问题,是指如果在decoder输出阶段直接输出一个预测的单词向量x^,则由于单词的高维空间不连续的原因,不一定有一个真实的词对应生成的这个单词向量x^,因此生成的句子是毫无意义的,所以接下来也不能作为判别器D的输入用作数据增强,但是加一个softmax,通过softmax预测的概率值,在已有的词表中找到一个对应预测的单词向量x^的真实存在的单词x作为decoder输出,则生成的句子是有意义的。。。但是代码好像不是这样。观察函数sample_soft_embed和sample_sentence。。好像sample_soft_embed反而是把得到的输出假定为是离散的,通过softmax把输出变成连续的近似值,即输出直接是一个softmax值而不是一个单词。我也不知道这么做有什么用。。。)为了解决这个问题,paper中将每一步改为一个softmax 的概率值,使得其变成一个可导的连续量,如下:

式中ot为输出,而τ为初始值1的温度值,训练过程中由1慢慢退火到0,从而将从连续分布慢慢逼近近似离散分布。

确定了z和c的分布后,标准VAE的loss如下:

需要注意的是,这个时候是将判别器D和c的分布qD(c|x)固定后进行计算的,即这个过程并不训练判别器D。但是对于VAE中生成器G生成的文本,判别器此时应当判别其是否能够与我们希望的属性相匹配,因此加入一项损失函数,如下:

 

这项损失函数即为计算生成的句子与希望的c的分布之间的交叉熵,从而优化生成器G,当然,此时D也是不进行优化的。

paper中接下来又提出了很亮的一点。作者为了保证属性之间的独立性,使其不产生相互干扰,即D只优化目标属性而不会对其他属性进行优化,又特意的强制其他不相干的属性要在隐变量z中被完全的表示出来。而且这个任务作者并没有去训练一个新的判别器,而是直接将VAE中的编码器E拿过来使用的。文中提到,因为E对于z的作用和D对于c的作用可以视为一样的,都是将文本中的属性抽出来得到其分布。因此,第三项loss表示为:

综合这三点,训练编码器E和生成器G的损失函数为:

其中λ为权重因子。

而关于判别器的训练,是用半监督学习的方法得出的。即少量的有属性标签的样本和大量的生成器生成的无标签的样本进行训练,loss分别如下:

式中H(qD(c`|x))是条件分布qD的熵,β为权重因子,paper中提到熵这一项的加入可以使得判别器在预测标签方面具有更高的可信度,因此对于判别器D的损失函数如下:

其中λ为权重因子。

既然已经知道VAE和判别器D各自的损失函数,就可以对其进行优化了。具体优化过程为交替的优化VAE和判别器,算法如下:

算法中Eq(4,8,11)分别为上面提到的不同的loss函数。

关于实验,paper中做了情感(p/n)和时态这两个属性的实验。

其中情感属性采用的数据集为SST-full,SST-small(作者自己构建的一个子集,为了测试监督数据可以有多么少),Lexicon(词典,为了验证训练判别器D只需要单词级别的文本也可以),IMDB。而验证标准为将模型生成的文本在state-of-the-art的情感分类器上进行测试,看分类准确性和先验的c的重合程度。实验中以S-VAE为baseline,并在各个数据集的准确度上都有了3%~4%的提升。

除了这个标准外,文章中还采取了一个比较隐形的标准。因为判别器D和VAE是共同进行交替训练的,可以认为有一个竞争的关系,所以更好的G必然会使得训练出来的D更好。反过来,可以用D的性能来反映G的性能。因此文中将G生成的句子作为训练语料训练出了判别器D,并且通过评判D的准确性来评判G的性能。而结果证明加入了正则化项和隐变量c会使得判别器的性能提升,并且也超过了S-VAE的baseline。

而关于时态,因为没有时态标签的数据集,所以作者将一个时态标签的词典作为监督学习的材料进行训练了。最后的结果是通过例子展示的,即只控制c的改变,模型会生成句意基本保持一致而时态不同的输出。作者也通过比较加不加独立性强制,证明了加了强制后输出的句子不会产生其他属性的改变,证明了强制约束的有效性。

这篇论文最大的贡献在于将VAE中的属性相互交错在一起隐变量z,通过加入特定判别器的方法,成功的将z中的特定属性c抽出来,从而生成具有特定属性的文本。并且各个属性之间是可以单独进行训练,然后随意组合的,而且半监督学习要求的样本数量很少,形式也没有什么要求,甚至可以是单词和短语,这就使得训练对样本的需求要求大大的降低了,并且可以并行的训练很多个属性。

而整篇paper从结构的搭建,到连续逼近离散的处理,再到模型的优化算法,包括施加独立性的强制约束和通过判别器D的性能来隐性的反应G的性能,都是闪光之处,也是十分值得去借鉴和学习的。

这篇paper现在还存在的问题就是句子长度太短,只有15个,并且没有给出如何将独立的不同属性组合起来的具体方法。而想要将这篇paper中的结构运用到其他NLP问题上,比如对话系统等等,则需要进一步的实验,以及对于模型架构的新的改进。

 

参考文献

Hu Z, Yang Z, Liang X, et al. Toward Controlled Generation of Text[J]. 2018.
--------------------- 
作者:梦柏 
来源:CSDN 
原文:https://blog.csdn.net/qq_35575638/article/details/81590025 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值