共计 5340 个字符,预计需要花费 14 分钟才能阅读完成。
摘要: 在这篇博文中,咱们介绍来自 Google 的一篇论文《Scaling End-to-End Models for Large-Scale Multilingual ASR》,来看看如何构建一个可能辨认 15 种语言的多语 ASR 零碎。
本文分享自华为云社区《多语言 ASR 没有什么听不懂,15 种语言我全都要》,作者:xiaoye0829。
在这篇博文中,咱们介绍来自 Google 的一篇论文《Scaling End-to-End Models for Large-Scale Multilingual ASR》。建设一个能辨认多种语言的 ASR 零碎,是非常有挑战的,因为这些语言之间存在着十分大的差别,并且数据量非常不平衡。现有的工作中,咱们能够察看到利用有丰盛语料的语言,能够帮忙只有大量语料的语言的学习,然而这往往也随同着,有丰盛语料的语言的成果会降落。咱们在 15 种语言上进行了钻研,每种语言的大小从 7.7 千小时到 54.7 千小时,咱们发现增大模型的参数量,是解决容量瓶颈的无效办法,咱们 500M 参数的模型,曾经超过了单语的 baseline 模型,当咱们把模型参数进一步增大到 1B 或者 10B 时,咱们能取得更大的收益。另外,咱们发现大模型不仅在数据利用上更无效,在训练工夫上也更有效率,咱们的 1B(10 亿)参数的模型达到和 500M 参数的模型雷同的准确率,只花了 34% 的工夫。当模型容量无限时,减少模型的深度,通常比减少模型的宽度要好,更大的 encoder,也往往比更大的 decoder 要好。
多语言 ASR 的关注点通常在于进步低资源(只有大量语料)语言的性能,背地的思维是,利用类似语言的数据,多种语言一起联结优化,以及间断的正向迁徙从高资源语言的迁徙。在这篇文章中,咱们从容量(capacity)的视角来钻研下,在多语言的模型中,高资源语言的性能降落问题。
先前的工作摸索过 50 到 100 种语言,然而数据集的大小非常无限,最大的数据集仅仅只有 1k 小时的演讲数据。在咱们的试验中,每种语言的数据量从 7.7 千小时到 54.7 千小时(如下图,counts 代表语音的条数,hours 代表语音的时长),这使得咱们能够有一个高质量的单语模型,那么咱们就是要训练一个多语的模型,可能超过每个单语的模型。咱们从容量的角度展现了如何去解决这个问题。
随着模型容量回升,咱们胜利复原了所有高资源单语模型的性能。咱们做了很多比照试验,并发现减少深度通常能获得比减少宽度更好的成果,并且咱们发现,encoder 的容量往往与模型的辨认成果很相干。咱们察看到,在固定的模型容量下,如何调配语言的信息变得不那么重要了。而且,大模型更简略,并且更有效率,须要更少的训练轮次,和更少的 TPU 工夫,去达到类似的试验成果。
在本文的多语言 ASR 零碎中,应用的是一个基于 attention 的 encoder-decoder 模型。对于 encoder,咱们应用 Conformer 架构,蕴含一个输出映射层,一个绝对地位嵌入层,以及一些 conformer 层。第一个 conformer 块,蕴含 4 个 conformer 层。第二个 conformer 块,蕴含一个 conformer 层。咱们的 decoder 尝试了两种不同的架构,一种是单向的 LSTM,另一种是带有掩码的自留神和跨注意力机制的 Transformer。咱们的输入词表大小为一个有 3328 个 token 的表,在这个表中,3315 个 token 是在训练集中至多呈现了 1000 次,剩下的 token 是一些非凡的 token,相似“<s>”</s>“”,和一些占位填充符。词表中的大部分词来自于中文,并且中文因为在训练集中的覆盖面,是惟一一个有 OOV 问题的语言。咱们将语言信息也编码成一个 one-hot 向量,作为一个额定的输出。咱们在训练的工夫,简略地把所有数据放在一起,并且依据数据分布,在每个 batch 里,去进行采样。整个 eocoder-decoder 模型是在网络的输入和实在文字间,用穿插熵进行优化的。
实际上,咱们有很多办法,去缩放一个基于 encoder-decoder 的多语言模型,在这篇文章中,咱们次要钻研上面四种模式的影响:
- 深度 vs 宽度;
- encoder vs decoder;
- 语言相干的模型容量 vs 语言无关的模型容量;
- 架构 vs 容量。
严格来说,模型容量并不齐全等于模型的参数量,比方模型大小。对于有语言依赖的模型内容,推理时的模型容量,要小于训练时候的模型容量,这是因为在推理的时候,只有奉献的参数和对应于特定语言的参数被激活。为了简化本文的探讨,咱们关注在训练时的模型容量,并且混用模型大小和容量。缩放模型大小,也会带来很多理论问题,比方模型的并行化反对。
本文的试验,是在来自 9 种语系的 15 种语言上进行的试验。总计 235.4 百万条语音,语音时长共计 364.9 千小时,这些数据采集自谷歌的声学搜索引擎,数据是齐全匿名的,并且由标注人员标注成文本。本文应用的数据是之前论文应用的数据的 20 倍。据咱们所知,这也是第一篇在这么大规模的数据集上做多语言试验的论文。与之前多语言的工作不同,咱们关注在不同高资源语言间的烦扰问题。在咱们的设定里,咱们最小的语言有大概 7.7 千小时的训练数据,大概是之前工作里最大的语言资源的 7 倍。这个规模的数据集又给训练效率带来了挑战。咱们的每种语言的测试集,蕴含大概 3 到 19k 的语音,这些语音是从谷歌语音搜索引擎外面的采样进去的,并且和训练集没有重合。同样地,测试集也是齐全匿名和手工转写的。
咱们在训练的时候应用了 80 维的 log mel 特色,每帧的窗口大小为 32ms,每两个窗口间有 10ms 的重叠。将间断 3 帧的特色重叠起来,并做一个下采样,咱们能取得 240 维的输出特色,这个特色的采样率为 30ms。一个 16 维的 one-hot 语言向量,被送入到 encoder 中作为额定的输出,SpecAugment 数据加强也被用来加强模型的鲁棒性。整个模型利用 512 个 TPU 核进行训练,除了 10B(100 亿)参数的模型,用了 1024 个 TPU 进行训练,这次要是因为每核 16G 的带宽限度。模型应用同步随机梯度降落进行优化。对于 LSTM 作 decoder 的模型,咱们采样 Adam 优化器做优化,对于 Transformer,咱们采样 Adafactor 做优化器。transformer 学习率优化策略也被应用,其中最大学习率为 3e-4,warmup 的步数为 10k。
在这一节,咱们展现咱们在大规模数据集上建设高质量的多语言模型的钻研后果,为了简略,咱们只用均匀 WER 作比照,并且只汇报每种语言的性能。
咱们应用 Conformer 作为 encoder 和 LSTM 作为 decoder,来构建单语的 baseline 模型,encoder 蕴含 17 层 conformer block,每个 conformer 层的模型维度为 512,有 8 个 head 的 attention,conformer 外部卷积模块中,卷积核的大小为 15。decoder 是 LSTM,蕴含 2 层 640 维的 LSTM,暗藏单元的大小为 2048。每个单语模型的大小为 140M,并被用来预测跟该语言相干的 token。均匀的 WER 为 9.29%。每种语言的性能如下图所示,其中英语(US)的 WER 最低,为 4.6%,Marathi(IN)的 WER 最高为 20.2%。领有更多训练数据的语言,往往有更低的 WER。
为了证实 conformer 作为多语言建模的 encoder 的有效性,咱们比照了三种不同 encoder,他们都以 LSTM 作为 decoder。1. LSTM 作为 encoder,蕴含 8 层 LSTM,每层有 2048 个暗藏单元,和 640 维的输入单元。2. ContextNet 作为 encoder,蕴含 24 层 contextnet,每层有 640 维的暗藏单元,通道大小为 2。3. Conformer 作为 encoder,蕴含 17 层 conformer,每层有 512 维的暗藏层,这个设置和单语的模型统一。语言适应层(Language Adapter)在每个 encoder 层之间都被插入。这三种不同 encoder 构造的抉择,是为了使得模型参数的总数尽肯能保持一致,都大概为 220M。相比单语模型,多语模型的大小的减少次要来自于额定的语言适应层(Language Adapter)和输入词表的大小的减少。这三个模型的均匀 WER 为 11.86%,10.77%,和 9.43%。这个后果充沛展现了 conformer 作为多语 ASR 的 encoder 的成果。比照单语模型,只管在品质上还不如单语模型,然而它在同时辨认 15 种语言上,体现得很好。它在大略 21 个 epoch 时收敛,训练了大略 120 万 step,而单语模型通常要训练到 50 个 epoch。为了了解语言适应层的成果,咱们做了上面的融化试验,为了疾速进行试验,咱们比照了模型在 200k step 时候的成果,大概此时是在第 3.5 个 epoch。应用语言适应层,会带来语言依赖的参数,和一些模型大小上的减少。为了帮咱们更好了解,咱们训练了一个独自的适应模型,能使得所有模型共享雷同的 adapter transformation。因而,咱们的模型可能大小可能解脱 adapter 模型。在 200k step 时,这个模型取得了 10.86% 的均匀 WER,绝对刚刚的 baseline(带语言适应层),取得了 10.38% 的均匀错误率。从这个比照,能够看到,在模型中退出语言适应层很重要。
除了用一个共享 decoder,多头模型(用不同的 decoder 针对不同的语系)可能被用来减少模型容量,和之前的工作雷同,咱们为每种语系应用不同的 decoder。总共 5 种语系会被应用,包含 Germanic, Italic,Arabic,Indo-Iranan 和其余语言。为了比照,咱们确保单个 decoder 和多个 decoder 模型有雷同的参数量:1. 单 decoder 模型有 6 层 768 维的 LSTM,每层有 3074 维的暗藏单元。2. 多 decoder,有 5 个 decoder,每个 decoder 有 2 层 640 维的 LSTM,每层有 2048 维的暗藏层单元。这两种模型都有 354M 的参数。在 200k 的 step 时,单个 decoder 的均匀 WER 为 10.13%,多个 decoder 的均匀 WER 为 10.28%,这倡议咱们在雷同的模型大小下,咱们用单个 decoder,相比多个 decoder 要好。
为了进步咱们多语模型的成果,咱们进一步把模型参数从 354M 减少到 500M,通过把模型的宽度从 512 维,增大到 640 维。把宽度从 17 层,增大到 22 层。这个增大后的模型,在 200k step 时可能取得 9.63% 的 WER,并在 1.1M step 时,取得了 9.13% 的 WER,能超过单语模型。然而,相比根本的 220M 的模型,它的训练速度慢了 1 /3,这是因为 RNN 的谬误反向流传带来的。这个个性也使得用 LSTM 做 decoder 不适宜进一步的模型扩增。相比 LSTM,基于 transformer 的 decoder 模型,在训练时有更高的并行化能力。在雷同的 encoder 架构下,咱们建设了一个 Transformer decoder 模型,参数大概 500M,有 12 层 transformer,768 维的模型维度,3072 维的暗藏层维度,和 8 个 attention head。它的均匀 WER 是 9.26%,比 LSTM 的 WER 要高一些,然而它的训练速度和 220M baseline 模型靠近。因而,咱们在前面的钻研中,都用 Transformer 作为 decoder。
在上面的试验中,咱们想进一步增大 Conformer 作为 encoder 和 Transformer 作为 decoder 的模型的容量大小,试验后果如下表所示,L 示意模型的层数,W 示意模型的维度,loss 是训练样本负 log 混同,越低越好。speed 是每秒训练的样本数。B0 是 baseline 模型,“-”示意和 B0 没有区别。所有的 E 模型的参数量大小都为 1B。
比照 E1 和 E2,E5 和 E6,咱们能够看到越深的模型获得了相比越宽的模型更好的成果。然而,越深的模型须要更长的工夫去训练(2352 vs 3419)。比照 E1-E4 和 E5-E7,增大 encoder 的容量,相比增大 decoder 的容量,能取得更好的后果。然而,更大的 decoder 往往有更好的 training loss。E4, 这个模型均匀把模型容量分给宽度和深度,在这个 task 上体现得并不好,相较而言,E3 把更多地模型容量分给宽度,要体现得更好一些。最初,E8 模型,首先把模型容量,均匀分给 encoder 和 decoder,而后把更多的容量分给 depth,和 E3 的性能差不多。E3 模型最终在 600k step 时收敛,大概 10 个 epoch。最终取得了大概 9.07% 的均匀 WER。
在这个工作中,咱们钻研了如何构建一个多语言端到端 ASR 零碎,咱们通过增大模型容量来解决这个问题。随着模型的增大,咱们察看到模型的成果一直减少,咱们也能建设一个独自的多语言辨认的 ASR 零碎,这个零碎能在高资源的语言上超过不同的单语模型。
想理解更多的 AI 技术干货,欢送上华为云的 AI 专区,目前有 AI 编程 Python 等六大实战营供大家收费学习。
点击关注,第一工夫理解华为云陈腐技术~