SEW:无监督预训练在语音识别中的性能-效率权衡

摘要

本文研究了自动语音识别(ASR)中预训练模型的性能-效率权衡问题。我们聚焦于 wav2vec 2.0,并形式化了多种影响模型性能和效率的架构设计。基于所有观察结果,我们提出了 SEW(Squeezed and Efficient Wav2vec)这一预训练模型架构,在多种训练设置中在性能和效率两个维度上都取得了显著改进。例如,在 LibriSpeech 的 100h-960h 半监督设置下,SEW 相比 wav2vec 2.0 实现了 1.9 倍的推理速度提升,同时词错误率相对降低了 13.5%。在相似的推理时间下,SEW 在不同模型规模下将词错误率降低了 25–50%。

1. 引言

近年来,利用无标签音频数据进行自监督预训练,以学习通用特征表示的研究受到广泛关注,这些特征随后会在特定任务的标注音频上进行微调(Zhang et al., 2020b;Wang et al., 2021b;Xu et al., 2020a;Pepino et al., 2021)。这一趋势与自然语言处理(NLP;Devlin et al., 2018;Liu et al., 2019;He et al., 2020)和计算机视觉(CV;He et al., 2019;Chen et al., 2020;Grill et al., 2020)中的发展类似。其中最具代表性的模型可能就是 wav2vec 2.0(W2V2;Baevski et al., 2020b),该模型在仅使用十分钟转录(有标签)数据进行微调后,便可实现有竞争力的词错误率(WER),而以往的监督方法通常需要近千小时的标注数据。如果 NLP 和 CV 的最新进展具有参考价值,那么这些可以在专业任务上微调的预训练音频模型的重要性只会愈加显著。实际上,已有研究聚焦于 W2V2 的预训练数据(Conneau et al., 2020;Hsu et al., 2021)、预训练任务(Hsu et al., 2020)或与伪标签方法结合的效果(Xu et al., 2020a;Zhang et al., 2020b)。

在本文中,我们研究了 W2V2 的模型设计,以及其各组成部分之间可能存在的权衡关系。我们的重点是模型在实际应用中的效率,而非对模型结构的扩展。随着 W2V2 类模型日益普及,理解其效率权衡对于将这些成果从实验室推广到现实世界尤为关键,在现实场景中,效率的任何提升都可能显著降低推理成本和能耗开销,进而影响大量实际应用。
在这里插入图片描述

我们从多个方面对 W2V2 模型进行了研究,重点关注自动语音识别(ASR),同时保留标准的预训练和少样本微调设置。首先,我们研究了网络的时间分辨率如何在性能与效率之间进行权衡,结果表明,在计算预训练表示和进行 ASR 解码时采用不同的分辨率,可以显著减少推理时间,同时保持类似的性能。其次,我们提出了一组高效的波形特征提取器,其性能与原始 W2V2 提取器相当,但推理时间仅为原来的二分之一。最后,我们研究了在网络不同部分之间重新分配模型表达能力的影响。我们发现,将更多参数分配给预训练网络的后部比增加靠近输入波形的容量效果更好。我们还观察到,提高预训练阶段预测头(predictor heads)的表达能力能提升性能,而不会影响下游任务的计算开销,因为这些头在下游使用中会被丢弃。

基于上述观察,我们提出了两个模型:SEW(Squeezed and Efficient Wav2vec)和SEW-D(引入解耦注意力机制的 SEW,He et al., 2020)。我们在 LibriSpeech 数据集(Panayotov et al., 2015)的 960 小时无标签音频上对 SEW 和 SEW-D 进行了预训练,并在多个 ASR 任务上进行微调。SEW 在性能-效率权衡方面明显优于原始的 W2V2。例如,在使用 100 小时有标签数据的情况下,相比 W2V2-tiny 模型,SEW 将 LibriSpeech test-clean 的词错误率(WER)从 22.8% 降低到 10.6%,同时略快于后者,甚至优于一个较大的 W2V2 模型(其 WER 为 12.8%)。与官方发布的 W2V2-large 模型相比,我们最好的 SEW-D-base+ 在推理和预训练中分别实现了 2.7× 和 3.2× 的加速,同时在参数数量减半的情况下保持了相近的 WER。与 W2V2-base 相比,我们的 SEW-D-mid 实现了 1.9× 的推理速度提升,并将 WER 相对降低了 13.5%。

