带你了解3类预训练语音模型预测方法
摘要:在调研多篇论文后,笔者发现预训练语音模型的预测方法基本可以分为以下3类:<1>用前文预测当前及后文(自回归)<2> 随机mask 一些帧并预测 <3> 用两侧上下文预测中间帧。
本文分享自华为云社区《预训练语音模型调研小结》,作者: Hudson。
在调研多篇论文后,笔者发现预训练语音模型的预测方法基本可以分为以下3类:<1>用前文预测当前及后文(自回归)<2> 随机mask 一些帧并预测 <3> 用两侧上下文预测中间帧。下文会按照这三类来介绍预训练语音模型的方法。
1.用前文信息预测当前信息及后文信息
(1)CPC & Modified CPC
CPC(Contrastive Predictive Coding)[1] 是预训练语音模型中较早提出的模型。它的模型架构如下图所示。
首先,语音信号被分成段输入到CNN模型,用于抽取特征,CNN层的输出Z再作为GRU层的输入,拿到带有时序信息的输出C,然后用当前时刻t的带有时序信息的Ct(见过序列前面的信息),来预测后续k个时刻的CNN层输出Zt+k。Loss的是一个contrastive loss,它的公式如下图所示。
这个loss看起来复杂,其实原理很简单,就是想让基于Ct的预测值更接近 Zt+k (分子),而更远离其他的CNN层输出Z,即negative sample (分母)。最小化整体的loss,会使分子最大化,分母最小化。这就是CPC训练的原理。
Modified CPC [2] 是对CPC的一个改进。其改进主要分成以下两点:
<1> 由于batch normalization 会破坏sequence的信息,他们用channel wise normalization替代batch normalization。
<2> 对模型的一些改进,包括将从Ct预测Zt+k的网络由linear layer替换成一层transformer;将CNN层的维度从512变为256 (memory小了但performance不变); 用LSTM替换GRU。
(2)APC & VQ-APC
APC(Autoregressive Predictive Coding)[3] 以及它的改进,VQ-APC(Vector Quantization- Autoregressive Predictive Coding)[4] 也是一组基于自回归的预训练语音模型,它们的模型架构如下图所示。APC没有VQ-layer,而VQ-APC添加了一个VQ layer。
APC模型的输入是80维的log Mel spectrogram 特征,其模型也十分简单,就是一个3层的LSTM。训练的loss如下图所示。
这里我们可以看出,这就是一个简单的L1 loss,但其中不同的是,它并不是同一时刻的xi和yi之间做L1 loss,而是用xi+n和yi之间做L1 loss。也就是说,它希望能用第i时刻的信息去预测n个时刻后的信息,这么做的原因是希望LSTM 不陷入Local information,从而可以infer 更多的全局信息(global structure)。
VQ-APC是在APC的基础上加了一个VQ layer。VQ,向量量化,可以简单的理解为对无限种可能的连续向量的一个聚类,让语音的表征vector也变为有限种可能,类似于NLP中有限数量的单词表征(一个单词一个表征,单词数量有限)。实验结果标明,在APC模型的LSTM层中间加入VQ layer会是最终学到的向量表征更好,在下游任务(如 phone classification; speaker classification)中表现出更好的性能。
2. 随机mask一些帧并预测
(1)VQ-wav2vec & wav2vec2.0
前面介绍的4个模型都是基于自回归的思想,用前文预测后文信息,模型也是基于LSTM或者GRU模块来实现。随着transformer在越来越多的任务上被证实有更优越的性能,很多预训练语音模型的研究人员也把目光投入到了transformer模型上。VQ-wav2vec [5] 就是其中一个较早的尝试。下图是VQ-wav2vec模型架构图。
原始音频片段首先输入到CNN层提取特征,再做一个VQ,最后将VQ的output输入下一个CNN层再进行一次特征的抽象。最后用CNN层在第i个时刻的输出Ci来预测后面k个时刻VQ的输出Zi+k,并做一个contrastive loss,目的是让Ci能更好的预测Zi+k,而更远离negative sample(不是Zi+k的其他Z)。训练完毕后,将VQ层的输出作为后面BERT的输入,随机mask掉一些帧并预测,训练一个BERT模型,得到拥有时序信息的表征。最后将这个信息作为声学模型的输入,进行下游任务。
上面的模型是把BERT和VQ-wav2vec单独训练的,先训练VQ-wav2vec,再训练BERT模型。而wav2vec2.0 [6] 对VQ-wav2vec整体框架进行了改进,将VQ-wav2vec模型和BERT模型放在一起做一个jointly training,达到了非常好的效果(目前的state-of-the-art)。Wav2vec2.0的模型框架如下图所示。
首先,音频也是分段输入CNN层提取特征,然后一方面输入到VQ层,另一方面随机mask掉一些帧然后输入到Transformer层提取context representation C。训练的loss如下图所示。
Loss是两部分loss的叠加。第一部分loss是contrastive loss,目的就是让同一时刻的Context representation (Ct)与Quantized representation (Qt) 的similarity越大越好,Ct与其他时刻的Quantized representation的similarity越小越好。第二部分loss是diversity loss,这个loss是用于鼓励各个codeword(VQ操作后的离散的类别vector,类似于NLP中的词典中的一个词)被使用的概率相同。训练好模型后,context representation可以被用于做下游任务。
(2)Mockingjay & Audio Albert & TERA
除上述两个模型外,还有一个系列的模型(均来自台湾大学语音组)也是基于transformer模型,用随机mask掉一些帧并预测的方式做语音模型的预训练。第一个工作是Mockingjay [7],其模型框架如下图所示。首先,提取一些handcrafted feature(fMLLR, MFCC, FBank)并做random masking,然后经过下采样后,输入到transformer模型中,来预测mask掉的帧,并做L1 loss。
在Mockingjay模型的基础上,Audio Albert模型 [8] 进行了些许改进。下图是Audio Albert和Mockingjay模型的区别。可以看出,Audio Albert基于Mockingjay的改进,是把多层的transformer都共享参数。其他地方没有任何区别。通过这样的改进,效过和不共享参数接近(comparable),但是确可以显著的降低参数量。
还有一个基于Mockingjay改进的模型 —TERA (Transformer Encoder Representations from Alteration)[9],是在输入端上,对输入进行了一些alteration,从而达到提升预训练模型效果的作用。下图是TERA如何进行输入的alteration的示意图。Alteration主要分为3种,在时间维度上mask,在特征维度上mask,以及对于整个segment加一些高斯白噪声。
3. 用两侧上下文信息预测中间帧
除上述两种预训练方式外,还有一种预训练方式 – 用两侧的信息预测中间帧的信息,NPC(Non-Autoregressive Predictive Coding)[10] 模型就是用这种方式进行的预训练。下图为NPC的模型框架。
输入是MFCC (80dim),但NPC模型训练时,输入模型的并不是整个sequence,它只需要输入被mask掉的帧前后的一些帧(例如前后各10帧),而被mask掉的帧一般为3帧。Mask掉3帧而不是1帧,可以防止模型直接复制mask 点的相邻点(xt-1,xt+1)的值作为当前时刻输入xt的预测值,从而防止预测值yt并没有相对于xt的信息增益。被mask的input输入模型后,经过几层ConvBlock,每层ConvBlock也会mask中间的帧,且会层层递增,目的是防止输出yt见到任何mask size内的数据。经过几层ConvBlock后的数据会加到一起得到ht(当前时刻做VQ之前的hidden representation),ht再经过一个VQlayer和一个linear layer,最后预测中间帧xt,loss用L1 Loss。这个模型的效果比autoregressive的模型都要好,况且可以显著的减小模型的大小。
总结
预训练语音模型是现在语音界十分热门的一个科研方向。目前来看,基于transformer 的模型要好于早期基于LSTM或GRU的模型。若追求性能,那目前公认最好的预训练语音模型应该是wav2vec 2.0。但如果追求速度,那Audio ALBERT,以及NPC模型都是不错的选择,这两个模型能够在保证comparable的性能的情况下,减小模型的大小并提升模型的速度。相信不久的将来,随着深度学习技术的进一步发展,预训练语音模型无论在性能,还是在速度上,都会迎来新的提升。
Reference
[1] Oord, Aaron van den, Yazhe Li, and Oriol Vinyals. “Representation learning with contrastive predictive coding.” arXiv preprint arXiv:1807.03748 (2018).
[2] Riviere, Morgane, et al. “Unsupervised pretraining transfers well across languages.” ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020.
[3] Chung, Yu-An, et al. “An unsupervised autoregressive model for speech representation learning.” arXiv preprint arXiv:1904.03240 (2019).
[4] Chung, Yu-An, Hao Tang, and James Glass. “Vector-quantized autoregressive predictive coding.” arXiv preprint arXiv:2005.08392 (2020).
[5] Baevski, Alexei, Steffen Schneider, and Michael Auli. “vq-wav2vec: Self-supervised learning of discrete speech representations.” arXiv preprint arXiv:1910.05453 (2019).
[6] Baevski, Alexei, et al. “wav2vec 2.0: A framework for self-supervised learning of speech representations.” arXiv preprint arXiv:2006.11477 (2020).
[7] Liu, Andy T., et al. “Mockingjay: Unsupervised speech representation learning with deep bidirectional transformer encoders.” ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020.
[8] Chi, Po-Han, et al. “Audio albert: A lite bert for self-supervised learning of audio representation.” 2021 IEEE Spoken Language Technology Workshop (SLT). IEEE, 2021.
[9] Liu, Andy T., Shang-Wen Li, and Hung-yi Lee. “Tera: Self-supervised learning of transformer encoder representation for speech.” IEEE/ACM Transactions on Audio, Speech, and Language Processing 29 (2021): 2351-2366.
[10] Liu, Alexander H., Yu-An Chung, and James Glass. “Non-autoregressive predictive coding for learning speech representations from local dependencies.” arXiv preprint arXiv:2011.00406 (2020).

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
WebGL着色器渲染小游戏实战
项目起因 经过对 GLSL 的了解,以及 shadertoy 上各种项目的洗礼,现在开发简单交互图形应该不是一个怎么困难的问题了。下面开始来对一些已有业务逻辑的项目做GLSL渲染器替换开发。 起因是看到某些小游戏广告,感觉机制有趣,实现起来应该也不会很复杂,就尝试自己开发一个。 游戏十分简单,类似泡泡龙一样的从屏幕下方中间射出不同颜色大小的泡泡,泡泡上浮到顶部,相同颜色的泡泡可以合并成大一级的不同颜色泡泡。简单说就是一个上下反过来的合成大西瓜。 较特别的地方是为了表现泡泡的质感,在颜色相同的泡泡靠近时,会有水滴表面先合并的效果,这一部分就需要用到着色器渲染来实现了。 项目结构 先对逻辑分层 最上层为游戏业务逻辑Game,管理游戏开始、结束状态,响应用户输入,记录游戏分数等。 其次为游戏逻辑驱动层Engine,管理游戏元素,暴露可由用户控制的动作,引用渲染器控制游戏场景渲染更新。 再往下是物理引擎模块Physics,管理游戏元素之间的关系,以及实现Engine需要的接口。 与引擎模块并列的是渲染器模块Renderer,读取从Engine输入的游戏元素,渲染游戏场景。 这样分层的好处是,各...
- 下一篇
Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面
摘要:二进制SCA工具要想更好的辅助安全人员实现安全审计、降低漏洞检测的误报率,必须向更细颗粒度的检测维度发展,而不仅仅停留在开源软件的层面,同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战。 本文分享自华为云社区《Linux内核漏洞精准检测》,作者: 安全技术猿。 Linux内核结构: Linux内核由七个部分构成,每个不同的部分又有多个内核模块组成,结构框图如下: 图片引用来自ttps://blog.csdn.net/weixin_44742824/article/details/113814934 Linux裁剪场景分析: 通过分析Linux内核源代码可以看到不同目录中存放着不同模块的实现代码,同时在编译时可以config中配置的信息来控制哪些模块编译到最终的二进制中,哪些模块被裁剪掉,比如以IPV6模块为例,控制该模块的配置名称为CONFIG_IPV6,如果该配置项为设置为y,则表示该功能模块未被编译到最终的二进制文件中,如下所示: 如果该功能模块被裁剪了,即使该漏洞没有被补丁修复,那么该功能模块中存在的漏洞在二进制中也是不受影响的,因此和IPV6相关的漏洞在漏洞检测时就...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2更换Tomcat为Jetty,小型站点的福音