李宏毅学习笔记38.GAN.09.Improving Sequence Generation by GAN

简介

公式输入请参考:在线Latex公式
本节讲如何用GAN递推(改进)Generator。本节内容大纲如下:
Conditional Sequence Generation
• RL (human feedback)
• GAN (discriminator feedback)
Unsupervised Conditional Sequence Generation
• Text Style Transfer
• Unsupervised Abstractive Summarization
• Unsupervised Translation

Conditional Sequence Generation

概念,只要是产生Sequence的task都是属于Conditional Sequence Generation的范畴。
如:语音识别,机器翻译、智能聊天机器人
在这里插入图片描述
Those generator is a typical seq2seq model.
With GAN, you can train seq2seq model in another way.
这节课就是要学习如何用GAN来改进这些seq2seq模型

原始seq2seq模型回顾

之前讲过的的seq2seq模型包含两个模块,分别是Encoder和Decoder,这里是一个Chatbot的例子,所以模型的Encoder吃一个句子,Decoder吐出来另外一个句子。
在这里插入图片描述
例如,我们有这么一组训练数据:

在这里插入图片描述
那么我们的模型目标就是要最大化输出句子和标签的likelihood。
在这里插入图片描述
但是这是一个seq模型,因此输出的句子不是一起出来的,第一个时间步我们希望输出【I’m】概率越大越好,第二个时间步我们希望输出【good】的概率越大越好。
这样就有问题,我们看一下下面的输出比较

输出的句子 Not bad I’m John
从人的角度看 这个好
从与标签的相似度看 这个好

这里补充一点,模型的目标是:Maximize likelihood,这个目标和Minimize crossentropy是一样的。
下面来看如何改进这个问题

RL (human feedback)

先看如何用强化学习来改进这个问题,实际上RL是seq2seq的一个特例(special case)
先来看如何用RL来训练一个Chat-bot:Machine obtains feedback from user.
在这里插入图片描述
上图表达的意思就是人说一句话,Chat-bot有一个回应,然后得到一个分数,Chat-bot的目标就是要把分数最大化。
Chat-bot learns to maximize the expected reward.
把这个事情模型化表达:
在这里插入图片描述
Chat-bot就是要调整内部Encoder和DEcoder的参数,使得Reward最大化,这个最大化的过程要用到的方法就是Policy Gradient。上面模型中,人可以看做是已经训练好的模型,亦可看做是Conditional GAN中的条件。

Policy Gradient

这块内容在ML的课程里面有讲,这里快速过一遍:
在这里插入图片描述
先假设参数 θ \theta 不变,则这个seq2seq模型得到的Reward的期望是:
R ˉ θ = h P ( h ) x R ( h , x ) P θ ( x h ) (1) \bar R_{\theta}=\sum_hP(h)\sum_xR(h,x)P_{\theta}(x|h)\tag1
h是输入, P ( h ) P(h) 是h出现的几率,把所有输入出现的几率求和: h P ( h ) \sum_hP(h)
P θ ( x h ) P_{\theta}(x|h) 是给定参数 θ \theta ,给定输入h后,Chat-bot输出x的机率(因为同一个输入,输出可能是不同的,输出的可能性是一个分布,我们从这个分布里面sample出x)。
R ( h , x ) R(h,x) 是Chat-bot输出x的时候人给出的reward,这里可以看做是一个权重。
接下来我们要调整参数 θ \theta ,使得Reward的期望越大越好:
θ = a r g max θ R ˉ θ \theta^*=arg\underset{\theta}{\text{max}}\bar R_{\theta}
要解这个,先把公式1进行变形,由于h是从分布 P ( h ) P(h) 来的可以写成 E h P ( h ) E_{h\sim P(h)} ,x是从分布 P θ ( x h ) P_{\theta}(x|h) 来的可以写成 E x P θ ( x h ) E_{x\sim P_{\theta}(x|h)} ,所以有:
R ˉ θ = E h P ( h ) [ E x P θ ( x h ) [ R ( h , x ) ] ] = E h P ( h ) , x P θ ( x h ) [ R ( h , x ) ] (2) \bar R_{\theta}=E_{h\sim P(h)}\left [E_{x\sim P_{\theta}(x|h)}[R(h,x)]\right]\\ =E_{h\sim P(h),x\sim P_{\theta}(x|h)}[R(h,x)]\tag2
这里要求期望E,理论上是要对所有样本进行求和,是无法完成的,因为我们没有办法穷举所有的可能样本。
实作上我们是做sample,输入h我们可以从数据库里面做sample,输出x我们可以把输入丢到模型算出来,这样我们就可以sample到N个样本:
( h 1 , x 1 ) , ( h 2 , x 2 ) , . . . , ( h N , x N ) (h^1,x^1),(h^2,x^2),...,(h^N,x^N)
那么公式2可以写为:
R ˉ θ 1 N i = 1 N R ( h i , x i ) \bar R_{\theta}\approx\cfrac{1}{N}\sum_{i=1}^NR(h^i,x^i)
发现算到最后, R ˉ θ \bar R_{\theta} 中并没有包含参数 θ \theta ,这样就没办法用梯度下降法进行求解,因此这里我们要在 R ˉ θ \bar R_{\theta} 的约等于之前先做微分才行,那个时候 θ \theta 还在。
下面给出数学的推导:

