利用函数wavread对语音信号进行采样_Wav2vec 系列:从原始音频中学习语音的结构...

本文主要梳理Facebook AI Research 从2019年开始的发表的wav2vec系列工作,主要包括了Wav2vec、Wav2vec 2.0

1. Wav2vec: Unsupervised Pre-training for Speech Recognition

1.1 Introduction

wav2vec 是Interspeech 2019 收录的文章,论文中,作者用无监督预训练的卷积神经网络来改善语音识别任务,提出了一种噪声对比学习二分类任务(noise contrastive binary classification task),从而使得wav2vec可以在大量未标注的数据上进行训练。实验结果表明wav2vec预训练得到的speech representation超越了帧级别的音素分类任务并且可以显著提升ASR模型的表现,同时,完全卷积架构与使用的递归模型相比,可以在硬件上并行计算。

在机器学习特别是深度学习的相关领域中,通过无标注数据得到好的数据表示来提升某个任务的表现是很常见且有效的方法。对CV或是NLP有了解的同学肯定对embedding这个概念非常熟悉,所谓embedding就是一种数据的低维度representation。比如在CV中我们可以使用训练完的ResNet的最后一个全连接层的输出作为图象的representation;又比如在NLP中我们可以使用早期的word2vec或是近期很火的BERT作为单词的representation。当我们需要做一个具体的NLP中的任务,比如机器翻译,我们就可以使用训练好的BERT模型来fine-tuning机器翻译模型。这个其实可以被视为一种迁移学习的方法。
实际上在语音中也有很多基于无监督算法来获得representation的工作,这里的representation不仅可以是speech的表示,也可以是speaker的表示,比如我之前介绍的通过speaker verification来获得speaker embedding进而提升Multi-speaker TTS表现的工作就是一个典型的例子。 [1]

1.2 Method & Model

21de083c111dbd2b5d5206ae8904621e.png
图1. 模型结构示意图

模型将原始音频信号

作为输入,基于历史信息和当前输入的信息预测未来的某些采样点,这里使用了两个编码器进行计算。
  • 编码器网络
    (encoder network)将音频信号嵌入到特征空间(latent space)中,将每个
    映射为一个特征向量
    ,类似于language model模型那样获得一个编码向量,再基于此预测某个
    ,这里
  • 上下文网络
    (context network)结合了多个时间步长编码器以获得上下文表示(contextualized representations)如图1。将多个
    转化为context representation
    ,这里有
    。这里的
    为感受野(receptive field size)

然后,两个网络的输出

都用于损失函数(loss function)的计算。作者在实验中使用了两种不同的感受野模型,一种为普通规模,用来在一般数据集上训练,另一种则是大规模 (wav2vec large),用来在大数据集上训练。在这两种模型中的感受野分别对应210ms和810ms。

1.3 loss function

模型的loss中自然要包含预测未来某个z的损失。然而仅仅有正例是不够的,因此作者利用了负采样技术,作者从一个概率分布
中采样出负样本
,最终模型的loss为区分正例和反例的contrastive loss
[1]

这里
是sigmoid函数。熟悉NLP的读者可能已经注意到这个和word2vec模型的loss是非常类似的。另外,上式中
是一个step-specific的linear layer,即对每个
都有一个对应的linear layer。

我们把所有
对应的loss相加就得到了最终的loss;作者在实验中每次采样10个负例来估计它。训练完成之后我们就可以使用得到的特征来替换一些任务中原本使用的特征,这里作者在实验中使用了ASR,因此使用
替换了在acoustic model中使用的log-mel filterbank特征
[1]

1.4 experiment & result

论文中使用的数据集为:TIMIT、WSJ、Librispeech,然后在si284上进行训练,在nov93dev上进行验证,并在上进行测试nov92。 对比实验使用的是80维的log-mel filterbank ,步幅为10 ms。

8b842cd75d66eb9691dd302c9aff8b32.png

7706d813161671a5047069f081163309.png

实验结果显示用wav2vec作为输入的模型比使用传统log mel filterbank的模型最高有30%左右的提升。同样作者验证了在labeled data数据有限的情况下,wav2vec相比baseline会有更多的收益。

2. Wav2vec 2.0: A Framework for Self-Supervised Learning of Speech Representations

Wav2vec 2.0作者给出的解释是学习了用于解决自监督任务的基本语音单元。对模型进行训练,以预测语音中用于拟合目标的语音单元,同时学习到用于任务学习的语音建模单元应该是什么。

wav2vec 2.0只需转录10分钟的语音和53,000小时的未标记语音,就可以在LibriSpeech上达到8.6%的含噪语音词错率(WER)和5.2%的纯净语音词错率(WER)。同时,还为方言和细分领域的语音识别任务打开了大门,这些模型以前需要更多的音频数据才能达到可接受的性能。第二,作者还开发了一种跨语言方法,称为XLSR,可以学习几种语言通用的语音单元。当只有少量未标记的语音样本时,此方法会有所收益。

像BERT一样,wav2vec是通过预测语音被掩盖部分(masked parts)的语音单元来完成建模任务的。主要区别在于语音音频是连续信号,可以捕获音频的许多方面,并没有清晰地分割为单词或其他语音单位。Wav2vec 2.0通过学习25ms左右的上下文表示来解决此问题。这些单元然后用于表征不同的语音样本。这使我们能够在训练数据不充分的情况下构建更具鲁棒性的语音识别系统。

2.1 学习离散的潜在语音单元

传统的语音识别模型主要在有标注的语音样本上进行训练。成熟的系统往往需要大量有标注的数据。自监督学习提供了一种利用未标注的数据来构建更好的系统。

