《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

转自:https://bigquant.com/community/t/topic/121098

论文链接:Long Text Generation via Adversarial Training with Leaked Information 1

代码链接https://github.com/CR-Gjx/LeakGAN 2

来源:AAAI2018

解决问题:自动生成连贯的和语义上有意义的长文本

贡献

本文中提出了一种称为LeakGAN的新算法框架,通过对抗训练生成长文本。通过泄漏由判别器提取的特征作为逐步引导信号,以指导生成器更好地生成长文本,同时借鉴分层强化学习从判别器向生成器提供更丰富的信息。LeakGAN解决了先前GAN解决方案中标量奖励信号的非信息性和稀疏性问题。在包含长,中,短文本的生成数据和实际数据的大量实验中,LeakGAN的性能比以前的解决方案有显著的提高,且在生成更长的句子时可以获得更高的性能收益。

先前方案存在的问题:

生成对抗网络(GAN)使用判决性模型来指导生成模型的训练作为强化学习策略,这已经在文本生成中有很好的结果。但是,来自判别器D的标量指导信号是稀疏的,只有在生成完整文本后才可用,并且在生成过程中缺少关于文本结构的中间信息。因此,当生成的文本样本的长度很长时,效果不佳。

创新点:

利用GAN中D的特征(softmax前一层的网络输出),指导G中MANAGER模块的训练,使指导信号更有信息性;使用分层生成器结构,将整个生成任务分解为各种子任务,缓解指导信号的稀疏性问题。

模型

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

分层生成器G由一个高层次的MANAGER模块和一个低层次的WORKER模块组成, G通过MANAGER模块将D泄露的信息整合到所有生成步骤中,该模块利用生成单词的提取特征并输出一个潜在向量来指导WORKER模块进行下一个单词的生成。

(1)MANAGER是一个长短时记忆模型(LSTM),担任mediator。在每一步中,它都会接收D的高级特征表示,例如CNN的特征图,并用它来生成WORKER模块的指导目标。

(2)考虑到MANAGER生成的目标嵌入,WORKER首先用另一个LSTM编码当前生成的词,然后结合LSTM的输出和目标嵌入来进行当前状态下的最终动作。因此,来自D的指导信号不仅在最后可用于G的标量奖励信号,而且在生成过程中可用于目标嵌入向量,以指导G如何得到改进。

1、符号

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 :将先前生成的词作为当前状态

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 :随机策略的θ参数化生成网络

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 :将 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 映射到整个词汇表上的一个分布

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 :下一个要选择的词

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 :φ参数化判别模型

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 提供的标量引导信号,以便在生成完整的句子时调整参数

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 : 判别器在当前句子 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 为生成器 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 提供的附加信息特征

2、用判别器D的泄漏特征作为指导信号

典型的model-free强化学习的奖励函数是黑盒子,本模型的对抗文本生成使用 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 作为学习奖励函数。 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 是一个神经网络,可以分解成一个特征提取器 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 和一个具有权向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 的最终sigmoid分类层。给定输入s,有:

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

其中 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 , 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 最后一层中s的特征向量,它被泄漏给生成器 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

对于给定的 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,每个状态s的奖励值主要取决于提取的特征f。从 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 中获得更高奖励相当于提取的特征空间 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 中找到更高的奖励。 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 中的特征提取器 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 由CNN实现,在convolution-pooling-activation层之后输出CNN特征映射向量f。与标量信号 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 相比,特征向量f是一个对 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 更具信息性的引导信号,因为它知道当前生成的单词在提取的特征空间中的位置。

3、生成器G的分层结构

在生成过程中的每个步骤t中,为了利用来自 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 的泄漏信息 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,模型遵循分层强化学习,以具有 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 的分层体系结构。引入一个MANAGER模块(一个LSTM),它在每个步骤t将提取的特征向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 作为输入,并输出一个目标向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,然后将其输入到WORKER模块中,以指导下一个单词的生成,以便接近 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 中较高的奖励区域。

4、生成过程

