Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

时间:2024-04-11 15:32:20

感想

这篇文章的署名作者尤其的多,做了很多工作,从模型设计到产品不熟,还实现了一个GPU版本的CTC,CTC可以说是这篇文章的核心部分,没有它,就没有端到端的训练,作者还用到了双向神经网络,对GPU并行都做了相应的定制化优化,涉及的很全,算法比较实验也很全,大多都是很人类水平比较。

介绍

数十年的手工工程领域知识已经融入到了最新的自动语音识别(automatic speech recognition,ASR)系统中,一个简单的解决方案就是端到端的训练ASR模型。使用深度学习的一个模型去替换以往ASR的多个模块,端到端的训练简化了训练过程,移除了工程中重采样(bootstrapping),对齐(alignment),聚类(clustering),HMM装置。系统建立于端到端的深度学习,我们可以用一系列的深度学习技术,像获取大量的训练集合(capturing large training sets),用高性能计算训练更大的模型,有条理的探索深度学习结构的空间(the space of neural network architectures)。

贡献

1. 模型结构
2. 大量标记的训练集
3. 语音识别的计算规模

模型结构

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

系统是一个循环神经网络(RNN),输入是一个或者多个卷积输入层,后面接了多个循环层或者双向循环层。然后接了一个全连接层,输出为softmax层输出。网络使用的是CTC损失函数进行端到端的训练,CTC直接从输入音频中预测符号序列。

网络的输入是规范化声音片段的log能量谱,用20ms的窗口计算得到的;输出是每个语言的字母表。在每个输出时间步t,RNN做了一个预测,P(lt|x),lt是一个字符或者字母或者一个空白符号。在英文中,lt属于{a,b,c…,z, 间隔(space),撇号(apostrophe),空白(blank)},我们加了间隙代表每个单词的边界。对于普通话系统,网络的输出是简体中文字符,有6000个字符,其中包括罗马字母,。

CTC模型是用一个更大的文本集合进行训练的,我们使用一个特别的定向搜索(beam search)去找转录y,使得下式最大化:

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

Wc(y)是转录y中英文或者中文的数量,α控制着语言模型和CTC网络的相对贡献。权重β鼓励转录出更多的字。这些参数是在development set集合上进行微调的。

模型训练用的是SGD+ Nesterov momentum,mini batch设置的是512句,学习率是从[1*10^-4,6*10^-4]取得的,在每次迭代后以一个常量因子1.2退火(详细请见论文,我只能帮到这儿了)。Momentum设置的是0.99。如果规范的梯度(norm of the gradient)超过了400这个阈值,我们就将其置为400(这是为了防止梯度爆炸的问题,论文算法伪代码在下面)


Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

对于英文

英文模型有2层2Dj卷积,随后接了3层无向循环层,和每层有2560个GRU cells,随后又接了一个lookahead convolution层,T的值设置为80,用BatchNorm和SortaGrad进行训练。


组成部分的详细细节

Batch Normalization for Deep RNNs

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

Batch normalization只加在RNN的垂直连接上,对于每一个隐藏单元我们都计算了其均值和方差,在一个mini batch中。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

上图显示的是有Batch normailization的深度网络收敛的更快。有两个训练模型,9-7代表网络深度为9层,其中7层位双向循环神经网络(vanilla bidirectional RNNs)。5-1表示网络有5层,其中一层为双向循环神经网络。9-7比5-1的网络更好。

SortaGrad

用了batch normalization(BN)后,我们发现训练CTC时有时还是不稳定,因此,就有了sortaGrad.
Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记
在一个训练epoch中,我们通过mini batch进行迭代,训练集以mini batch中最长音频长度的递增顺序进行训练,我们在development set上比较WER(word error rate),所有的网络有38M参数,随着深度的增加,隐藏层的单元数递减,最后的两列是我们在比较循环网络单元的类型变了之后的结果,用的是GRU结构和BN结构,这是在development set上进行的。从结果来看,SortaGrad提高了训练的稳定性,特别是针对BN结构的循环层。

Frequency Convolutions

时序卷积(Temporal convolution)是语音识别里惯用的方法,这是为了针对可变长度的语音语句的时序翻译不变性建模。频率的卷积是对谱的可变性建模,因为说话人的多变性。
实验结果表明,二维的卷积能提升在噪声数据上提升性能。在development set上,我们用三层二维卷积达到了23.9%的错误率,

Lookahead Convolution and Unidirectional Models

Didirectional RNN模型很难用于在线,低延迟的场景中,因为他们不能流式转录过程,因为语音数据是从用户来的,常规的前向循环比双向模型表现效果差,因此,一些未来上下文的信息对识别性能表现的提高是至关重要的。因此我们需要建立一个无向模型,我们提出了一个特别的层,叫做lookahead convolution。如下



Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

这层通过线性的结合每个神经元第t时间步的激励到未来(future,实在不知道怎么翻译通顺,见谅),使得我们可以控制未来所需上下文的数量。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记


Rt是时间步t,lookahead layer是Wi,j组成的的矩阵,d是上一层的神经元的数量。我们把lookahead convolution放在所有循环层的上面。

