课程向:深度学习与人类语言处理 ——李宏毅,2020 (P24-2)

Unsupervised Tasks

李宏毅老师2020新课深度学习与人类语言处理课程主页:
http://speech.ee.ntu.edu.tw/~tlkagk/courses_DLHLP20.html
视频链接地址:
https://www.bilibili.com/video/BV1RE411g7rQ
图片均截自课程PPT、且已得到李宏毅老师的许可:)

考虑到部分英文术语的不易理解性,因此笔记尽可能在标题后加中文辅助理解,虽然这样看起来会乱一些但更好读者理解,以及文章内部较少使用英文术语或者即使用英文也会加中文注释,望见谅



前言

上半篇中(P24-1)我们讲解了 Text Style Transfer 文字风格转换,我们将类比语音、图像风格转换,进而实现文字风格转换,其实三者方法大同小异。以及在使用无监督学习方法做文字风格转换时会遇到的问题,解决方法等。

而在下半篇本篇P24-2中,我们将进入一些其他应用无监督的自然语言处理的模型与方法:无监督的 Summarization 摘要 、Translation 翻译 和 ASR 语音辨识。

I Unsupervised Abstractive Summarization 无监督生成式摘要

在这里插入图片描述

1.1 Text Style -> Summarization 风格的类比

在上半篇(P24-1)中,我们将积极的句子和消极的句子分别当做两种书写的风格,那其实我们也可以把长篇文章和对应短篇摘要也当作两种书写风格。如果我们可以把文章当作一种风格,摘要当作一种风格,其实我们就可以套用文本风格转换模型做到无监督的生成式摘要。

过去,我们在做生成式摘要时,多数是使用supervised 有监督学习方法,只要可以收集到一定数据量的文章和它对应的摘要就可以直接训练这样的模型做到摘要。但其实要产生这样的成对数据是非常耗费人力的。如果可以做到上述无监督的生成式摘要,那我们只需要各收集一堆文章和一堆摘要,而且它们不需要两两对应,仅仅是把文章和摘要当作风格

那具体怎么做呢?

1.2 Realization 实现

在这里插入图片描述

同样的想法,同样的文字风格转换的CycleGAN,把同样的技术搬过来硬train一发就可以了:
  首先,让Discriminator 裁判从收集到的真正的人写的摘要中学习,学会辨析一篇摘要是人写的,还是合成的。
  然后,由Generator G 生成器产生输入文章的伪摘要,将这份伪摘要交给Discriminator 裁判进行判断这份摘要是人写的还是合成的,而生成器 G的训练目标就是骗过Discriminator 裁判尽可能使其判断为人写的。
  除此之外,生成器 G还有一个训练目标就是产生的这份伪摘要再经过一个Reconstructor 还原器可以将其再还原回原本的文章,最小化两篇文章的差异。

在这里插入图片描述
在文献上,如上图,就有人实现了上述方法,这里使用的评测指标是ROUGE,简单来说,ROUGE就是比对人工摘要和生成摘要的区别,两者共用的词越多越好,确实,ROUGE只考虑字面上有没有共同的词汇。

上图中,表中第一行就是有监督方法,用300万篇以上的新闻和对应的摘要。其实在做摘要时,都会做一个Trivial的baseline,就是直接把文章中前几句话直接当作摘要使用,而且对于文献中所使用的数据是English Gigaword新闻类,前几句就是好的摘要了。如果文章和摘要都是来自一个数据集的无监督方法效果在第三行,当然这样有点作弊。来自同数据集的无监督方法效果在第四行。

II Unsupervised Translation 无监督翻译

==
上述讲的无论是有监督还是无监督都是同一语言下的任务,那能不能扩展到两种语言间的无监督翻译呢?把两种语言当作两种风格。

2.1 Mapping Embedding 词向量的配对

在这里插入图片描述

最早开始使用的方法是对于每一种语言,都可以训练得到那个语言的Word Embedding,想办法把所有语言的Word Embedding对在一起,让同样意思的词汇,它们的Word Embedding就相似。

如上图,我们可以根据不同语言训练出两组Embedding,如中英文,而这两组Embedding很有可能仅仅是差了一个映射关系,W,这个关系甚至可能是一种线性关系的转换,就如上图对英文Embedding做一下逆时针的旋转就得到对应中文的Embedding。

