扩展:GAN在自然语言处理中的应用以及论文

“深度解读:GAN模型及其在2016年度的进展”[1]一文对过去一年GAN的进展做了详细介绍,十分推荐学习GAN的新手们读读。这篇文章主要介绍GAN在NLP里的应用(可以算是论文解读或者论文笔记),并未涉及GAN的基本知识 (没有GAN基础知识的小伙伴推荐先看[1],由于本人比较懒,就不在这里赘述GAN的基本知识了J)。由于很长时间没有写中文文章了,请各位对文章中不准确的地方多多包涵、指教。

虽然GAN在图像生成上取得了很好的成绩,GAN并没有在自然语言处理(NLP)任务中取得让人惊喜的成果。 其原因大概可以总结为如下几点:

原始GAN主要应用实数空间(连续型数据)上,在生成离散数据(texts)这个问题上并不work。GAN 理论的提出者Ian Goodfellow 博士这样回答来这个问题问题:“GANs 目前并没有应用到自然语言处理(NLP)中,最初的 GANs 仅仅定义在实数领域,GANs 通过训练出的生成器来产生合成数据,然后在合成数据上运行判别器,判别器的输出梯度将会告诉你,如何通过略微改变合成数据而使其更加现实。一般来说只有在数据连续的情况下,你才可以略微改变合成的数据,而如果数据是离散的,则不能简单的通过改变合成数据。例如,如果你输出了一张图片,其像素值是1.0,那么接下来你可以将这个值改为1.0001。如果输出了一个单词“penguin”,那么接下来就不能将其改变为“penguin + .001”,因为没有“penguin +.001”这个单词。 因为所有的自然语言处理(NLP)的基础都是离散值,如“单词”、“字母”或者“音节”, NLP 中应用 GANs是非常困难的。一般而言,采用增强学习算法。目前据我所知,还没有人真正的开始研究利用增强算法解决 NLP 问题。”

在生成text时,GAN对整个文本序列进行建模打分。对于部分(partially)生成的序列,十分难判断其在之后生成整个 (fully) 序列时的分数。

另一个潜在的挑战涉及RNN的性质(生成文本大多采用RNN模型)。假设我们试图从latent codes生成文本,error就会随着句子的长度成指数级的累积。最开始的几个词可能是相对合理的,但是句子质量会随着句子长度的增加而不断变差。另外,句子的长度是从随机的latent representation生成的,所以句子长度也是难以控制。

下面我将主要介绍和分析最近阅读过的将GAN应用于NLP中的一些论文:

1. Generating Text via Adversarial Training

论文链接:http://people.duke.edu/~yz196/pdf/textgan.pdf

这是2016年的 NIPS GAN Workshop 上的一篇论文, 尝试将 GAN 理论应用到了文本生成任务上。 文中的方法比较简单,具体可以总结为:

以递归神经网络(LSTM)作为GAN的生成器(generator)。其中,用光滑近似(smooth approximation)的思路来逼近 LSTM 的输出。结构图如下:

本文的目标函数和原始GAN有所不同,文中采用了feature matching的方法 。迭代优化过程包含以下两个步骤:

其中式 (6) 为标准GAN的优化函数,式 (7) 为feature matching的优化函数。

本文的初始化非常有意思,特别是在判别器的预训练方面,利用原始的句子和该句子中交换两个词的位置后得到的新句子进行判别训练。(在初始化的过程中,运用逐点分类损失函数对判别器进行优化)。这非常有意思,因为将两个单词互换位置,输入的数据信息实际上是基本相同的。比如,大多数卷积计算最终会得出完全相同的值。

本文生成器的更新频率是判别器的更新频率的5倍,这与原始GAN的设定恰好相反。这是因为LSTM比CNN的参数更多,更难训练。

然而,本文生成模型 (LSTM) decode阶段有exposure bias问题,即在训练过程中逐渐用预测输出替代实际输出作为下一个词的输入。

2. SeqGAN: Sequence Generative Adversarial Nets with Policy Gradient

