自监督预训练(二) 语音部分

一、Predictive Coding系列

CPC[4][8]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jO8l1Mpl-1618622100070)(./1609662150808.png)]

Contrastive Predictive Coding包含三部分:

  1. 编码网络
    多层CNN,将输入wave进行降采样,映射为隐层表示 z t = g e n c ( x t ) z_t=g_{enc}(x_t) zt=genc(xt)
  2. 自回归网络
    多层GRU,从隐层表示提取context信息, c t = g a r ( z ≤ t ) c_t=g_{ar}(z_{\le t}) ct=gar(zt)
  3. 打分函数
    f k ( x t + k , c t ) = e x p ( z t + k T W k c t ) f_k(x_{t+k},c_t)=exp(z_{t+k}^TW_kc_t) fk(xt+k,ct)=exp(zt+kTWkct)

训练使用Noise-Contrastive Estimation(NCE)的损失函数,给定 N N N个随机样本 X = x 1 , . . . x N X={x_1,...x_N} X=x1,...xN,里面包含一个正样本 p ( x t + k ∣ c t ) p(x_{t+k}|c_t) p(xt+kct) N − 1 N-1 N1个负样本,优化的目标函数是:
L = l o g f k ( x t + k , c t ) ∑ x j ∈ X f k ( x j , c t ) L=log\frac{f_k(x_{t+k},c_t)}{\sum_{x_j\in X}f_k(x_j,c_t)} L=logxjXfk(xj,ct)fk(xt+k,ct)

APC[5][7]

Autoregressive Predictive Coding主要用于无监督的语音表示学习,基本的思路是先进行无监督预训练,然后使用预训练的网络抽取特征用于下游任务。

APC的输入为语音特征,网络部分使用RNN和regression layer,训练的loss是通过历史 ( t 1 , t 2 , . . . , t k − 1 ) (t_1,t_2,...,t_{k-1}) (t1,t2,...,tk1)来预测未来 t k + n t_{k+n} tk+n(这里预测第n帧特征的设计,是为了让模型可以学到更全局的结构信息):
∑ i = 1 T − n ∣ x i + n − y i ∣ \sum_{i=1}^{T-n}|{x_{i+n}-y_i}| i=1Tnxi+nyi
文章在音素识别和说话人识别两个下游任务对比了APC和CPC的效果:

  1. 两个任务上面,APC优于CPC
  2. 最优n跟不同的任务以及RNN的层数有关,一般3-5
  3. 说话人任务使用底层RNN的输出作为特征更好,音素识别使用高层RNN的输出作为特征更好

MPC[6]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2xpNiMBU-1618622100072)(./1609664736395.png)]

Masked Predictive Coding的loss借鉴的BERT的Masked LM,网络使用transformer。

总结

前面CPC和APC类似于NLP领域的GPT模型,网络使用单向RNN,即使用截止到当前的所有输入来预测未来,MPC类似于NLP领域的BERT模型,网络使用transformer,使用全部的输入来预测某一段mask。

二、wav2vec系列

wav2vec系列的预训练方法是facebook AI Research团队的工作

wav2vec[9]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6kEVJSUb-1618622100074)(./1609667636945.png)]

wav2vec基本思路类似于CPC,使用预训练网络提取特征,用于下游的语音识别任务。
框架中的两个encoder和context两个网络都是使用的多层CNN,训练loss采用contrastive loss。

vq-wav2vec[10]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kDBbRr8h-1618622100075)(./1609670059991.png)]

vq-wav2vec在wav2vec的基础上做了进一步的改进,增加quantization模块,包括gumbel-softmax和K-means clustering两种量化方法。这样可以将输入进行离散化,这一步的目的是方便利用transformer的mask loss。整体训练流程包括三步:

  1. 训练vq-wav2vec
  2. 基于vq-wav2vec离散化的输出进一步进行BERT的预训练
  3. BERT预训练模型当做特征提取器,提取的特征当做AM的输入

所以本质上还是feature-based的预训练方法。