为什么会这样呢?因为Word Embedding本身就是提取词汇间的关系,那对于兔与鱼,rabbit与fish这样的词汇间关系即使是不同语言,但其实关系是一样的。

那怎么找到这个映射关系,W呢?比较简单的想法是superveised 有监督的方法。但这样还是不够好,有人就想到了,在不同语言中有这样一种东西,它们是通用的!提示:1就是1,2就是2。
  没错,就是阿拉伯数字,在不同语言中,是有这些天然的成对资料,通过这样成对的资料来训练一个有监督学习的模型。
但这样不够好,我们更希望,连数字都不用,一点标签都不需要的无监督学习方法来实现,如上图下侧的表中有各式各样的实现方法。简单来说,也是沿用GAN的思想,把W矩阵当作Generator G生成器,将embedding乘上这个W就变成了另一种语言的embedding。再训练一个 Discriminator 裁判来判断这种生成embedding是不是对应语言的。还有一种匪夷所思的方法,两堆embedding直接做PCA,然后就神奇地组合到一起了…

用上述这些方法可以实现词对词的翻译,但不太适合整句的翻译,因为没有考虑词序等。

2.2 Unsupervised Translation 句子级的无监督翻译

在这里插入图片描述
接下来,我们将进入真正的句子对句子的无监督翻译,有这样一种方法:
  假设我们想把句子A翻译成句子B,但是我们只有一堆A的资料和一堆B的资料,但没有AB对应的资料。
  首先,我们先单独训练每种语言的Encoder和Decoder,但在训练的时候会加一些干扰,如把一些词汇删掉、替换等等(类似BART技术中讲过各式各样的干扰),让我们的Auto-Encoder没有那么容易去还原原来的句子。
  接下来,将A的Encoder和B的Decoder组合在一起,输入A希望输出B的翻译结果。

但事实上,并没这么容易,因为两个Encoder都是单独训练的,是没有多大可能两种Encoder的编码方式都是相似的。Decoder B看得懂Encoder B的embedding词向量,但不一定看得懂Encoder A的embedding。
在这里插入图片描述

  此时,就有各式各样的技巧来解决上述问题。可以加一个Discriminator 裁判,它可以判断一个embedding词向量是来自Encoder A 还是 Encoder B的。Encoder A的训练目标也就是除了使Decoder A还原A句,还有想办法让Discriminator 裁判 判断不出两种embedding的差别。

在这里插入图片描述
  另外,光有Discriminator 裁判还是不够的,还需要这样一个过程。把A句经过Encoder A + Decoder B 得到 B’句,再把这个 B‘句经过Encoder B + Decoder A 得到 A’句,希望模型可以最小化A和A‘的区别,过程可见上图的红色箭头。

但是,这个技巧还是不够,有这样的一个漏洞,比如A句是”How are you?“ 经过 Encoder A + Decoder B 得到”再见“。此时,模型只需要再学会把”再见“经过 Encoder B + Decoder A 得到”How are you?“就结束了,因为没有标签,即使模型第一次翻译就错了,只要第二次能把错误的翻译回来就好了。
在这里插入图片描述
  因此,还需要另外一个效果并不好的无监督翻译模型,将这个无监督模型替换掉Encoder A 和 Decoder B。虽然这个无监督模型效果并不好,但是还会一些接近的,比如把A句的”How are you?“翻译成”好吗你“,但此时,对于Encoder B 和 Decoder A来说,它们就要学会把”好吗你“翻译成”How are you?“。此时,要记得我们在训练Encoder时本来就会给模型一些干扰,把原句中的词汇替换、删除等,而这个效果不好的无监督模型就是类似的一种干扰。

那这个效果不太好的无监督模型从哪里来提示:完全不需要1就是1,2就是2:
  没错,这个无监督模型就是我们 2.1 训练得到的词对词的无监督翻译模型得到的

在这里插入图片描述
那上述的实验效果如何,请参见上图,这类无监督翻译方法效果还是很惊人的,无监督10M抵得上有监督100K成对训练资料。

上述这个团队也在持续优化模型,提升效果,19年的另一篇使用BERT来预训练Encoder后,效果又提升了很多。

III Unsupervised ASR 无监督的语音辨识

  上述讲的都是文字类的无监督学习,那可不可以类比到语音上无监督呢?一般在做语音辨识的时候我们都需要成对的训练资料。那用这种风格转换的方法,能不能给机器一堆声音、一堆文字,使其学会把声音转成文字的无监督语音辨识呢?