warning of math


对公式1左右同时求 θ \theta 的导数
R ˉ θ = h P ( h ) x R ( h , x ) P θ ( x h ) (1) \bar R_{\theta}=\sum_hP(h)\sum_xR(h,x)P_{\theta}(x|h)\tag1
R ˉ θ = h P ( h ) x R ( h , x ) P θ ( x h ) \triangledown\bar R_{\theta}=\sum_hP(h)\sum_xR(h,x)\triangledown P_{\theta}(x|h)
P θ ( x h ) \triangledown P_{\theta}(x|h) 分子分母同时乘以 P θ ( x h ) P_{\theta}(x|h)
R ˉ θ = h P ( h ) x R ( h , x ) P θ ( x h ) P θ ( x h ) P θ ( x h ) (3) \triangledown\bar R_{\theta}=\sum_hP(h)\sum_xR(h,x)P_{\theta}(x|h)\cfrac{\triangledown P_{\theta}(x|h)}{P_{\theta}(x|h)}\tag3


根据以下公式:
l o g ( x ) = d l o g ( x ) d x = 1 x \triangledown log(x)=\cfrac{dlog(x)}{dx}=\cfrac{1}{x}
有复合函数:
l o g ( f ( x ) ) = d l o g ( f ( x ) ) d x = 1 f ( x ) d f ( x ) d x = f ( x ) f ( x ) \triangledown log(f(x))=\cfrac{dlog\left(f(x)\right)}{dx}=\cfrac{1}{f(x)}\cfrac{df(x)}{dx}=\cfrac{\triangledown f(x)}{f(x)}
公式3中的:
P θ ( x h ) P θ ( x h ) = l o g P θ ( x h ) \cfrac{\triangledown P_{\theta}(x|h)}{P_{\theta}(x|h)}=\triangledown logP_{\theta}(x|h)


因此,公式3可以写为:
R ˉ θ = h P ( h ) x R ( h , x ) P θ ( x h ) l o g P θ ( x h ) = E h P ( h ) , x P θ ( x h ) [ R ( h , x ) l o g P θ ( x h ) ] 1 N i = 1 N R ( h i , x i ) l o g P θ ( x i h i ) \triangledown\bar R_{\theta}=\sum_hP(h)\sum_xR(h,x)P_{\theta}(x|h)\triangledown logP_{\theta}(x|h)\\ =E_{h\sim P(h),x\sim P_{\theta}(x|h)}[R(h,x)\triangledown logP_{\theta}(x|h)]\\ \approx\cfrac{1}{N}\sum_{i=1}^NR(h^i,x^i)\triangledown logP_{\theta}(x^i|h^i)
推导结束,如果没看懂。。。没关系,结论如下:

Policy Gradient Ascent

参数 θ \theta 更新的方法:
θ n e w θ o l d + η R ˉ θ o l d \theta^{new}\leftarrow\theta^{old}+\eta\triangledown\bar R_{\theta^{old}}
计算梯度的公式为:
R ˉ θ 1 N i = 1 N R ( h i , x i ) l o g P θ ( x i h i ) (4) \triangledown\bar R_{\theta}\approx\cfrac{1}{N}\sum_{i=1}^NR(h^i,x^i)\triangledown logP_{\theta}(x^i|h^i)\tag4
解释一下公式4:去sample N个 h i , x i h^i,x^i 出来,然后计算 R ( h i , x i ) R(h^i,x^i) ,最后乘上 l o g P θ ( x i h i ) \triangledown logP_{\theta}(x^i|h^i)
也就是说:
如果输入 h i h^i ,Chatbot回答 x i x^i ,人觉得这个回答不错,给出的Reward: R ( h i , x i ) R(h^i,x^i) 是正的(positive),那么就要更新参数 θ \theta ,使得 P θ ( x i h i ) P_{\theta}(x^i|h^i) 增加,也就是增加输入 h i h^i ,Chatbot回答 x i x^i 的几率;
反之:
如果输入 h i h^i ,Chatbot回答 x i x^i ,人觉得这个回答很烂错,给出的Reward: R ( h i , x i ) R(h^i,x^i) 是负的(negative),那么就要更新参数 θ \theta ,使得 P θ ( x i h i ) P_{\theta}(x^i|h^i) 减少,也就是减少输入 h i h^i ,Chatbot回答 x i x^i 的几率。

Policy Gradient Implemenation

在这里插入图片描述
上图显示了Policy Gradient实作过程:
第一步是左边的红框,先输入N个句子给Chatbot,得到N个回答(相当于采样),然后人对这N个问答进行评分
第二步是更新参数 θ \theta ,其中蓝色部分是计算 R ˉ θ t \triangledown\bar R_{\theta^t} 的公式
这里要注意,在更新完参数 θ \theta 后,需要重新回到第一步,重新做采样,重新做采样,重新做采样。
因为 R ˉ θ t \triangledown\bar R_{\theta^t} 是根据参数 θ \theta 计算出来的,如果 θ \theta 变化了,需要重新采样。这里是和普通的GD不一样的地方,普通GD不需要重新采样。因此Policy Gradient中更新参数这个步骤是非常难得的,每次的更新都是N次互动后的结果,挖坑:后面会有trick来改进这个步骤。

原始模型 vs RL模型

在这里插入图片描述
表格不好写公式,上图中的notation和之前有点不一样,这里的输入是用c表示,而前面用的h,这里说明一下。
原始模型中用的训练数据是用的标签数据 ( c , x ^ ) (c,\hat x)
比较二者的Gradient可以发现,二者非常相似,只不过RL模型每个Gradient多了一个 R ( c i , x i ) R(c^i,x^i) ,可以看过权重。
所以从全局来看,相当于原始模型中默认的权重都是1,而RL模型权重各不相同(权重是根据Chatbot回答好不好决定的) 。
Tip:
在实作的时候, l o g P θ ( x i h i ) logP_{\theta}(x^i|h^i) 是概率,总是正数,评分 R ( c i , x i ) R(c^i,x^i) 也是正数,这样训练是有问题,我们希望不好的回答是负反馈,是负数,因此可以对评分进行一个平移,使得分数有正有负。

GAN (discriminator feedback)

上面讲的RL太麻烦,理论上虽然可行,但是不可能每次更新参数都去互动N次,于是有人就想了一个办法,用机器来替代人做评分这个环节。
Using a pre-defined evaluation function to compute R(h,x)
在这里插入图片描述
但是这个evaluation function:R(h,x)不好定义,像上面的图片中,左边死循环就差,右边就好?标准是什么?难,所以引入GAN的思想来解决这个问题:用discriminator代替人来给出评分feedback。
模型框架如下:
在这里插入图片描述
上图中的Discriminator可以看做是人在给Reward,只不过这个Discriminator是不完美的人,它也需要调整参数,进行训练。