MANAGER和WORKER模块都从全零隐藏状态开始,分别表示为 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 。MANAGER从判别器 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 接收泄漏特征向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,进一步与MANAGER的当前隐藏状态组合以产生目标向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,其中 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 表示由LSTM实现的MANAGER模块,参数为 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 是LSTM的递归隐藏向量。

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

为了结合由MANAGER产生的goal,对最新的c个goal进行求和并执行线性变换 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,权重矩阵为 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,生成k维目标嵌入向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

给定目标嵌入向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,WORKER模块将当前词 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 作为输入,并输出矩阵 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记,通过和 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 进行矩阵乘积来确定当前状态下的最终动作空间分布。

 

其中 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 表示WORKER模块,即以 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 作为其隐藏向量的LSTM, 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 矩阵,表示所有词的当前向量, 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 得出所有词的分对数,α是温度参数,控制生成熵。

5、G的训练(使用来自 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 的指导信号训练MANAGER和WORKER)

使用策略梯度算法(如REINFORCE)以端对端的方式训练 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 。单独训练MANAGER和WORKER模块,其中MANAGER经过训练以预测判别特征空间中的有利指导信号,WORKER得到奖励以遵循这些指导信号。MANAGER模块的梯度定义为:

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

其中《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 是当前策略下的预期奖励,可以通过Monte Carlo搜索近似估计。 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 代表c步转换后特征表示的变化(即 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 )和MANAGER产生的目标向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 之间的余弦相似度。损失函数强制目标向量匹配特征空间中的转换,同时获得高奖励。

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

使用REINFORCE算法对WORKER进行训练以最大化奖励,这可以通过对状态 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 和WORKER采取的动作 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 进行采样来近似。当鼓励WORKER按照MANAGER的指示动作时,WORKER的内在奖励被定义为:

 

在对抗训练之前,需要训练 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,其中MANAGER的梯度为:

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

其中《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 是真实文本的状态,。MANAGER被训练成模仿特征空间中真实文本样本的转换。WORKER通过最大似然估计(MLE)进行训练。

在训练过程中,生成器Gθ和判别器Dφ交替训练。在生成器中,MANAGER 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记
WORKER 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记 ,固定其一,交替进行训练。

实验

(**1)生成数据库:**用10,000个长度分别为20和40的序列作为生成模型的训练集S。

(**2)GAN设置:**对于判别器D,选择CNN作为特征提取器和二元分类器。文本的特征是一个1,720维向量。对于生成器G,采用LSTM作为MANAGER和WORKER的体系结构来捕获序列上下文信息。 MANAGER使用CNN提取的特征映射生成16维目标嵌入特征向量 《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

**(3)模型比较:**用MLE训练的LSTM,SeqGAN,RankGAN,LeakGan

**(4)评估指标:**生成数据实验采用负对数似然(NLL)指标。实际数据实验采用BLEU统计数据和图灵测试中的人类评分

  • 生成数据实验

(i)在预训练阶段,与其他模型相比,LeakGAN已经显示出可观察的性能优势,这表明所提出的分层体系结构本身带来了改进。

(ii)在对抗训练阶段,LeakGAN显示出更好的收敛速度,它探索的局部最小值明显优于先前的结果。结果证明信息泄露框架和分层RL架构在生成短文本和长文本方面的有效性。

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

  • 长文本生成:EMNLP2017 WMT新闻

选择EMNLP2017 WMT4数据集作为长文本语料库。新闻数据集有5,742个单词和397,726个句子。随机抽取200,000个句子作为训练集,10,000个句子作为测试集。使用BLEU-(2至5)分数作为评估指标。

 

在所有评价指标中,LeakGAN与基线模型相比显示出显著的性能增益。连续较高的BLEU分数表明LeakGAN生成的句子在局部特征中具有高质量以模仿真实文本。

  • 中等文本生成:COCO图像标题

选择COCO图像标题数据集作为中等文本语料库,该数据集包含许多图像描述对。

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

COCO数据集上的BLEU得分结果表明LeakGAN在中等长度文本生成任务中的表现明显优于基线模型。

  • 短文本的生成:中国诗歌

为了评估LeakGAN在短文本生成中的表现,选择了中国诗歌数据集。该数据集由4行5字的诗组成,使用BLEU-2分数作为评估指标。

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