论文链接:https://arxiv.org/pdf/1609.05473.pdf

论文源码:LantaoYu/SeqGAN

文本将误差作为一种增强学习的奖励,以一种前馈的方式训练,用增强的学习的探索模式去更新G网络。

主要内容:这篇论文将序列生成过程当作一个sequential decision making过程。如下图:

(a) 其中左图为GAN网络训练的步骤1,判别器D主要用来区分真实样本和伪造样本,这里的判别器D是用CNN来实现的。

(b) 右图为GAN网络训练的步骤2, 根据判别器D回传的判别概率回传给生成器G,通过增强学习的方法来更新生成器G,这里的的生成器G是用LSTM来实现的.

(c) 因为G网络的更新策略是增强学习,增强学习的四个要素state, action, policy, reward分别为:state 为现在已经生成的tokens (当前timestep之前LSTM decoder的结果), action是下一个即将生成的token (当前解码词), policy为GAN的生成器G网络,reward为GAN的判别器D网络所生成的判别概率。其中,reward采用以下方法来近似:

本过程特点:即当解码到t时,即对后面T-t个timestep采用蒙特卡洛搜索搜索出N条路径,将这N条路径分别和已经decode的结果组成N条完整输出,然后将D网络对应奖励的平均值作为reward. 因为当t=T时无法再向后探索路径,所以直接以完整decode结果的奖励作为reward。

(d) 对于RL部分,本文采用了policy gradient方法。 根据policy gradient理论,生成器G的目标函数可以表示如下:

求导结果为: (详细推导过程请看原论文附页)

(e) 每隔一段时间,当生成更多的更逼真的句子后,重新训判别器D,其中判别器的目标函数表示如下:

算法结构图可以表示为如下:

实验

实验部分主要分为合成数据实验和现实数据实验。

(a) 合成数据实验: 随机初始一个LSTM生成器A,随机生成一部分训练数据,来训练各种生成模型.

评判标准为:负对数似然(交叉熵) NLL. 详细实验设置可以参看原论文。

(b) 现实数据实验:主要展示中文诗句生成,奥巴马演讲生成,音乐生成的结果。实验数据分别为中文诗歌数据集 (16,394首绝句),奥巴马演讲数据集 (11,092 段落), Nottingham音乐数据集 (695首歌)。评测方法为BLEU score, 实验结果如下:

文中并未展示模型生成的诗歌等, 具体效果如何?

3. Adversarial Learning for Neural Dialogue Generation

论文链接:https://arxiv.org/pdf/1701.06547.pdf

论文源码:jiweil/Neural-Dialogue-Generation

这篇论文是2017年1月26号上传到arxiv上的,属于最新的GAN用于NLP的论文。文中主要用对抗性训练 (adversarial training) 方法来进行开放式对话生成 (open-domain dialogue generation)。文中把这项任务作为强化学习(RL)问题,联合训练生成器和判别器。和SeqGAN一样,本文也是使用判别器D的结果作为RL的reward部分,这个reward用来奖励生成器G,推动生成器G产生的对话类似人类对话。

总体来说,本文的思路和SeqGAN是大体一样的,但是有几处不同和改进的地方:

(a) 因为本文是用于开放式对话生成,所以文中的生成器采用seq2seq模型 (而非普通的LSTM模型)。 判别器则采用了hierarchical encoder (而非CNN)。

(b) 采取了两种方法为完全生成或者部分生成的序列计算reward。除了 Monte Carlo search (与SeqGAN相似) 方法,本文新提出了一个能对部分生成的序列进行reward计算的方法。使用所有完全 (fully) 和部分 (partially) 解码的序列来训练判别器会造成overfitting。早期产生的部分(partially)序列会出现在许多的训练数据中,比如生成的第一个token y_1将会出现在所有的部分生成 (partially generated) 的序列里。所以本文提出仅仅分别从正(positive)序列 y+ 和负(negative)序列y-的每个子序列中随机地选取一个 sample来训练判别器D。这个方法比Monte Carlo search更快速,但是也会使得判别器更弱,更不准确。