图 1 展示了不同模型规模下的性能-效率权衡结果。在对 LibriSpeech(Panayotov et al., 2015)、Ted-lium 3(Hernandez et al., 2018)、VoxPopuli(Wang et al., 2021a)和 Switchboard(Godfrey and Holliman, 1993)数据集进行实验时,SEW-D 在大多数预训练设置下都优于 W2V2。预训练模型和代码已开源,地址为:https://github.com/asappresearch/sew

2 相关工作

无监督音频表示学习
对比预测编码(Contrastive Predictive Coding, CPC)是一种通用的无监督学习方法,适用于语音、视觉、文本以及强化学习等任务(van den Oord et al., 2018)。在语音任务中,CPC 使用过去的音频来预测未来的音频,类似于语言建模(Mikolov et al., 2010;Dauphin et al., 2017;Kaplan et al., 2020),但使用的是对比损失函数。Wav2vec(Schneider et al., 2019)在 CPC 模型结构的基础上进行了改进,专注于为端到端自动语音识别提供无监督预训练。大致来说,wav2vec 包含一个从原始波形音频中提取特征向量序列的特征提取器,以及一个上下文网络,该网络对最近的特征进行编码,用于预测接下来时刻的特征。这个上下文网络仅用于学习有用的特征表示,通常在预训练后会被丢弃。

近期,Baevski 等人(2020a)提出了 vq-wav2vec,并将其与一个类似 BERT 的离散模型结合(Devlin et al., 2019;Baevski et al., 2019)。W2V2(Baevski et al., 2020b)将 vq-wav2vec 与 BERT 式模型整合为一个端到端的训练框架,在其中 BERT 模块扮演上下文网络的角色,但不再在预训练后被丢弃。最近,Hsu 等人(2020)提出了 HuBERT,并展示了 W2V2 可以通过聚类目标进行预训练,而无需使用对比目标函数。

除了专注于 ASR 的研究之外,音频表示学习在其他语音任务(Synnaeve and Dupoux, 2016;Chung et al., 2018;Chuang et al., 2019;Song et al., 2019)、音乐(Yang et al., 2021;Zhao and Guo, 2021)以及通用音频任务(Saeed et al., 2021;Gong et al., 2021;Niizumi et al., 2021;Wang et al., 2021c)中也引起了广泛关注。

端到端自动语音识别(ASR)
随着大规模数据集和高速计算资源的普及,端到端 ASR 模型(Amodei et al., 2016;Zhang et al., 2020b)逐渐达到了最先进水平,超越了基于 HMM-DNN 的混合系统(Abdel-Hamid et al., 2012;Hinton et al., 2012)。端到端 ASR 模型大致可以分为三类:连接时序分类(CTC;Graves et al., 2013)、RNN 转导器(RNN-T;Graves, 2012;Han et al., 2020;Gulati et al., 2020)和序列到序列模型(又称 Listen, Attend and Spell;Seq2seq;Chan et al., 2016;Dong et al., 2018;Watanabe et al., 2018)。CTC 模型在批量解码中速度极快;RNN-T 变体常用于实时系统中;而 Seq2seq 模型则更常见于离线应用场景。

近期,随着 Transformer 架构(Vaswani et al., 2017;Dong et al., 2018)在自然语言处理任务中取得成功,语音处理也逐步向 Transformer 及其变体(Zhang et al., 2020a;Baevski et al., 2020b;Gulati et al., 2020;Zhang et al., 2020b;Yeh et al., 2019)转变。

3 技术背景:Wav2Vec 2.0(W2V2)

W2V2 由一个波形特征提取器和一个上下文网络组成。波形特征提取器生成一系列连续的特征向量,每个向量编码音频中的一个短时间片段;上下文网络则将这些特征向量映射为上下文相关的表示。

