摘要:在调研多篇论文后,笔者发现预训练语音模型的预测方法基本可以分为以下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).

点击关注,第一时间了解华为云新鲜技术~

带你了解3类预训练语音模型预测方法相关推荐

  1. 王小川新公司开源 70 亿参数量的中英文预训练大模型,可商用;谷歌要求员工慎用 AI,即便是自己家的 Bard|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 王小川新公司开源 70 亿参数量的中英文预训练大模型,可商用;谷歌要求员工慎用 AI,即便是自己家的 Bard|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. 中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍

    (图片由AI科技大本营付费下载自视觉中国) 作者 | 徐亮(实在智能算法专家)  来源 | AINLP(ID:nlpjob) 谷歌ALBERT论文刚刚出炉一周,中文预训练ALBERT模型来了,感兴趣的 ...

  4. 紫东太初:自动化所开源图-文-音三模态的预训练大模型

    近日,中科院自动化所研发并开源了全球首个图文音(视觉-文本-语音)三模态预训练模型,兼具跨模态理解和生成能力,具有了在无监督情况下多任务联合学习.并快速迁移到不同领域数据的强大能力.自动化所构建了具有 ...

  5. 预训练生成模型:结合VAE与BERT/GPT-2提高文本生成效果

    论文标题: Optimus: Organizing Sentences via Pre-trained Modeling of a Latent Space 论文作者: Chunyuan Li, Xi ...

  6. TVM:在树莓派上部署预训练的模型

    TVM:在树莓派上部署预训练的模型 之前我们已经介绍如何通过Python接口(AutoTVM)来编译和优化模型.本文将介绍如何在远程(如本例中的树莓派)上部署预训练的模型. 在设备上构建 TVM Ru ...

  7. 全能型AI!用通用预训练感知模型处理多模态多任务!商汤西交港中文提出:Uni-Perceiver...

    关注公众号,发现CV技术之美 本文分享论文『Uni-Perceiver: Pre-training Unified Architecture for Generic Perception for Zer ...

  8. caffe使用预训练的模型进行finetune

    首先明确预训练好的模型和自己的网络结构是有差异的,预训练模型的参数如何跟自己的网络匹配的呢: 参考官网教程:http://caffe.berkeleyvision.org/gathered/examp ...

  9. NLP之PTM:自然语言处理领域—预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transfo→GPT系列/BERT系列等)、关系梳理、模型对比之详细攻略

    NLP之PTM:自然语言处理领域-预训练大模型时代的各种吊炸天大模型算法概述(Word2Vec→ELMO→Attention→Transformer→GPT系列/BERT系列等).关系梳理.模型对比之 ...

最新文章

  1. 汤家凤高等数学基础手写笔记-极限与连续
  2. 跟公务员稍稍的接触了下
  3. VI3的VLAN配置:VST、EST和VGT标记
  4. AspNetCoreApi 跨域处理(CORS )
  5. 可以买的一本书:3D计算机图形学(原书第3版)
  6. three.js 源代码凝视(七)Math/Euler.js
  7. 机器学习 Machine Learning中向量化矩阵化的技巧
  8. python 图像压缩pca_在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
  9. CLR via C# 3rd - 07 - Constants and Fields
  10. docker批量导出导入本地镜像
  11. python爬虫实现贴吧表情包的爬取
  12. 安装arcgis api for python步骤、以及注意事项
  13. (十九)论文阅读 | 目标检测之SNIP
  14. 班级网站java,ssm班级网站
  15. Windows脚本初探之VBScrip的MsgBox函数
  16. 10讲学会C语言之第一讲:编程前的准备
  17. 学计算机会学dos,DOS操作系统和上课学习的应用软件_CPUCPU评测-中关村在线
  18. 湿空气性质计算,随笔与学习记录(合订)
  19. Python数据可视化 Matplotlib详解(一) —— 折线图与时序数据绘制
  20. 软件公司创业阶段的8条建议

热门文章

  1. Docker 1.0对OpenStack意味着什么
  2. jqgrid columnChooser列的自定义及存储和获取
  3. JSON和JavaScript对象互转
  4. es6 原生构造函数的继承
  5. CAN笔记(3) 错误状态
  6. android 用年月日初始化date_Android 系统自带api选择年月日 日历
  7. 前端自动化工具gulp入门基础
  8. python+pyqt5实现24点小游戏
  9. 【Linux】awk指令
  10. 【2018/04/02】学习小记