结果表明,LeakGAN成功地处理了短文本生成任务。

  • 长文本生成的性能鲁棒性

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

EMNLP2017 WMT新闻数据的结果如图3所示。曲线表明,当生成的句子更长时,LeakGAN会在基线上产生更大的性能增益。这一事实支持了我们声称LeakGAN是长文本的强大框架。

未来工作

未来希望计划通过提供更多特定于任务的指导信息,将LeakGAN应用于更多自然语言处理应用程序中。 此外,提高判别器检查整个句子全局一致性的能力是一个有希望的方向。

 

 

 

 

代码解读:

转自:https://blog.csdn.net/qq_36616268/article/details/84800719

这篇文章是我看完RankGAN之后看的。这篇文章思想上是一个感觉还是有一定的前沿性。很新颖,至少之前没人这么想过。也把HRL和GAN结合在了一起。很Nice,这两天状态不好,看代码又花去了两天时间。

首先先说一下我看完代码之后的感觉吧:

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

第一点,leak主要体现在泄露了D对一个生成的句子提取的特征值(D也是根据这个特征值来得到最后的【fake,real】的)

第二点:因为使用了HRL的结构所以G就变成了manager和worker了(我对他这么处理的结构表示一丢丢的好奇)

第三点:rollout这个的MCsearch,我之前理解的有问题,我们可以先设置一个n,代表我们每一个G generate出来的data需要跑n大遍,也就是第一个循环,在这个循环里,我们再放开不同个数的given_num的数据(比如  我是谁?,我放开:我是,我是这两个词就用于训练G的 hidden state(manager和worker的hidden state),然后生成的gen_seq,把:我是  原封不动的读进去,然后在given_num到seq_length之间我们就需要预测了,逐个预测,然后填写到gen_seq中)。

第四点:对于leak泄露给manger的数据,我们首先需要D计算出当前的 text 的 feature,那么每次提前直到的text的长度可能不一致(比如:你是谁?,一开始我可能只直到你,或者你是),所以这里采用的处理方法是用一个常量补齐就好了。

第五点:内部奖励,我们说到HRL,就必须要有内部奖励:内部奖励是1 减去 当前的sub_feature,与goal的偏差的cos距离。

这里我们首先需要一个超参数step_size,也就是goal每隔多少个文本才更新一下。所以假设我们的每个文本输入都是seq_length这么长,step_size = 3 ,那么我们得出来的goal就是[g1,g1,g1,g2,g2,g2,g3,g3,g3......],而我们最后的到的特征状态为【feature(i)-feature(i-i%step_size)】得到的[sub_f1,subf2,subf3.....],这里的feature是根据D的特征提取器算出来的,也就是leak过来的特征向量。

第六点:我需要串一下思路,对于 manager来说,我们每次都用从D leak过来的特征来计算出当前的目标   对于worker来说,这里我们每次都用当前的状态 去拿到 D的特征提取器看,我们当前已经有的特征,然后goal其实也就是目标特征,当两个差距越大,我们得到奖励也就越小,说明我们距离目标越远。奖励也就越小,最后直接用选取的动作gen_x x  概率 x 奖励 当作loss即可

第七点:提出了基于排名的Bootstrapped Rescaled Activation来调整D反馈的大小,这个方法就相当于是一个值稳定器,当算法对数值大小很敏感的时候能够起到很大帮助;而且,作为排序方法,它也能避免梯度消失的问题,这加速了模型的收敛。(我从代码上没有看出他这一步是怎么做的,感觉有点神奇,也没有排序什么的,我向作者提交了issue,回复了以后,我回来更新)

《Long Text Generation via Adversarial Training with Leaked Information》阅读笔记

第八点:交替更新,这个就是在每次循环对抗更新的时候,再加上一个监督学习,起一个引导作用,但是代码中好像并没有体现出来。

下面是我做的代码笔记:

 

 

 

 

以上。

 
--------------------- 
作者:这梦想不休不止 
来源:CSDN 
原文:https://blog.csdn.net/qq_36616268/article/details/84800719 
版权声明:本文为博主原创文章,转载请附上博文链接!