[11]进一步验证使用量化模块会带来明显的提升,说明了BERT的预训练非常依赖量化的步骤。fbank<量化的fbank<vq-wav2vec.

wav2vec2.0[12]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sKJRwF49-1618622100076)(./1609671851730.png)]

将vq-wav2vec的训练流程进一步改进和优化,整体训练流程如下:

  1. 训练wav2vec2.0,其中context部分直接使用transformer替换原来的cnn,相当于将vq-wav2vec的前两步合并为一步
  2. 训练好的wav2vec2.0网络,直接finetune应用到下游任务

所以本质上是finetune-based的预训练方法

wav2vec2.0的应用

多语种任务[1]
  1. 在西班牙语的测试集上面,100小时以上西班牙语语料预训练的模型要好于1350小时的英文预训练的模型,同时好于混合数据预训练(包含100小时西班牙语料)的模型
  2. 对于中文数据集合上面,50小时中文预训练的模型要差于1350小时的英文预训练模型,1350小时的英文预训练模型差于1350小时混合数据预训练模型

对于小数据量(小于100小时)的任务,1350混合数据>1350英文预训练>>对应语种的预训练

对于大数据量(几百小时)的任务,对应语种的预训练>>1350混合数据>1350英语数据

对于小数据量(小于100小时)的unseen语种任务,混合数据(不包含该语种)>对应语种的预训练

与self-training的融合[2]

结合思路:

  1. unlabel数据训练wav2vec
  2. 使用少量的label数据finetune第一步的模型
  3. 使用第二步的模型对unlabel数据进行标注得到
  4. 使用少量的label数据和第三步的数据,一起来finetune第一步的模型或者从头开始训练一个seq2seq的模型

从结果来看:

  1. 标注数据量小的时候(小于100小时),第四步的模型优于第一步的模型,说明pretraining进一步结合self-training,可以取得进一步的收益
  2. 标书数据量大的时候(大于100小时),第四步的模型跟第一步的模型基本相当;但是当使用更大数据的wav2vec模型,第四步的模型还是优于第一步的模型

所以这种算法思路想要work,需要满足一个条件,即unlabel数据远远大于label的数据。

与noise student training的融合[3]

结合思路是:

  1. unlabel数据训练wav2vec,M0
  2. 使用label数据对M0进行finetune得到M
  3. 使用M结合语言模型对unlabel数据进行标注
  4. 将第二步的数据和label进行混合,对M0进行finetune,得到新的模型
  5. 重复上面的过程

文章有几个结论:

  1. 输入使用fbank替换原来的wave,fbank后面跟两层2维CNN来降采样,步长为(2,2),当输入的句子长度越长时,降采样越大效果越好
  2. 使用conformer的网络结构要优于wav2vec的原始transformer网络
  3. 如果没有pretrain,增大网络效果反而变差;有了pretrain,网络越大效果越好
  4. pretrain基础上结合NST训练,会有进一步的提升

参考文献

[1].Unsupervised Cross-lingual Representation Learning for Speech Recognition

[2].Self-training and Pre-training are Complementary for Speech Recognition

[3].Pushing the Limits of Semi-Supervised Learning for Automatic Speech Recognition

[4].Representation Learning with Contrastive Predictive Coding

[5].An Unsupervised Autoregressive Model for Speech Representation Learning

[6].IMPROVING TRANSFORMER-BASED SPEECH RECOGNITION USING UNSUPERVISED PRE-TRAINING

[7].https://github.com/iamyuanchung/Autoregressive-Predictive-Coding

[8].https://github.com/jefflai108/Contrastive-Predictive-Coding-PyTorch.git

[9].WAV2VEC: UNSUPERVISED PRE-TRAINING FOR SPEECH RECOGNITION

[10].VQ-WAV2VEC: SELF-SUPERVISED LEARNING OF DISCRETE SPEECH REPRESENTATIONS

[11].EFFECTIVENESS OF SELF-SUPERVISED PRE-TRAINING FOR SPEECH RECOGNITION

[12].wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations

微信公众号有最新技术分享,【欢迎扫码关注交流】

在这里插入图片描述

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值