avatar

Wav2Vec2.0:语音领域的预训练模型

近期,由于工作原因,笔者需要为公司开发一个领域适配的语音模型。从以往在NLP领域的工作来看,现如今预训练+微调机制已经在CV与NLP方向上充分证明了它的有效性,而语音作为AI研究经典方向之一自然也存在相应的研究。本文将介绍一个由Facebook AI Research(FAIR)于2020年提出的在语音方向里具有一定影响力的预训练模型——Wav2Vec2.0

相关资源

1.模型结构

Wav2Vec2由FeatureEncoderEncoder两个模块组成,前者负责将一维的语音波形处理成若干个语音单元的向量表示;后者负责抽取并融合这些语音单元的上下文信息,最终输出这些语音单元的embedding。

1.1 FeatureEncoder

wav2vec2.0的FeatureEncoder由7层卷积层构成,结构如下图所示

对于参数的解析,知乎的xmdxcsj已经在文章自监督预训练(三)wav2vec 2.0原理进行过详细的说明,此处笔者直接引用这篇文章中的描述:

plaintext
1
2
3
4
5
6
7
8
9
文章使用了7层的CNN,步长为(5,2,2,2,2,2,2),卷积核宽度为(10,3,3,3,3,2,2),假设输入语音的长度为(1,x):
cnn0 (x-10)/5+1=x/5-1
cnn1 ((x/5-1)-3)/2+1=x/10-1
cnn2 x/20-1
cnn3 x/40-1
cnn4 x/80-1
cnn5 x/160
cnn6 x/320
采样率为16k的情况下,1s的语音长度对应矩阵(1,16000),论文中的channels大小设置的为512,对应的输出为(512,16000/320)=(512,50),可以得到50个512维的向量,相当于每20ms产生一个512维的特征向量。

1.2 Encoder

Wav2vec2的Encoder由我们的老朋友——Transformer组成,base版本的tfm层数为12,large版为24。这里需要注意的是PositionEmbedding,wav2vec使用一个卷积层来作为PE,并将PE加到hidden_state中后传入Transformers。wav2vec2原文描述为:

plaintext
1
Instead of fixed positional embeddings which encode absolute positional information, we use a convolutional layer similar to which acts as relative positional embedding.

这里其实存在一个问题——为什么使用卷积作为PE?

事实上,利用卷积PE替代传统的三角函数PE的做法自FAIR的另一个研究成果——Transformers with convolutional context for ASR。在这篇文章中,作者通过实验比对了多个PE的效果,最终卷积PE脱颖而出,被wav2vec2继承了下来。

2.预训练

2.1 有效性提升的关键——乘积量化

wav2vec2在预训练(或者说自监督学习)过程中引入了乘积量化(Product Quantization) ,这属于wav2vec2的一个创新点,也是它有效的重要原因之一。乘积量化模块的作用是将FeatureEncoder的输出离散化成为了一组数量有限的语音表示,对于乘积量化的解释,知乎这篇文章中已经给出了很通俗的解释,如下:

plaintext
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
From 知乎.量子纠缠态 <十三、如何又让马儿跑得好,又让马儿不吃草——wav2vec 2.0>
URL: https://zhuanlan.zhihu.com/p/390545403

1、乘积量化的原理

说人话,就是

把原来连续的特征空间假设是d维,拆分成G个子空间(codebook),每个子空间维度是d/G。然后分别在每个子空间

里面聚类(K-mean什么的),一共获得V个中心和其中心特征。每个类别的特征用其中心特征代替。

结果就是,原来d维的连续空间(有无限种特征表达形式),坍缩成了有限离线的空间[GxV],其可能的特征种类数就只有G*V个。

2、乘积量化巧妙在哪儿

乘积量化操作通过将无限的特征表达空间坍缩成有限的离散空间,让特征的鲁棒性更强,不会受少量扰动的影响(只要还在某一类里面,特征都由中心特征来代替)。这个聚类过程也是一个特征提取的过程,让特征的表征能力更强了。

2.2 损失函数

预训练损失函数为

它由两部分组成:

(1) Contrastive Loss

这部分损失函数来源于对比学习任务,模型需要从一组候选向量中预测出正确的语音表示。这里的q即经过乘积量化后的语音表示。

(2) Diversity Loss

这部分是多样性损失,主要是为了确保乘积量化时的离散语音表示的可用性。关于这一点,FAIR团队人员在这个issue中给出了官方解答

总结

预训练-微调模式继CV与NLP之后开始席卷语音领域,笔者在实践中也印证了wav2vec2.0在小规模数据集上fine-tune之后确实能达到非常好的效果。但凡事都是有代价的,正如预训练模型给CV、NLP带去的困扰那样,wav2vec2.0虽然效果喜人,但无奈太过笨重,要实现线上使用还需要进行一定的压缩与加速。总的来说,瑕不掩瑜,wav2vec2.0依然是一个非常适合低资源冷启动项目的基础模型。

Author: Qin Yue
Link: https://qinyuenlp.com/article/1837c5011ace/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

Comment