预掩码特征被离散化,用作预测目标。上下文网络的目标是在被掩码的位置上,从一组负样本中识别出原始特征的离散版本,使用 InfoNCE 损失函数(van den Oord et al., 2018)。图2展示了 W2V2 的整体框架,包括 (a) 一个特征提取器、(b) 一个上下文网络、(c)一个可选的量化模块,以及 (d) 两个投影头。
在这里插入图片描述

**Wave Feature Extractor(WFE)**波形特征提取器 f(⋅)f(\cdot)f() 对原始波形音频输入 X=(x1,...,xTinput)∈RTinput×dinput\mathbf { X } = ( \mathbf { x } _ { 1 } , . . . , \mathbf { x } _ { T _ { \mathrm { i n p u t } } } ) \in \mathbb { R } ^ { T _ { \mathrm { i n p u t } } \times d _ { \mathrm { i n p u t } } }X=(x1,...,xTinput)RTinput×dinput 进行编码和下采样(其中 dinput=1d_{\text{input}} = 1dinput=1,表示单通道音频),生成特征向量序列 Z=f(X)=(z1,...,zT)∈RT×Rdfeat\mathbf { Z } = f ( \mathbf { X } ) = ( z _ { 1 } , . . . , z _ { T } ) \in \mathbb { R } ^ { T \times \mathbb { R } ^ { d _ { \mathrm { f e a t } } } }Z=f(X)=(z1,...,zT)RT×Rdfeat。例如,W2V2 使用卷积型 WFE 将 16KHz 音频序列映射为 50Hz 的帧,其感受野大小为 400,步长为 320。每个特征向量编码原始信号中一个 25ms(即 1000/16000×4001000/16000 \times 4001000/16000×400)的时间窗口,步长为 20ms(即 1000/16000×3201000/16000 \times 3201000/16000×320)。压缩后的序列长度为 T=Tinput−400320+1=Tinput−80320T = \frac{T_{\text{input}} - 400}{320} + 1 = \frac{T_{\text{input}} - 80}{320}T=320Tinput400+1=320Tinput80

上下文网络(Context Network)g(⋅)g(\cdot)g() 遵循与自然语言处理中的掩码语言模型(如 BERT(Devlin et al., 2018)或 RoBERTa(Liu et al., 2019))类似的原理。在预训练过程中,每个特征向量 ztz_tzt 会以预定义概率 ppp 被掩码并替换为一个可训练的掩码向量 mmm。例如,序列 Z=(z1,z2,z3,z4,z5,z6,...,zT)Z = (z_1, z_2, z_3, z_4, z_5, z_6, ..., z_T)Z=(z1,z2,z3,z4,z5,z6,...,zT) 可能变为 Z′=(z1,m,m,z4,m,z6,...,zT)Z' = (z_1, m, m, z_4, m, z_6, ..., z_T)Z=(z1,m,m,z4,m,z6,...,zT)。上下文网络将这个掩码后的序列映射为上下文相关表示序列 C=g(Z′)=(c1,...,cT)∈RT×dfeatC = g(Z') = (c_1, ..., c_T) \in \mathbb{R}^{T \times d_{\text{feat}}}C=g(Z)=(c1,...,cT)RT×dfeat,以融合上下文信息。即使某个 ztz_tzt 被掩码替换为 mmm,我们仍期望对应的 ctc_tct 能恢复 ztz_tzt 的信息,因为 ctc_tct 包含来自周围未被掩码输入向量的信息。上下文网络通常采用 Transformer 架构实现(Vaswani et al., 2017;Gulati et al., 2020)。