注:不了解语音辨识的读者,可以先参考阅读系列笔记P2&3,简单来说,下面常提到的Acoustic Feature就是一种语音Embedding,它可以代表一段时间内的语音讯号,我们在做语音有关任务时都是以这个声学向量作为基本输入单位的。将phoneme 音素理解为读文字时的发音的基本单位即可
在这里插入图片描述
那怎么做到无监督的语音辨识呢?其实套路和CycleGAN是一样的。有一堆文字,一堆声音。我们希望我们的Generator G(其实就是ASR)吃一段声音讯号,输出语音辨识的结果。接下来,我们训练一个Discriminator,它会看这个输出的结果像不像是人写的文字。
  在老师最开始的研究中,保守起见,ASR并没有使用seq2seq、CTC等模型,而是用了一个Acoustic Token Discovery 方法,就是把语音讯号转成一个个token组成的序列。

3.1 Acoustic Token Discovery 语音转Token的Generator

在这里插入图片描述
Acoustic Token Discovery 方法在语音领域已经发展了10几年,细节就不讲了,总之,它可以找出声音讯号中常出现的pattern模式,并进行编码作为token。但因为我们也只是收集到一堆声音,并不知道对应的文字,因此并不知道每一个token会对应哪一个phoneme 音素。

在这里插入图片描述
总之,通过Acoustic Token Discovery之后,我们可以将声音讯号转成一串Token 序列,那这样,这不就是一种无监督翻译问题了吗!由一堆token 翻译到 一堆文字。最后,甚至做的更简单一点,不训练无监督翻译模型,直接训练一个token 音素 对照表,可以把token转成音素。接下来就和CycleGAN一样,需要一个Discriminator判断这串音素像不像是文字对应的音素序列。
  实验效果还可以吧…错误率76%,有监督的RNN Transducer 17.7%。但其实这也表现了机器其实是有学到东西的,不是随机转换的。所以老师就有了信心,继续做了下去:)。

3.2 DNN + GAS 通过GAS分组加DNN的Generator

在这里插入图片描述
  下一个版本的Generator,如上图, 把语音的Acoustic Feature 每一个都输入给DNN中,输出phoneme 音素。但我们没有用任何有标签的资料,所以一开始DNN并不知道每一个Acoustic Feature 应该对应哪个phoneme 音素,这个DNN是要通过CycleGAN里面的Discriminator训练得到的。
但这并不是语音辨识的结果,因为在真正的语音辨识里面是好几个Acoustic Feature才能对应到一个phoneme。首先,我们是有一套找出phoneme和phoneme间界限的技术GAS。我们也就知道了哪些Acoustic Feature对应同一个phoneme,所以接下来就从同一组的结果中随机采样一个结果出来,作为最终的phoneme输出。

  此时,你一定也有这样的问题,为什么要设计这么多奇怪的Generator,而不直接使用一个更常用的seq2seq模型,输入Acoustic Feature,输出phoneme就好了呢?
答案:老师有这样试,但结果很烂。
  以及,为什么只用DNN不用RNN呢?
答案:实验发现,只要Generator里有RNN,结果就会烂掉。因为Generator G的目的是产生的phoneme序列要骗过Discriminator,如果使用RNN,G生成器很有可能完全无视输入直接自顾自地产生好的phoneme序列来骗过Discriminator。

总而言之,对于这些无监督语音辨识模型来说,都需要一定的训练技巧和模型限制才能得到比较好的结果。

实验结果表明,用DNN之后的Generator,可以将错误率由76%降到48.6%。以及phoneme间界限的技术对实验效果还是有很大的影响的,反复迭代更新界限的技术可以显著降低错误率。

3.3 Semi-supervised 半监督语音辨识

在这里插入图片描述
其实,我们也可以考虑一些半监督的语音辨识,在有一些有标注语音和文字数据后,可以对Generator输出的结果与真实的结果进行优化差异来提高模型的效果,如上图。

3.4 Feature Disentangle 特征分离的方法

在这里插入图片描述
在讲语音转换的时候(P10P11),我们除了有上述的CycleGAN的方法还有Feature Disentangle 这个系列的特征分离的方法。参考文献请见上图。

猜你喜欢

转载自blog.csdn.net/qq_44574333/article/details/108414946
今日推荐