编者按:随着深度学习的不断发展,语音识别技术得到了极大的提升,同时为人们的日常生活提供了许多便利。然而,一个语音模型的训练并非易事,因为语音数据天然存在着获取难、数据标注耗时昂贵的问题,而且还会面临模型漂移、标注数据不足等难题。因此,迁移学习技术对于语音数据非常重要。为了解决语音识别的跨领域和跨语言问题,微软亚洲研究院机器学习组和微软(亚洲)互联网工程院提出了跨领域和跨语言语音识别的 CMatch 和 Adapter 方法。这两项技术是如何提升模型迁移学习性能的?他们又利用了哪些创新技术?让我们从今天的文章中来获得答案吧。
语音识别就是将人的声音转化为对应的文字,在如今的日常生活中有着重要的应用,例如手机中的语音助手、语音输入;智能家居中的声控照明、智能电视交互;还有影视字幕生成、听录速记等等,以语音识别为核心技术的应用已经屡见不鲜。但是,语音数据天然存在着获取难、数据标注耗时昂贵的问题。不同人的方言、口音、说话方式也有所不同。受限于此,采集到的语音数据绝大多数会面临模型漂移、标注数据不足等问题。
尤其是语音识别中的跨领域和跨语言场景更是十分具有挑战性。跨领域指的是在领域 A(如普通麦克风)训练的模型如何迁移到领域 B(如专用麦克风)。而跨语种则指的是在语言 A(如俄语)上训练的模型如何迁移到语言 B(如捷克语)。特别是对于一些标注数据稀缺的小语种更是如此。因此,研究低资源跨语种迁移至关重要。
为了解决上述难题,微软亚洲研究院提出了 用于语音识别的无监督字符级分布适配迁移学习方法 CMatch 和基于适配器架构的参数高效跨语言迁移方法 Adapter 。相关论文已分别被语音领域顶会和顶刊 Interspeech 2021 及 IEEE/ACM TASLP 2022 所接收。(论文链接,请见文末)
迁移学习方法 CMatch:
实现字符级跨领域适配
众所周知,基于深度学习的端到端 ASR (自动语音识别) 已经可以通过大规模的训练数据和强大的模型得到很好的性能。但是,训练和测试数据之间可能会因录音设备、环境的不同有着相似却不匹配的分布,导致 ASR 模型测试时的识别精度下降。而这种领域或分布不匹配的情况非常多样且常见,以至于很难对每个领域的语音数据进行大量收集并标记。这种情况下模型往往需要借助无监督领域适配来提升其在目标域的表现。
现有的无监督领域适配方法通常将每个领域视为一个分布,然后进行领域适配,例如领域对抗训练或是特征匹配。这些方法可能会忽略一些不同领域内细粒度更高的分布知识,例如字符、音素或单词,这在一定程度上会影响适配的效果。这点在此前的研究《Deep subdomain adaptation network for image classification》[1] 中得到了验证,与在整个域中对齐的传统方法相比,在子域中对齐的图像(即按类标签划分的域)通常可以实现更好的自适应性能。
微软亚洲研究院提出了一种用于 ASR 的无监督字符级分布匹配方法—— CMatch,以实现在两个不同领域中的每个字符之间执行细粒度的自适应。在 Libri-Adapt 数据集上进行的实验表明,CMatch 在跨设备和跨环境的适配上相对单词错误率(WER)分别降低了 14.39% 和 16.50% 。同时,研究员们还全面分析了帧级标签分配和基于 Transformer 的领域适配的不同策略。
以图1为例,通过执行 CMatch 算法,两个领域相同的字符在特征分布中被拉近了:
图1:执行 CMatch 前后效果对比
CMatch 方法由两个步骤组成: 帧级标签分配和字符级别的分布匹配 。
其中,帧级别标签分配可以为语音信号获得更加准 确的“特征-标签”对应关系,为下一步实现基于标签(即字符)的分布适配提供依据,即 需要获得帧级别的标签以取得更细粒度的特征分布。要想进行 帧级标签分配 ,首先需要获得较为准确的标签对齐。如图2所示的三种方法:CTC 强制对齐、动态帧平均、以及伪 CTC 标签。可以看出, CTC 强制对齐 是通过预训练的 CTC 模块,在计算每条文本对应的最可能的 CTC 路径(插入重复和 Blank 符号)后分配到每个语音帧上,这个方法相对准确但是计算代价较高; 动态帧平均 则是将语音帧平均分配到每个字符上,这个方法需要基于源域和目标域语速均匀的假设;而 伪 CTC 标签 的方法,通过利用已经在源域上学习较好的 CTC 模块外加基于置信度的过滤(如图2中的 t、e、p 等),兼顾了高效和准确性。
图2:三种帧级标签分配策略
需要说明的是,在源域上使用真实文本进行标签分配时,由于目标域没有文本,所以需要借助源域模型先对目标域的语音数据进行伪标注,然后再使用模型标注的文本进行标签分配。
得到帧级别的标签后,就需要进行 字符级别的分布匹配 。研究员们选择采用了 Maximum Mean Discrepancy(MMD)度量进行特征匹配。MMD 用于评估两个分布之间的差异,是迁移学习中常见的一种分布度量方法。它的公式为:
实际操作中,给定源域和目标域样本 X_S, X_T,计算 MMD 的有偏差的经验估计:
通过计算所有字符之间的平均 MMD,可以得到字符级别的分布匹配损失函数:
最终,微软亚洲研究院采用 CTC-Attention 混合模型作为基础 ASR 模型,以及同时混合学习 CTC 模块(用于帧级标签分配)和基于 Transformer Decoder 的 Seq2Seq Loss,于是语音识别的损失函数可以表示为:
将分布匹配损失函数和语音识别损失函数相结合,就得到了最终的损失函数:
最终算法流程如表1:
表1:CMatch 学习算法
领域内、跨设备、跨环境语音识别,CMatch均取得最佳效果
表2是跨设备语音识别时的结果,值得注意到的是,Source-only 的模型在其他设备录制语音上的识别效果相比领域内模型都会有一定程度的下降。而基于全局 MMD 和领域对抗训练的方法均有所提升,CMatch 则在各个情况下均取得了最佳的效果。
表2:跨设备语音识别结果
表3的结果表明,CMatch 在跨环境(抗噪声)语音识别情况下也取得了很好的效果。
表3:跨环境(抗噪声)语音识别结果
表4为消融实验,可以看到结合了自训练和细粒度的分布匹配能够使 CMatch 达到最好的效果。
表4:CMatch 消融实验结果
此外,研究员们还分析比较了三种字符分配方法。在表5中可以看出 CTC 强制对齐取得了最好的效果,但是其计算开销也最大;而 FrameAverage 也取得了较好的效果,但它的假设前提是领域和目标域具有均匀的说话速度;而使用 CTC 伪标签的方法取得了与 CTC 强制对齐相近的结果,同时计算起来也更加高效。
表5:三种字符分配方法的实验结果
最后,对于是否需要在解码器端使用 CMatch Loss,实验结果如表6。由于解码器在实验中本来就没有功能上的差别,目标文本都是标准的英文,因此减小其分布的差异并没有什么效果,甚至会损害性能。
表6:解码器端使用 CMatch Loss 的测试结果
Adapter 再进化:
更少的训练数据,更高的准确率
在一代代科学家和工程师的努力下,语音识别系统在各种主流语言上都已经达到了非常好的效果,比如英语、中文、法语、俄语、西班牙语等……让人们在日常生活中就能享受其带来的便利。然而,世界上有大约7,000种语言,其中绝大部分语言的使用者并不多,而且不同人的方言、口音、说话方式也有所不同,这就使得这些语言的语音数据十分稀缺,即 低资源 ( l ow-resource )语言。标注数据的稀缺导致近年来端到端语音识别的诸多成果迟迟不能应用到这些语言上。
为此,微软亚洲研究院的研究员们开始思考如何利用迁移学习,将主流语言(如英语、中文等)的知识用于帮助低资源语言的学习,在多种语言之间共享,起到“四两拨千斤”的效果,从而提升小语种语音识别的表现。如图3所示,给定罗马尼亚语作为目标语言,如何利用数据相对丰富的意大利语、威尔士语和俄语来训练出更好的罗马尼亚语语音识别模型?
图3:给定若干源语言,如何将知识迁移到目标语言上?
幸运的是,近年来,如 wav2vec2.0 [2] 等预训练模型都已经推出了多语言版本,微软亚洲研究院之前的研究也证明了仅需要简单的微调,一个大规模的多语言模型就能被适配到一个低资源语言上,并能显著改善识别性能。
但与此同时,研究员们也发现了两个新问题:
- 大规模的多语言模型往往含有大量的参数,导致在一些数据量非常少的情况下,模型极易过拟合。
- 如果对于世界上的每一个小语种都维护一个微调后的大模型,成本将会十分巨大。
不过,之前 Houlsby 等人发现[3],对于一个预训练好的 BERT,只需要在 Transformer 的每一层插入一个如图4所示的 Adapter,就能在不改变模型主干参数的情况下将模型适配到各种下游任务, 甚至能够取得接近整个模型微调的表现 。Adapter 主要包含一个 LayerNorm 层,用于重新调节原始特征的尺度,接着分别是一个降采样层和一个升采样层对特征进行压缩和还原,最后由一个残差连接保证原始特征依然能通过,从而提升 Adapter 训练时的稳定性。
图4:Adapter 结构示意图
受到 Adapter 的启发,微软亚洲研究院的研究员们尝试使用 Adapter 来解决模型过拟合问题,对如何利用 Adapter 进行高参数效率(parameter-efficient)的预训练多语言 ASR 模型的迁移展开了研究,并提出了 MetaAdapter 和 SimAdapter 来对 Adapter 进一步优化,在仅使用 2.5% 和 15.5% 的可训练参数的情况下,使得识别词错误率(WER ) 相对全模型微调分别降低了 2.98% 和 2.55% 。
微软亚洲研究院使用了自己预训练的多语言模型进行实验,该方法也可以用于 wav2vec2.0 等模型上。具体来说,模型的主干基于 Transformer 的结构,主要包含12层 Encoder 以及6层 Decoder 模型,结合了11种语料(包含42种语言,总时长约5,000小时)对模型进行预训练。同时,模型采用了 CTC-Attention 混合损失函数来提升训练的稳定性和加速训练,即在 Encoder 的输出特征上增加 CTC 层,使用 CTC 损失进行约束。研究员们还将 Adapter 放在前馈层(Feed-Forward Networks ) 后面,从而对每一层的输出特征进行调节。
图5:主干模型示意图
MetaAdapter :MetaAdapter 在结构上与 Adapter 完全一致,唯一不同的是,使用了 MAML (Model-Agnostic Meta-Learning) [4] 元学习算法来学习一个 Adapter 更优的初始化。MetaAdapter 需要通过学习如何学习多种源语言,从而在各种语言中 收集隐含的共享信息 ,以帮助学习一个新的语言。实验发现, MetaAdapter 对于过拟合和极少数据量的鲁棒性,以及最终迁移效果均显著强于原始 Adapter 。
图6:MetaAdapter
SimAdapter :如果说 MetaAdapter 需要通过收集隐含的共享信息来学习新的语言,那么 SimAdapter 则是 显式地要求模型去建模各种语言的相似度关系 ,从而更好的学习目标语言,其结构如图7所示。在研究员们看来,多语言模型的原始特征是相对语言无关的,那么如果使用这些特征作为 Query,将各语言 Adapter(包括目标语言)输出的语言强相关特征作为 Key 和 Value,那么就能通过构造注意力机制,从目标语言和源语言中分别提取一些有效信息,作为更好的目标语言特征。
图7:SimAdapter 结构示意图
SimAdapter+ 达到最优结果,MetaAdapter 擅长数据量极少的场景
通过将模型在 Common Voice 的五种低资源语言上进行实验,结果如表7所示。根据迁移与否以及迁移方式的不同,可以将各种方法分为三类:
- 不迁移(左边栏):包括了传统的 DNN/HMM 混合模型,从头训练的 Transformer(B. 和本文用的主干模型大小结构均一致;S. 指为了抑制过拟合,而将参数量调小的版本),以及将预训练好的模型当作特征提取器,去学习目标语言的输出层。
- 基于微调的迁移(中间栏):包括了完整模型的微调,以及对于抑制过拟合的尝试(完整模型微调 +L2 正则化、仅微调模型最后几层参数)
- 基于 Adapter 的迁移(右边栏):即本文介绍的各种方法,其中 SimAdapter+ 是结合了 SimAdapter 和 MetaAdapter 的升级版。
表7:MetaAdapter 和 SimAdapter 在 Common Voice 五种低资源语言上的实验结果
这里采用了两种平均方式来反应模型的不同能力:1. 直接平均:没有考虑不同语言内的数据量,对于尤其擅长极少数据的算法会更有优势;2. 加权平均:考虑了不同语言本身的数据量,更适合用来衡量模型在各种情况下的综合表现。
由结果可以看出:
- 使用迁移学习的方法均明显好于不使用迁移学习的方法,印证了迁移学习的重要性。
- 全模型微调有着非常强大的效果,对其施加传统的 L2 正则,或是仅微调模型最后几层参数效果都不理想。
- 原始的 Adapter 在合适的训练方法下基本可以达到和全模型微调相同的水平,说明了 Adapter 在 ASR 任务上的有效性。
- 本文提出的 SimAdapter 和 MetaAdapter 均进一步提高了 Adapter 的表现,将它们结合后的 SimAdapter+ 更是达到了文中最优的结果。
- 值得注意的是,MetaAdapter 更擅长数据量极少的情况,而在 SimAdapter 则有着更均衡的表现。
创新训练方法和实验方法:
进一步验证 Adapter 和 SimAdapter 的性能
微软亚洲研究院提出了两阶段训练方法以提高 Adapter 在语音识别任务上的表现 :模型迁移过程中需要学习一份新语言的词表,如果将该词表和 Adapter 一起训练,由于词嵌入的不断更新,可能会导致 Adapter 学习目标的混乱。同时学习 Adapter 和词表也可能会词嵌入从而承担一部分 Adapter 的功能,导致 Adapter 无法学习到足够的语言相关特征,造成后续 SimAdapter 的表现下降。因此,先将主干模型固定住,将新语言的词表映射到模型相同的隐空间(latent space ) 中,再将词表固定住学习 Adapter,可以达到更好的效果,如表9所示。
表9:二阶段训练法
另外,为了证明 SimAdapter 的确能够从其他语言学习到有用的知识,研究员们设计了两个实验:
其一,尝试去除目标语言本身的 Adapter ,以要求 SimAdapter 仅通过源语言来学习一个对目标语言有用的特征,结果如表10所示: 即使没有使用目标语言 Adapter,SimAdapter 依然能够在多数语言上取得较为明显的提升 。
表10:SimAdapter 消融实验
其二,在乌克兰语上训练两个不同的 SimAdapter 模型,以分析不同源语言(意大利语和俄语)的贡献。由于俄语和乌克兰语更相似,使用俄语 Adapter 共同训练的 SimAdapter 应当获得更多收益。结果显示,使用意大利语 Adapter 的 SimAdapter 的词错误率为48.70,而使用俄语 Adapter 的词错误率仅为47.73,这表明相比意大利语,SimAdapter 的确可以从俄语中学习更多的有用知识来建模乌克兰语。
微软亚洲研究院已将 CMatch 和 Adapter 代码开源,地址如下:
https://github.com/microsoft/NeuralSpeech/master/CMatch
https://github.com/microsoft/NeuralSpeech/master/Adapter