量化模块(Quantization Module)q(⋅)q(\cdot)q() 将每个未掩码的特征向量 ztz_tzt 映射为量化形式 qt=q(zt)∈Rdfeatq_t = q(z_t) \in \mathbb{R}^{d_{\text{feat}}}qt=q(zt)Rdfeat,该量化向量作为掩码位置 ttt 的预测目标。该模块基于带有直通估计器的 Gumbel softmax(Gumbel, 1954;Jang et al., 2016;Maddison et al., 2014)。量化模块由 GGG 个码本组成,每个码本包含 VVV 个条目,共有 G×VG \times VG×V 个向量 eg,v∈RdfeatGe_{g,v} \in \mathbb{R}^{\frac{d_{\text{feat}}}{G}}eg,vRGdfeat,其中 g∈{1,...,G}g \in \{1,...,G\}g{1,...,G}v∈{1,...,V}v \in \{1,...,V\}v{1,...,V}。对每个组 ggg,将 ztz_tzt 分配到第 vvv 个条目的概率为
pg,v=exp⁡(Wvg⋅zt/τQ)∑v′=1Vexp⁡(Wv′g⋅zt/τQ)p_{g,v} = \frac{\exp(W_{vg} \cdot z_t / \tau_Q)}{\sum_{v'=1}^V \exp(W_{v'g} \cdot z_t / \tau_Q)} pg,v=v=1Vexp(Wvgzt/τQ)exp(Wvgzt/τQ)

其中 Wg∈RV×dfeatW^{g} \in \mathbb{R}^{V \times d_{\text{feat}}}WgRV×dfeat 是可训练矩阵,τQ\tau_QτQ 是量化温度。每组 gggztz_tzt 分配给概率最大的条目 vg∗=arg⁡max⁡vpg,vv_g^* = \arg\max_v p_{g,v}vg=argmaxvpg,v。对应的嵌入向量 (e1,v1∗,...,eG,vG∗)(e_{1, v_1^*}, ..., e_{G, v_G^*})(e1,v1,...,eG,vG) 被连接成单一向量 qt∈Rdfeatq_t \in \mathbb{R}^{d_{\text{feat}}}qtRdfeat,构成量化特征序列 Q=(q1,...,qT)∈RT×dfeatQ = (q_1, ..., q_T) \in \mathbb{R}^{T \times d_{\text{feat}}}Q=(q1,...,qT)RT×dfeat

投影头(Projection Heads)包括两个线性投影头 pc(⋅)p_c(\cdot)pc()pq(⋅)p_q(\cdot)pq(),用于降低上下文表示 CCC 和量化特征 QQQ 的维度。对于被掩码替换成 mmmztz_tzt,希望 pc(ct)∈Rdprojp_c(c_t) \in \mathbb{R}^{d_{\text{proj}}}pc(ct)Rdprojpq(qt)∈Rdprojp_q(q_t) \in \mathbb{R}^{d_{\text{proj}}}pq(qt)Rdproj 彼此相似。Baevski 等人(2020b)在原始符号中未区分 pcp_cpcgggpqp_qpqqqq,但这里保持区分,因为它们在不同阶段发挥不同作用,且在下游微调前均被舍弃。