其他用于语音的自监督方法尝试重建音频信号,这需要模型捕获语音的多个方面,包括录音环境,噪声和说话人特征。

wav2vec 2.0 通过拟合一组比音素短的ASR建模单元来表征语音音频序列。由于此集合是有限的,因此该模型无法表示所有的差异,例如背景噪声。取而代之的是,这些建模单元将鼓励模型将注意力集中在代表语音音频的最重要因素上。在实验中,此方法比LibriSpeech 的benchmark 测试中的方法表现更好。

wav2vec 2.0 模型首先使用多层卷积神经网络处理语音音频的原始波形,以获得每个25ms的潜在音频表示。这些表征向量被喂到量化器(quantizer)和transformer中。量化器从学习的单元清单(inventory of learned units)中选择一个语音单元作为潜在音频表征向量。大约一半的音频表示在被馈送到transformer之前被隐蔽掉(masked)。transformer从整个音频序列中添加信息,输出用于计算loss function。模型需要通过掩盖位置(masked positions)识别正确的量化语音单位。

9ef5df352e60ee67f38a4c27629fa911.png


通过跨语言培训,wav2vec 2.0可以学习多种语言使用的语音单元。

2.2 语言无关的训练

获取有标注的数据代价昂贵,为了解决这个问题,同时在多种语言上预训练单个模型,可以获得比在单一语言上训练更好的表征向量。这对于自然语言处理特别有效。使用这种方法可以极大的降低资源不足的问题,因为它们可以从相关的语言中受益。

2.3 benchmark 的性能

作者从960小时的无标注的语音数据中训练了wav2vec。经过预训练后,在100小时,1小时或仅10分钟的有标注数据上对模型进行了语音识别的finetune操作。结果显示,在100小时的有标注数据(Noisy Student training)上,wav2vec 2.0的性能有巨大的提升。而且,即使使用少100倍的数据或仅使用一个小时,它仍显示出比以前的最佳结果有所改进。

对比实验中增加无标注的数据量,作者用LibriVox数据集中的10分钟有标记数据进行微调。结果是该模型的WER仍达到8.6%。这表明,wav2vec 2.0可以为几乎没有标签的训练数据的提供语音识别模型的建模单元。

f150872d22d659d0278c9ebd606b7fdf.png


为了评估跨语言能力,wav2vec 2.0进行了12种语言的无标注数据训练,表明与仅使用单一语言的培训相比,跨语言培训显着提高了资源匮乏语言的性能。同时,作者还测量了每种语言使用学习的语音单位的频率,并在2D图中可视化了结果。此图说明相关语言倾向于使用相似的单位,这证实了模型学习跨语言单位。

d43a035dbd94cf7465d095f6f2c65c9d.png


根据音素错误率(PER)在Common Voice基准测试中得出的结果,将每种语言的训练(XLSR-Mono)与所有10种语言的训练(XLSR-10)进行了比较。

e3329293d00575c84ed090073fd9b9a6.png

图显示了每种语言使用的语音建模单元。距离近的语言,例如英语和德语或巴斯克语和加泰罗尼亚语,往往使用更相似的建模单元。

3. 总结

wav2vec模型是一种AR(AutoRegression)机制的模型,所以在预训练阶段的wav2vec的模型更像是以原始音频为输入的语言模型,而随着训练数据的加大,wav2vec的作用也在渐渐弱化;另外,至于自主选择语音识别的建模单元的说法类似与于HMM状态自旋和跳转的转移概率。只不过是用了表达能力更强的模型刻画出了非线性的关系。

总体来说,自主选择表征特征的深度学习时代也已经来到了语音识别领域,或许能够为语音识别打开一扇新的大门,或许只是ASR发展历程中的一朵小浪花都需要时间和实践的认证,但是从论文中的结果来看,值得期待此方向更多的work,关于论文的解读和看法,欢迎评论区讨论。

参考

  1. ^abchttps://zhuanlan.zhihu.com/p/272013702
设计要求 1、语音信号的采集利用 Windows下的录音机,录制一段自己的话音,时间在1s内然后在Matlab软件平台下,利用函数wavread语音信号进行采样,记住采样频率和采样点数。 2、语音信号的频谱分析在Matlab,可以利用函数fft对信号进行快速傅立叶变换,得到信号的频谱特性,要求学生首先画出语音信号的时域波形,然后对语音信号进行频谱分析。 3、设计数字滤波器和画出其频率响应给出各滤波器的性能指标; 给定滤波器的性能指标如下: (1)低通滤波器的性能指标:fb=1000Hz,fc=1200Hz,As=100dB,Ap=1dB, (2)高通滤波器的性能指标:fb=5000Hz,fc=4800Hz, As=100dB,Ap=1dB, (3)带通滤波器的性能指标:fb1=1200Hz,fb2=3000Hz, fc1=1000Hz,fc2=3200Hz, As=100dB,Ap=1dB, 采用窗函数法和双线性变换法设计上面要求的3种滤波器,并画出滤波 器的频率响应。 4、用滤波器对信号进行滤波 ,然后用自己设计的滤波器对采集到的信号进行滤波,画出滤波后信号的时域波形及频谱,并对滤波前后的信号进行对比,分析信号的变化; 5、回放语音信号,分析滤波前后的语音变化; 6、设计系统界面,为了使编制的程序操作方便,设计处理系统的用户界面,在所设计的系 统界面上可以实现上述要求的包括采集、分析、滤波等全部内容,并能够选 择滤波器的类型,输入滤波器的参数、显示滤波器的频率响应等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值