这样可以流化所有在lookahead convolution下面计算,以一个比较好的间隔(granularity)。

系统优化


我们的网络有几百万的参数,一次训练实验包含几十个单精度exaFLOPS, 我们开发了一个基于高性能计算设施的高度优化的训练系统。即使现在训练深度网络都是并行的。

但是可拓展性其可拓展性常常成为瓶颈,特别的,我们专门定制了OpenMPI的All-Reduce代码,用于多多节点的GPU的梯度求和,我们实现了一个针对GPU加速的CTC,

并且使用了定制的内存分配器(custom memory allocators)。对于每个节点,这些技术使我们维持了整体45%的理论峰值性能。

注意:exaFLOPS

exa : 用于计量单位,表示10的18次方,表示百亿亿次

FLOPS= FLoating-point Operations Per Second,每秒浮点运算次数(巨型计算机的计算速度单位,即1秒内浮点运算的次数)。

训练数据

大规模深度学习系统需要大量发的标记的训练数据,训练我们的英文模型,我们使用了11940小时的语音数据,约800,0000句话,

中文系统用了9400小时的标记语音数据,约1100,0000句。

数据构造

部分英文和中文数据集是从未处理的数据而来,里面有长语音片段,和一些噪声转录。为了切分这些长语音片段,我们把语音和文稿对齐,对齐计算公式:

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

这本质上是一个Viterbi算法对齐,使用了用CTC进行训练的RNN模型。CTC只保证整个对齐,而不能保证单个的精确对齐。但是我们发现当使用双向RNN以后,

这个方法可以精确单个对齐。


为了过滤掉错误的文稿转录片段,我们使用了一个有以下特征的分类器:CTC损失(the raw CTC cost),CTC损失被序列的长度归一化,序列长度到文稿长度的比率,

文稿中字的数量,文稿中字符的数量。我们用众包的方式建立这些数据集。对于英文集合,当我们通过这种方式重新得到超过50%的训练样例的时候,

我们发现错误率从17%降至5%。另外,我们还给数据集加了一些噪声,SNR在0dB到30dB之间。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记



 

如上表,常规的 developments sets和有噪声的development sets,随着不断增加其数据集的比例的结果,结果是WER,越低越好。

模型有9层,2层2D卷积,7个循环层,有68M参数。样本都是在完整数据集里随机采样,模型训练达到20 epoch,用了early-stopping防止过拟合,

WER降了接近40%。

实验结果

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记


上图英文语音识别系统和众包的人类水平的性能对比,数值为WER,越低越好。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

上图是不同RNN结构的比较,dev set和test set都是内部的语料库,每个模型大约有80,0000个参数。

Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记

上图是普通话识别系统和人类的对比,前一个100句语料,是由一个委员会的5位中国人(a committee of 5 Chinese speakers)标记的。

第二个是250句语料是由一个职业转译的人标记的。

部署

为了增加部署的可拓展性,我们仍然能够保持低延迟的转绿,我们建立了一个批量调度器(batching scheduler),叫做Batch Dispatch,去集合用户请求的流数据,
然后再用RNN在这些bathes进行前向传导。有了这个调度器,我们可以增加batch的大小,最终能提高效率,但同时增加了延迟。
Deep Speech 2 : End-to-End Speech Recognition in English and Mandarin论文笔记
我们的系统中间的延迟为44ms,当同时加载10个流数据时,98%的延迟为70ms(这是本人也不是很理解)。服务器使用NVIDIA Quadro K1200 GPU对RNN进行评估,
Batch Dispatch使得在加载的batch增加时,保持了较低的延迟。

单词

Benchmark  n 基准,参照; 标准检查程序; 水准标; vt.  检测(用基准问题测试);

Transcription 抄本; 抄写; 录音; 翻译;

Granularity  间隔尺寸,粒度;

参考文献

[1]. Exaflops. https://baike.baidu.com/item/exaflops/8335270?fr=aladdin

[2] Razvan Pascanu, Tomas Mikolov, YoshuaBengio:On the difficulty of training recurrent neural networks. ICML (3) 2013:1310-1318

[3] Dario Amodei, Rishita Anubhai, EricBattenberg, Carl Case, Jared Casper, Bryan Catanzaro, Jingdong Chen, MikeChrzanowski, Adam Coates, Greg Diamos, Erich Elsen, Jesse Engel, Linxi Fan,Christopher Fougner, Awni Y. Hannun, Billy Jun, Tony Han, Patrick LeGresley,Xiangang Li, Libby Lin, Sharan Narang, Andrew Y. Ng, Sherjil Ozair, RyanPrenger, Sheng Qian, Jonathan Raiman, Sanjeev Satheesh, David Seetapun, ShubhoSengupta, Chong Wang, Yi Wang, Zhiqian Wang, Bo Xiao, Yan Xie, Dani Yogatama,Jun Zhan, Zhenyao Zhu:

Deep Speech 2 : End-to-End SpeechRecognition in English and Mandarin. ICML 2016: 173-182