预训练目标 W2V2 在预训练损失中结合了对比损失和多样性损失:
L=Lm+αLd(1)\mathcal { L } = \mathcal { L } _ { m } + \alpha \mathcal { L } _ { d }\quad(1) L=Lm+αLd(1)
对比损失 LmL_mLm 的目标是使得投影后的输出 pc(ct)p_c(c_t)pc(ct)pq(qt)p_q(q_t)pq(qt) 接近,同时与同一序列中其他位置 t′t'tpq(qt′)p_q(q_{t'})pq(qt) 保持距离。W2V2 使用了 InfoNCE 损失(van den Oord et al., 2018):
Lm=Etismasked[−log⁡exp⁡(sim(pc(ct),pq(qt))/κ)∑qt′∈Qexp⁡(sim(pc(ct),pq(qt′))/κ)](2)\mathcal { L } _ { m } = \mathbb { E } _ { t \mathrm { \, i s \, m a s k e d } } \left[ - \log \frac { \exp ( \mathcal { sim } ( p _ { c } ( c _ { t } ) , p _ { q } ( q _ { t } ) ) / \kappa ) } { \sum _ { q _ { t ^ { \prime } } \in \mathbb { Q } } \exp ( \mathcal { sim } ( p _ { c } ( c _ { t } ) , p _ { q } ( q _ { t ^ { \prime } } ) ) / \kappa ) } \right]\quad(2) Lm=Etismasked[logqtQexp(sim(pc(ct),pq(qt))/κ)exp(sim(pc(ct),pq(qt))/κ)](2)
相似度函数定义为 sim(a,b)=a⊤b∥a∥∥b∥\text{sim}(a, b) = \frac{a^\top b}{\|a\|\|b\|}sim(a,b)=a∥∥bab,其中 QQQ 是包含正样本 qtq_tqtKKK 个负样本的集合,κ\kappaκ 是温度参数。期望值仅在被掩蔽的位置上计算。多样性损失 LdL_dLd 防止量化模块陷入退化映射(例如将所有输入都映射到同一个离散码),通过鼓励量化概率 pg,vp_{g,v}pg,v 在各个码本条目间均匀分布来实现:
Ld=Et[1−1GV∑g=1Gexp⁡(−∑v=1Vpg,vlog⁡pg,v)](3)\mathcal { L } _ { d } = \mathbb { E } _ { t } \left[ 1 - \frac { 1 } { G V } \sum _ { g = 1 } ^ { G } \exp \left( - \sum _ { v = 1 } ^ { V } p _ { g , v } \log p _ { g , v } \right) \right]\quad(3) Ld=Et[1GV1g=1Gexp(v=1Vpg,vlogpg,v)](3)

温馨提示:
阅读全文请访问"AI深语解构" SEW:无监督预训练在语音识别中的性能-效率权衡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89820.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux系统部署express+vue项目

一、准备阶段: 1、安装linux上所需要的环境:npm nodejs nginx pm2 //安装 npm(Node 包管理器) sudo apt install npm//判断是否安装成功 npm -v//安装 Node.js(可以根据需要选择版本) sudo apt inst…

PixiJS教程(004):点击事件交互

1.6 事件交互实现要求:点击宝剑,修改宝剑的颜色。1️⃣实现代码: // 为精灵添加交互事件 sprite.interactive true; sprite.on(click, () > {// 点击精灵时,改变精灵的颜色sprite.tint Math.random() * 0xFFFFFF; });说明&am…

创客匠人助力家庭教育IP破局:从0到1打造创始人个人品牌全攻略

一、IP定位:细分赛道的精准锚定与用户画像构建 在家庭教育8000亿市场规模的竞争中,创始人IP的差异化定位成为破局关键。创客匠人通过“标签化定位”工具,帮助教育者锁定垂直领域,如亲子沟通、青春期教育等细分赛道。以景丽霞老师…

使用坚果云扩容Zotero同步空间的简单快捷方法