算法描述

Training data:
Pairs of conditional input c c
and response x x
• Initialize generator G (chatbot) and discriminator D
对于discriminator D
• In each iteration:


• Sample input c c and response x x from training set. 从训练数据中采样问答数据对(真实数据)
• Sample input c c' from training set, and generate response x ~ \tilde x by G ( c ) G(c′) .从训练数据采样输入 c c' ,并用Chatbot生成对应的回答 x ~ \tilde x (生成数据)
• Update D to increase D ( c , x ) D(c,x) and decrease D ( c , x ~ ) D(c',\tilde x) .更新Discriminator使得真实数据概率越大越好,生成数据的概率越小越好。


对于generator G
更新G使得生成器生成数据骗过Discriminator打分越高越好。
Update generator G (chatbot) such that
在这里插入图片描述
上图中Discriminator少了一个输入,应该还有一个真实的问答对数据。
整个过程和conditional GAN一样的。
但是这里的问题在于Generator是一个RNN的序列模型。
在这里插入图片描述
这里注意红圈内是通过sample出来的结果(蓝色虚线箭头)。然后把Generator得到结果丢到Discriminator里面得到一个scalar(分数),然后根据这个分数来更新Generator的参数,使得下一次的分数更高。
在这里插入图片描述
这个过程是没有办法实现的,因为没有办法做梯度下降:
Due to the sampling process, “discriminator+ generator” is not differentiable.
梯度下降里面要求导数,中间那个红框部分是采样,采样是有随机性的,是不可导的。从求导的本质来看,导数就是:求x变化后,y的变化程度。如果x变化了,y是随机采样出来的,那么就不能保证y的变化程度了。
这里和图像处理的GAN不一样的地方,文字处理生成句子的过程用了采样,无法求导,也就是无法梯度下降,无法反向传播,无法更新参数。
同样的使用TF或者PYTORCH来实现这个模型,会得到一个错误。
这个问题也是有解决方案的,一共三种:

Gumbel-softmax

不展开,思想就是使用一个trick使得不可求导的变成可以求导的。
[Matt J. Kusner, et al, arXiv, 2016] \text{[Matt J. Kusner, et al, arXiv, 2016]}

Continuous Input for Discriminator

[Sai Rajeswar, et al., arXiv, 2017] [Ofir Press, et al., ICML workshop, 2017] [Zhen Xu, et al., EMNLP, 2017][Alex Lamb, et al., NIPS, 2016][Yizhe Zhang, et al., ICML, 2017] \text{[Sai Rajeswar, et al., arXiv, 2017] [Ofir Press, et al., ICML workshop, 2017] [Zhen Xu, et al., EMNLP, 2017][Alex Lamb, et al., NIPS, 2016][Yizhe Zhang, et al., ICML, 2017]}
这个方法就是绕过不可求导的采样步骤,直接将采样前的分布作为Discriminator的输入,注意看下图中红色箭头。
在这里插入图片描述
但是将连续的分布表示作为Discriminator的输入是有问题的,因为对于真实数据中的句子,每个词都是用独热编码进行表示的;
在这里插入图片描述
而由Generator生成的,生成的中间部分的概率分布是连续表示的,不会也不可能是独热编码。
在这里插入图片描述
这样的明显的区别Discriminator不用很高智商就能分辨出来了(看是否独热编码),也就是说Generator永远没法骗过Discriminator。
当然可以用WGAN来试试,WGAN的Discriminator好比带上了毛玻璃眼镜,对于是否独热编码这里是分辨得不是很清楚,因此,有可能训练出Generator。

Reinforcement Learning

 [Yu, et al., AAAI, 2017][Li, et al., EMNLP, 2017][Tong Che, et al, arXiv, 2017][Jiaxian Guo, et al., AAAI, 2018][Kevin Lin, et al, NIPS, 2017][William Fedus, et al., ICLR, 2018] \text{ [Yu, et al., AAAI, 2017][Li, et al., EMNLP, 2017][Tong Che, et al, arXiv, 2017][Jiaxian Guo, et al., AAAI, 2018][Kevin Lin, et al, NIPS, 2017][William Fedus, et al., ICLR, 2018]}
在这里插入图片描述
将之前RL (human feedback)模型中的人替换为Discriminator,也就是:
• Consider the output of discriminator as reward
• Update generator to increase discriminator = to get maximum reward
• Using the formulation of policy gradient, replace reward R ( c , x ) R(c,x) with discriminator output D ( c , x ) D(c,x)
• Different from typical RL(human feedback)
• The discriminator would update
下面给出人和Discriminator做评分的算法上的区别,其实很简单,就是把 R ( c , x ) R(c,x) 替换为 D ( c , x ) D(c,x)
在这里插入图片描述
当然用Discriminator来进行评分还要额外对Discriminator进行训练,训练方式见上图d-step。

Reward for Every Generation Step

下面来具体看看RL中的Reward计算的trick,用Discriminator替换人评分后,评分计算梯度的公式就变成了(参考公式4,把R换成D):(这里输入把h又换成c了,老师的ppt和视频有点不统一,明白即可)
R ˉ θ 1 N i = 1 N D ( c i , x i ) l o g P θ ( x i c i ) (5) \triangledown\bar R_{\theta}\approx\cfrac{1}{N}\sum_{i=1}^ND(c^i,x^i)\triangledown logP_{\theta}(x^i|c^i)\tag5
假设输入 c i = “What is your name?” c^i=\text{“What is your name?”}
回答为: x i = “I don’t know” x^i=\text{“I don’t know”}
那么Discriminator会判断这个回答不好(negative),那么模型就会更新参数 θ \theta 使得回答出现概率 P θ ( x i c i ) P_{\theta}(x^i|c^i) 降低。
根据语言模型,这句话出现的概率为:
P θ ( x i c i ) = P ( x 1 i c i ) P ( x 2 i x 1 i , c i ) P ( x 3 i x 1 i , x 2 i , c i ) P_{\theta}(x^i|c^i)=P(x^i_1|c^i)\cdot P(x^i_2|x^i_1,c^i)\cdot P(x^i_3|x^i_1,x^i_2,c^i)
取对数后乘法变加法:
log P θ ( x i c i ) = log P ( x 1 i c i ) + log P ( x 2 i x 1 i , c i ) + log P ( x 3 i x 1 i , x 2 i , c i ) (6) \text{log}P_{\theta}(x^i|c^i)=\text{log}P(x^i_1|c^i)+ \text{log}P(x^i_2|x^i_1,c^i)+\text{log}P(x^i_3|x^i_1,x^i_2,c^i)\tag6
要降低 P θ ( x i c i ) P_{\theta}(x^i|c^i) ,就是降低 log P θ ( x i c i ) \text{log}P_{\theta}(x^i|c^i) ,就是降低右边三项,使得右边三项分别都降低。
如果我们看第一项:
P ( “I” c i ) (7) P(\text{“I”}|c^i)\tag7
第一个单词出现【I】这个没错呀,因为回答可能是【I am Hanmeimei】。
再看另外一个例子:
假设假设输入 c i = “What is your name?” c^i=\text{“What is your name?”}
回答为: x i = ““I am John” x^i=\text{““I am John”}
那么Discriminator会判断这个回答不错(positive),那么模型就会更新参数 θ \theta 使得回答出现概率 P θ ( x i c i ) P_{\theta}(x^i|c^i) 增加。
根据公式6,要增加 P θ ( x i c i ) P_{\theta}(x^i|c^i) ,就是增加 log P θ ( x i c i ) \text{log}P_{\theta}(x^i|c^i) ,就是增加右边三项,使得右边三项分别都增加。
通过以上两个小例子,我们看到,如果positive和negative样本对个数相当的话,那么公式7中的【I】出现的概率可能不变,但是如果negative样本比较多,那么【I】出现的概率会变小,不科学!
正确的做法是:
假设输入 c i = “What is your name?” c^i=\text{“What is your name?”}
回答为: x i = “I don’t know” x^i=\text{“I don’t know”}
那么Discriminator会判断这个回答不好(negative),那么模型就会更新参数 θ \theta 使得回答出现概率 P θ ( x i c i ) P_{\theta}(x^i|c^i) 降低。根据语言模型,这句话出现的概率为:
P θ ( x i c i ) = P ( “I” c i ) P ( “don’t” “I” , c i ) P ( “know” “I don’t” , c i ) P_{\theta}(x^i|c^i)=P(\text{“I”}|c^i)\cdot P(\text{“don't”}|\text{“I”},c^i)\cdot P(\text{“know”}|\text{“I don't”},c^i)
模型找出这个回答不好的是后面两项: P ( “don’t” “I” , c i ) P(\text{“don't”}|\text{“I”},c^i) P ( “know” “I don’t” , c i ) P(\text{“know”}|\text{“I don't”},c^i) ,概率要减少,第一项概率是要增加的。
要做到这个事情要把公式5进行改写为:
R ˉ θ 1 N i = 1 N t = 1 T ( Q ( c i , x 1 : t i ) b ) l o g P θ ( x t i c i , x 1 : t 1 i ) \triangledown\bar R_{\theta}\approx\cfrac{1}{N}\sum_{i=1}^N\sum_{t=1}^T(Q(c^i,x^i_{1:t})-b)\triangledown logP_{\theta}(x^i_t|c^i,x^i_{1:t-1})
不是对整个句子给分数了,而是给每个生成的step都要有分数,这里换了新的评价函数,所以取名叫Q。
这个评价函数还没有正规很好的解决方法,目前有两种方法解决:
Method 1. Monte Carlo(MC) Search [ Yu, et al, AAAl,2017]运算量大,类似alphaGo。
Method 2.Discriminator For Partially Decoded Sequences [ Li, et al., EMNLP2017]运算量小,效果不如法1。
当然还有另外一种解决方案,老师又挖坑,不展开,这里只贴图:
RankGAN
Kevin Lin, Dianqi Li, Xiaodong He, Zhengyou Zhang, Ming-Ting Sun, “Adversarial Ranking for Language Generation”, NIPS 2017
在这里插入图片描述
在这里插入图片描述

Experimental Results

Input We’ve got to look for another route.
MLE I’m sorry.
GAN N You’re not going to be here for a while.
Input You can save him by talking.
MLE I don’t know.
GAN You know what’s going on in there, you know what I mean?

通过实作后观察MLE模型的输出会发现,MLE模型通常(十分之一)都是倾向短句,且回答比较一般化,例如:我不知道。
• MLE frequently generates “I’m sorry”, “I don’t know”, etc.
(corresponding to fuzzy images?)
GAN会产生比较长的句子
• GAN generates longer and more complex responses
(however, no strong evidence shows that they are better)

Find more comparison in the survey papers.
[ L u , e t a l . , a r X i v , 2018 ] [ Z h u , e t a l . , a r X i v , 2018 ] [Lu, et al., arXiv, 2018][Zhu, et al., arXiv, 2018]

最后建议:If you are using seq2seq models, consider to improve them by GAN.

Unsupervised Conditional Sequence Generation

Text Style Transfer

可以回顾之前学习的图片的Unsupervised Conditional GAN
在这里插入图片描述
用在语音和文字上:
变声器
在这里插入图片描述
文本风格转换
在这里插入图片描述

Direct Transformation

这个是借鉴Cycle GAN的做法,我们先稍微回顾一下:用两个Generator,第二个(橙色的)Generator要把第一个Generator生成对象重新还原回原输入的照片。两个Generator接在一起,被称为:Cycle GAN。:
在这里插入图片描述
把图像换为文字就可以应用的文本处理上,具体模型如下图所示:
在这里插入图片描述
其中可以把Positive的语料可以看做一个domain,Negative的语料可以看做另外一个domain。
但是上面的模型Generator在生成语句的过程中也是用到了采样,因此也是不能求导和反向传播的,解决方案在上一小节已经说了有三种。这里用的是第二种,用Word Embedding来表示词,Word Embedding是Continuious的表示,这样就解决了求导和反向传播的问题,模型就变成:
在这里插入图片描述
下面是做的结果:
在这里插入图片描述
当然最后两句是失败的例子。

Projection to Common Space

这个方法前面也讲过,就是把两个domain的特征都抽取到同一个公共向量上。
在这里插入图片描述
把图片换成不同domain的文本,当然也可以用上面的模型,对于模型Decoder/Generator在生成语句的过程中也是用到了采样,不能反向传播,这里可以将Decoder的隐藏层作为Encoder的输入(下图红色箭头部分)。
在这里插入图片描述
当然对于把两个domain的文本投影到公共向量这个事情上,在图像上已经有很多很好的constraint trick来提升效果,在文本上这块研究做得还比较少,可以深入一下,目前对于这里的constraint只有一种,就是在公共变量上接一个Discriminator分类器,要分辨这个公共变量是由哪个Domain的Encoder得来的。而两个Domain的Encoder则是要骗过Discriminator。整个结构如下:
在这里插入图片描述

Unsupervised Abstractive Summarization

以前机器做摘要都是Extract方式的,就是判断文章中那些句子比较重要(可以用二分类来判断是否重要),然后拿出来拼在一起就完事。这样的摘要都是原文。
现在要用seq2seq模型来做这个事情:write summaries in its own words。思想如下图,就是给很多语料,并且带有这些语料对应的摘要,丢到seq2seq模型训练,这样的问题就是在于需要大量的标记数据,这个很难。。。根据老师的经验,要训练这样的seq2seq模型,至少要100w的数据才行。
在这里插入图片描述
为了解决数据收集困难的问题,提出一种新的无监督的方法(其实就是借鉴Unsupervised Conditional Generation)。把文章看做一个Domain,把摘要看做是另外一种Domain,这样一来,数据就只要两堆,一堆是文章,一堆是摘要,二者不需要对应。
在这里插入图片描述
模型构架如下图:
在这里插入图片描述
这里D是用来分辨G生成的摘要是否和人类相近,R则用来保证生成的摘要和原文相关。
补充:

  1. 具体实作的时候Unsupervised Learning的方法用的数据只需要supervised 的1/5左右就可以达到相同或者相近的效果
  2. 训练完Unsupervised 模型后,可以用一些带有标签的数据对模型进行fine-tune,效果可以进一步提升。

Unsupervised Translation

同样的,在翻译上,可以把两种语言看做是两个不同的Domain,然后进行训练,就可以得到一个翻译模型。
在这里插入图片描述
以上两篇都是非死不可发的论文。
下图是论文结果截图,横轴是数据量,纵轴是翻译效果。从图中可以看到,数据量越大,效果当然是越好,但是
Unsupervised learning with 10M sentences = Supervised learning with 100K sentence pairs
在这里插入图片描述

附加Unsupervised Speech Recognition

如果把语音和文字各自看成两个Domain,然后用Cycle GAN训练,这个是有可能实现的,注意看下面的图:
在这里插入图片描述
语音中的发音都是 p 1 p_1 ,然后再看文章都是单词【The】开头,所以模型可以推理:
在这里插入图片描述
当然效果没有比监督学习好,但是比没有强。。。
在这里插入图片描述
这里的语音和文字的语料都是不相干的:
Audio: TIMIT
Text: WMT

猜你喜欢

转载自blog.csdn.net/oldmao_2001/article/details/107529015
GAN
今日推荐