(c) 在SeqGAN中,生成器只能间接的通过判别器生成的reward来奖励或者惩罚自己所产生的序列。而不能直接从 gold-standard序列中直接获取信息。 这种训练方式是脆弱的,一旦生成器在某个训练batch中变坏,判别器将会很容易对生成的句子进行判断 (比如reward为0 ),此时生成器就会迷失。生成器只知道现在生成的句子是坏的,但是并不知道如何调整才能使得生成的句子变好。为了解决这个问题,在生成器的更新过程中,本文输入了human-generated responses。对于这些human-generated responses, 判别器可以将其reward设置为1。这样生成器可以在上述情况下仍能生成好的responses。

(d) 训练过程中,有些针对dialogue system的设置(trick)。这部分内容,读者可以参考Jiwei Li之前的关于dialogue system的论文。

部分实验结果:

值得思考的地方:文中只尝试用判别器的结果作为reward, 结合 原文作者之前在dialogue system文中提出的其他reward机制(e.g., mutual information)会不会提高效果?

4. GANs for sequence of discrete elements with the Gumbel-softmax distribution

论文链接:https://arxiv.org/pdf/1611.04051.pdf

相比前面两篇论文,本文在处理离散数据这个问题上则比较简单暴力。离散数据 (用one-hot方法表示)一般可以从多项式采样取得,例如由softmax函数的输出p = softmax(h)。 根据之前的概率分布,以p的概率进行采样y的过程等价于:y=one_hot(argmax_i(h_i+g_i)) , 其中g_i是服从Gumbel distribution (with zero location and unit scale)。然而one_hot(argmax(.)) 是不可微分的。与原始GAN不同,作者提出了一种方法来近似上面的式子: y = softmax(1/ r (h + g))。这个公式是可以微分的。算法结构如下:

本文的实验部分做得比较粗糙,只展示了生成得context-free grammar, 并未在生成其他文本数据上做实验。

总的来说,这篇论文本身方法还值得改进,也可以值得借鉴下。

5. Connecting generative adversarial network and actor-critic methods

论文链接:https://arxiv.org/pdf/1610.01945.pdf

Actor-critic methods [2]: 许多RL方法 (e.g., policy gradient) 只作用于policy 或者 value function。Actor-critic方法则结合了policy-only和value function-only 的方法。 其中critic用来近似或者估计value function,actor 被称为policy structure, 主要用来选择action。Actor-critic是一个on-policy的学习过程。Critic模型的结果用来帮助提高actor policy的性能。

GAN和actor-critic具有许多相似之处。Actor-critic模型中的actor功能类似于GAN中的generator, 他们都是用来take an action or generate a sample。Actor-critic模型中的critic则类似于GAN中的discriminator, 主要用来评估 actor or generator 的输出。具体的相同和不同点,感兴趣的朋友可以仔细阅读原文。

这篇论文主要贡献在于从不同的角度来说明了GAN和actor-critic模型的相同与不同点,从而鼓励研究GAN的学者和研究actor-critic模型的学者合作研发出通用、稳定、可扩展的算法,或者从各自的研究中获取灵感。

最近Bahdanau等大神提出了用actor-critic模型来进行sequence prediction [3]。虽然[3]中并没有用到GAN,或许对各位能有启发。 用类似的思想,GAN在sequence prediction上也许也能取得的比较好的效果?

[1] 深度解读:GAN模型及其在2016年度的进展

[2] Actor-Critic Algorithms

[3] An actor-critic algorithm for sequence prediction

作者

杨敏,香港大学计算机系博士, 从事自然语言和机器学习的研究,最近也在关注和从事non-goal-oriented dialogue system以及goal-oriented question answering的研究, please feel free to contact me if you have similar interests.


原文参考:http://www.dataguru.cn/article-10584-1.html?utm_source=tuicool&utm_medium=referral

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容