本文介绍基于坚果云的WebDAV协议,用于文献管理软件Zotero的文件同步,从而实现Zotero存储空间扩容的方法。 在之前的文章Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入(https://blog.csdn.net/zhebushibiaoshifu/a…

Java启动脚本

Java启动脚本 编写代码,然后打包 Java-1.0-SNAPSHOT.jar public class test {public static void main(String[] args) {System.out.println("Hello IDEA");} }编写运行脚本 #!/bin/sh WORKDIR$(cd $(dirname $0); pwd) cd $WORKDIRexport JAVA_OPTS"…

VSCode使用ssh远程连接阿里云

1. 终端选择 Windows使用PowerShell Ubuntu和Mac使用Terminal 2. 设置ssh 2.1. 第一台电脑 生成密钥 ssh-keygen -o -t rsa -b 4096 -C "emailexample.com" 按三次回车 查看密钥 cat ~/.ssh/id_rsa.pub 拷贝密钥,粘贴到服务器的密钥框中 2.2. 第…

XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习

摘要 本文提出了 XLSR,该方法通过从多种语言的原始语音波形中预训练单个模型,以学习跨语言的语音表示。我们基于 wav2vec 2.0 构建模型,该方法通过对掩蔽后的潜在语音表示解决对比任务进行训练,并联合学习在多种语言之间共享的潜…

图灵完备之路(数电学习三分钟)----数据选择器与总线

1.数据选择器之前我们学习了逻辑与算数的计算,得知两个数字之间的加减和与或的结果是不同的,而一个通用的数字电路不可能只有一个功能,所以我们将在本节引入电路选择器这一“器件”,来实现对两个输入的运算方式的选择,…

Linux下如何设置CUDA的路径

今天遇到一个关于CUDA的问题,我要跑的深度学习代码,他里面有cuda编程,需要编译。但是你运行就报错。 代码提示我大段报错。 (score-denoise) ubuntuGPUA10002:~/wbd/score-denoise_Transformerdepth20$ python train.py Detected CUDA fil…

js树的排序

树 树的前中后序遍历 树是一种重要的非线性数据结构,尤其是二叉树。二叉树的遍历是操作树的基础,主要有前序遍历、中序遍历和后序遍历三种方式。 前序遍历 访问顺序:根结点 -> 左子树 -> 右子树。 遍历规则:首先访问根结…

解码 Red Stuff:Walrus 高效可靠存储的引擎

Red Stuff 是 Walrus 所采用的二维(2D)纠删码协议,定义了数据如何被编码和存储。它是实现高效、安全、且高可用的去中心化存储的关键。通过 Red Stuff,Walrus 成功解决了去中心化存储系统常见的三大难题:安全性、复制效…

【ACP】阿里云云计算高级运维工程师--ACP

文章目录1、简要介绍2、核心特点3、考试相关信息4、适合人群1、简要介绍 阿里云云计算认证ACP(Alibaba Cloud Certified Professional)是面向云计算技术与应用从业者的专业级认证,旨在评估考生对阿里云云计算产品的理解、部署、运维及最佳实…

快速掌握Python编程基础

干货分享,感谢您的阅读!备注:本博客将自己初步学习Python的总结进行分享,希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力,如有错误请留言指正,谢谢!(持续更新&a…

「Java案例」鸡兔同笼问题

案例解析 鸡兔同笼求解 《孙子算经》是中国古代重要的数学著作,成书于南北朝时期,其中就记载了一个有趣的问题:鸡和兔在同一个笼子里,鸡和兔共有n条腿, m个头,问鸡和兔各有多少只?编写一个程序…

BLDC电机-运动控制---stm32时钟树定时器SYSTICKRTC的学习

一、时钟树 二、基本定时器 三、通用定时器 四、高级定时器 五、SYSTICK 六、RTC

Implementing a User-Defined Preconditioner in PETSc

文章目录Implementing a User-Defined Preconditioner in PETScBasic ApproachExample ImplementationUsing Your PreconditionerAdvanced OptionsImportant NotesUsing PCShell to Implement User-Defined Preconditioners in PETScBasic Implementation StepsAdvanced Featur…

DotNetBrowser 3.3.0 版本发布啦!

#Chromium 137 安全修复一次调用即可下载 URL更新了 Widevine APIDOM 元素绝对边界 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。

Android-自定义View的实战学习总结

一、自定义View歌词界面LrcView 类-->自定义的歌词视图1. 构造函数和属性初始化自定义 View 通常需要提供多个构造函数以支持不同的初始化方式。在 LrcView 中,提供了四个构造函数,最终调用 super 父类构造函数完成初始化, context.obtain…

Maven 在 Eclipse 中的使用指南

Maven 在 Eclipse 中的使用指南 概述 Maven 是一个强大的构建自动化工具,用于项目管理和构建。它简化了项目构建、依赖管理和项目报告等任务。Eclipse 是一个流行的集成开发环境(IDE),支持多种编程语言,包括 Java。本文将详细介绍如何在 Eclipse 中使用 Maven 进行项目管…

zxing去白边

2025年了,可能干不了几年了,还能写这种文章还是有点可笑。 背景 zxing库生成的二维码自带白边 分析 生产二维码主要分两步: 1.用QRCodeWriter生成BitMatrix信息 2.根据信息生成bitmap 问题在1。 生成二维码的尺寸实际是有一些规格的&a…