论文:https://arxiv.org/pdf/1412.5567.pdf
题目:Deep Speech: Scaling up end-to-end speech recognition
我们提出了使用端到端深度学习开发的最先进的语音识别系统。我们的体系结构比传统的语音系统要简单得多,传统的语音系统依靠费力地设计的处理管道。当在嘈杂的环境中使用时,这些传统系统的性能也往往很差。相反,我们的系统不需要手动设计的组件即可对背景噪声,混响或扬声器变化进行建模,而可以直接学习对此类效果具有鲁棒性的功能。我们不需要音素字典,甚至不需要“音素”的概念。我们方法的关键是使用多个GPU的经过优化的RNN训练系统,以及使我们能够高效地使用的一组新颖的数据合成技术。获得大量用于训练的各种数据。我们的系统称为“深层语音(Deep Speech)”,其性能优于先前在广泛研究的Switchboard Hub5’00上发布的结果,在整个测试集上实现了16.0%的误差。与广泛使用的最新商业语音系统相比,深度语音还可以更好地处理充满挑战的嘈杂环境。
顶级语音识别系统依赖于复杂的流水线,该流水线由多种算法和手工设计的处理阶段组成。 在本文中,我们描述了一种称为“深度语音”的端到端语音系统,其中深度学习取代了这些处理阶段。 结合语言模型,该方法在硬语音识别任务上比传统方法具有更高的性能,同时也更加简单。 通过使用多个GPU和数千小时的数据训练大型递归神经网络(RNN),可以使这些结果成为可能。 因为此系统直接从数据中学习,所以我们不需要用于扬声器调整或噪声过滤的专用组件。 实际上,在对扬声器变化和噪声的鲁棒性至关重要的环境中,我们的系统表现出色:“深层语音”的性能优于以前在Switchboard Hub5’00语料库上发布的方法,实现了16.0%的错误率,并且在嘈杂的语音识别测试中比商业系统表现更好。
传统语音系统使用许多精心设计的处理阶段,包括专门的输入功能,声学模型和隐马尔可夫模型(HMM)。为了改善这些渠道,领域专家必须投入大量精力来调整其功能和模型。深度学习算法[27、30、15、18、9]的引入通常通过改进声学模型来提高语音系统的性能。尽管这一进步已经很显着,但深度学习在传统语音管道中仍然只发挥有限的作用。结果,为了提高诸如在嘈杂的环境中识别语音之类的任务的性能,必须为增强鲁棒性而费力地设计系统的其余部分。相反,我们的系统使用递归神经网络端到端地应用深度学习。我们利用深度学习系统提供的能力来从大型数据集中学习,以改善整体性能。我们的模型经过端到端训练以产生转录,因此,有了足够的数据和计算能力,我们可以自行学习对噪声或说话人变化的鲁棒性。
我们选择RNN模型是为了更好地映射到GPU,我们使用了一种新颖的模型分区方案来改善并行化。 此外,我们提出了一种组装大量标记语音数据的过程,该数据表现出我们系统应学习处理的失真。 通过收集和综合数据的组合,我们的系统学习了对现实噪声和说话人变化的鲁棒性(包括伦巴第效应[20])。 综上所述,这些想法足以构建一个端到端语音系统,该系统比传统管道简单得多,但在困难的语音任务上也能表现更好。 在完整的Switchboard Hub5’00测试集中,Deep Speech的错误率达到16.0%,这是发布效果最好的结果。 此外,在我们自己构造的新的嘈杂语音识别数据集上,我们的系统实现了19.1%的单词错误率,而最好的商业系统实现了30.5%的错误率。
在本文的其余部分,我们将介绍语音识别系统背后的关键思想。 我们首先描述在第2节中使用的基本递归神经网络模型和训练框架,然后讨论GPU优化(第3节)以及我们的数据捕获和综合策略(第4节)。 我们的实验结果表明了“深度语音”的最新性能(第5节),然后讨论了相关工作和我们的结论。
我们系统的核心是经过训练的循环神经网络(RNN),以摄取语音频谱图并生成英语文本转录。 假设从训练集中X = {(x(1),y(1)),(x(2),y(2))},训练单个样本x和标签y 。 每个发声x(i)是长度T(i)的时间序列,其中每个时间片都是音频特征的向量x(i)t,t = 1… ,T(i)。 我们使用频谱图作为我们的特征,因此x(i)t,p表示在时间t音频帧中第p个频点的功率。 RNN的目标是将输入序列x转换为转录y的字符概率序列,其中yˆt = P(ct | x),其中ct∈{a,b,c,… ,z,空格,撇号,空白}。
我们的RNN模型由5层隐藏单元组成。 对于输入x,第l层的隐藏单元表示为h(l),约定输入为h(0)。 前三层不是经常性的。 对于第一层,在每个时间t处,输出取决于频谱图帧xt以及每侧C帧的上下文。其余非递归层在每个时间步均对独立数据进行操作。 因此,对于每个时间t,通过以下公式计算前3层:
h (l) t = g(W(l)h (l−1) t + b (l) )
其中g(z)= min {max {0,z},20}是限幅整流线性(ReLu)激活函数,而W(l),b(l)是层1的权重矩阵和偏置参数。 第四层是双向循环层。 该层包括两组隐藏单元:一组具有正向递归h(f)和一组具有反向递归h(b):
请注意,对于第i个发声,h(f)必须从t = 1到t = T(i)依次计算,而单位h(b)必须从t = T(i)到t反向顺序计算 = 1。
第五层(非递归)将正向和反向单元都作为输入h(5)t = g(W(5)h(4)t + b(5))其中h(4)t = h(f )t + h(b)t。 输出层是一个标准的softmax函数,该函数产生每个时间片t和字母k中的字符k的预测字符概率:
一旦我们计算了P(ct | x)的预测,就可以计算出CTC损失 L(ˆy,y)来测量预测中的误差。 在训练过程中,我们可以根据给定的地面字符序列y评估相对于网络输出的梯度∇yˆL(ˆy,y)。 从这一点出发,可以通过网络的其余部分的反向传播来完成关于所有模型参数的梯度计算。 我们使用Nesterov的“加速梯度”方法进行训练
完整的RNN模型如图1所示。请注意,它的结构比文献[14]中的相关模型要简单得多-我们将自己的限制在单个循环层(这是最难并行化的),因此我们不使用(LSTM)电路。 LSTM细胞的一个缺点是它们需要在每个步骤中计算和存储多个门控神经元响应。 由于前向和后向递归是顺序重复的,因此这种小的附加成本可能会成为计算瓶颈。 通过使用齐次模型,我们使循环激活的计算尽可能高效:计算ReLu输出仅涉及GPU上的一些高度优化的BLAS操作和单点非线性。
我们使用0.99的动量,并在每次经过数据之后,以恒定因子对学习率进行退火,选择该因子以产生最快的收敛速度。
尽管我们花了很多时间来扩展数据集(请参阅第4节),但我们使用的循环网络仍然擅长拟合训练数据。 为了进一步减少方差,我们使用了几种技术。
在训练期间,我们采用5%-10%的dropout率[19]。 我们在前馈层中应用dropout,但不适用于周期性的隐藏激活。
在网络评估期间,计算机视觉中最常用的技术是通过转换或反射来随机抖动输入,通过网络提供每个抖动版本,并对结果进行投票或平均[23]。 这种抖动在ASR中并不常见,但是我们发现将原始音频文件向左和向右平移5ms(滤波器组步长的一半),然后向前传播重新计算的特征对平均输出概率是有益的。 在测试时,我们还使用多个RNN的集合,以相同的方式平均它们的输出。
当从大量带标签的语音数据中训练出来时,RNN模型可以学习产生可读的字符级转录。实际上,对于许多转录而言,RNN预测的最可能的字符序列在没有外部语言限制的情况下是完全正确的。在这种情况下,RNN所犯的错误往往是英语单词在语音上的合理表现—表1显示了一些示例。许多错误发生在很少或从未出现在我们的训练集中的单词上。在实践中,这很难避免:从足够的语音数据中进行训练以听取我们可能需要知道的所有单词或语言结构是不切实际的。因此,我们将系统与N-gram语言模型集成在一起,因为可以轻松地从庞大的未标记文本语料库中训练这些模型。为了进行比较,虽然我们的语音数据集通常包含多达300万个语音,但第5.2节中用于实验的N元语法模型是从2.2亿个短语的语料库中训练出来的,支持495,000个单词的词汇量.
表1:直接从RNN(左)进行转录的示例,其错误已通过添加语言模型而得以修复(右)。
给定RNN的输出P(c | x),我们执行搜索以查找字符c1,c2,…的序列。根据RNN输出和语言模型(其中语言模型将字符串解释为单词)而言,这种可能性最高。 具体来说,我们的目标是找到使组合目标最大化的序列c:
Q© = log(P(c|x)) + α log(Plm©) + β word count©
其中α和β是可调参数(通过交叉验证设置),这些参数控制RNN,语言模型约束和句子长度之间的折衷。 术语Plm表示根据N元语法模型的序列c的概率。 我们使用高度优化的波束搜索算法(典型的波束大小在1000-8000范围内)来最大化此目标,这与Hannun等人描述的方法类似。
如上所述,我们已经做出了一些设计决策,以使我们的网络适合高速执行(并因此进行快速培训)。 例如,我们选择了易于实施且仅依赖于几个高度优化的BLAS调用的齐次整流线性网络。 全面展开后,我们的网络将包含近50亿个典型发音的连接,因此有效的计算对于使我们的实验可行至关重要。 我们使用多GPU训练[7,23]来加速我们的实验,但是如我们所解释的那样,有效地做到这一点需要一些额外的工作。
为了有效地处理数据,我们使用两个级别的数据并行性。首先,每个GPU并行处理许多示例。这是通过将许多示例串联到单个矩阵中来完成的。例如,与其在递归层中执行单个矩阵矢量乘法Wrht,不如通过计算WrHt并行执行许多操作,其中Ht = [h(i)t,h(i + 1)t,…。 。 。](其中h(i)t对应于时间t的第i个示例x(i))。当Ht相对较宽时(例如1000个示例或更多),GPU效率最高,因此我们希望在一个GPU上处理尽可能多的示例(不超过GPU内存的限制)。
当我们希望使用比单个GPU本身无法支持的更大的微型批处理时,我们使用跨多个GPU的数据并行性,每个GPU处理一个单独的微型示例示例,然后在每次迭代期间将其计算出的梯度与其对等体合并。我们通常跨GPU使用2倍或4倍数据并行性。
但是,当发声长度不同时,由于不能将它们组合为单个矩阵乘法,因此数据并行性很难实现。我们通过按长度对训练示例进行排序并将仅大小相似的发声组合到小批中来解决此问题,必要时使用填充进行静音,以便批次中的所有发声都具有相同的长度。该解决方案的灵感来自于ITPACK / ELLPACK稀疏矩阵格式[21]。 Sutskever等人使用了类似的解决方案。 [42]加速文本的RNN。
数据并行性可将训练速度提高到小批量大小的适度倍数(例如2到4),但是由于将更多示例分配到单个梯度更新中无法提高训练收敛速度,因此面临收益递减的问题。也就是说,在2倍数量的GPU上处理2倍数量的示例无法在训练中产生2倍的加速。固定总的最小批处理大小效率不高,但将示例扩展到2倍的GPU:随着每个GPU内的最小批处理缩小,大多数操作都会受到内存带宽的限制。为了进一步扩展,我们通过划分模型进行并行化(“模型并行性” [7,10])。
由于递归层的顺序性质,我们的模型很难并行化。由于双向层由独立的前向计算和后向计算组成,因此我们可以并行执行两个计算。不幸的是,天真地将RNN拆分为将h(f)和h(b)放在单独的GPU上,这使我们在进行h(5)计算时要进行大量数据传输(这取决于h(f)和h(b)) 。因此,我们选择了一种不同的工作分区方式,该方式需要较少的模型交流:将模型沿时间维度分为两半。
除循环层外的所有层都可以沿时间维度进行分解,其中时间序列的前半部分(从t = 1到t = T(i)/ 2)分配给一个GPU,后半部分分配给另一个GPU 。在计算递归层激活时,第一个GPU开始计算正向激活h(f),第二个GPU开始计算向后激活h(b)。在中点(t = T(i)/ 2),两个GPU交换中间激活h(f)T / 2和h(b)T / 2以及交换角色。然后,第一GPU完成h(b)的后向计算,第二GPU完成h(f)的前向计算。
我们已经尽力减少RNN循环层的运行时间,因为它们很难并行化。 作为最终的优化,我们通过在原始输入中采用大小为2的“步长”(或步幅)来缩短递归层,以使展开的RNN步长减少一半。 这类似于第一层中步长为2的卷积网络[25]。 我们使用cuDNN库[2]有效地实现了卷积的第一层。
表2:用于训练深度语音的数据集的摘要。 《华尔街日报》,《Switchboard》和费舍尔语料库均由语言数据协会出版。
大规模深度学习系统需要大量的标记数据。 对于我们的系统,我们需要记录许多话语和相应的英语转录本,但是很少有足够规模的公共数据集。 为了训练我们最大的模型,我们因此收集了一个广泛的数据集,其中包括来自9600位演讲者的5000个小时的朗读语音。 为了进行比较,我们在表2中汇总了可用的标记数据集。
为了进一步扩展我们的潜在训练数据,我们使用数据合成,该合成已在其他情况下成功地用于扩大训练样本的有效数量[37、26、6]。在我们的工作中,目标主要是在现有系统崩溃的嘈杂环境中提高性能。但是,从嘈杂的环境中捕获标记的数据(例如,阅读语音)是不切实际的,因此,我们必须找到其他方法来生成此类数据。首先,通过源信号叠加的过程来生成音频信号。
我们可以利用这一事实来综合嘈杂的训练数据。例如,如果我们有一个语音音频轨道x(i)和一个“噪声”音频轨道ξ(i),那么我们可以形成“嘈杂的语音”轨道xˆ(i)= x(i)+ξ(i)模拟在嘈杂环境中捕获的音频。如有必要,我们可以将混响,回声或其他形式的阻尼添加到ξ(i)或x(i)的功率谱中,然后将它们简单地相加即可得出相当逼真的音频场景。
但是,这种方法存在一些风险。例如,为了获得1000个小时的纯净语音并创建1000个小时的嘈杂语音,我们将需要跨越大约1000个小时的独特噪声轨道。举例来说,我们无法忍受10个小时的重复噪声,因为循环网络可能会记住噪声轨迹,并从合成数据中“减去”噪声轨迹。因此,我们不使用单个长度为1000小时的噪声源ξ(i),而是使用大量较短的片段(更容易从公共视频源中收集这些片段),并将它们作为单独的噪声源,然后再叠加所有其中:xˆ(i)= x(i)+ξ(i)1 +ξ(i)2 +…
当叠加从视频片段中收集到的许多信号时,我们最终可能会得到不同于真实环境中记录的噪声的“噪声”声音。为了确保我们的合成数据和真实数据之间的良好匹配,我们拒绝了任何候选噪声片段,这些片段中每个频带的平均功率与真实噪声记录中观察到的平均功率明显不同。
语音识别系统在嘈杂的环境中遇到的一种具有挑战性的效果是“伦巴德效应” [20]:说话者主动改变其声音的音高或弯曲度以克服周围的噪音。 此(非自愿)效果不会在录制的语音数据集中显示,因为它们是在安静的环境中收集的。 为了确保在我们的训练数据中能体现这种效果,我们在数据收集过程中有意诱发朗伯效应,方法是在人们记录发声时通过戴上头戴式耳机播放很大的背景噪音。 噪音诱使他们改变声音,从而使我们能够在训练数据中捕获伦巴特效应。
我们进行了两组实验来评估我们的系统。 在这两种情况下,我们都使用第2节中描述的模型(从表2中选择的数据集进行训练)来预测字符级转录。 然后,将预测的概率向量和语言模型输入到我们的解码器中以产生单词级别的转录,然后将其与基本事实转录进行比较以产生单词错误率(WER)。
为了将我们的系统与先前的研究进行比较,我们使用了公认但极具挑战性的测试集Hub5’00(LDC2002S23)。 一些研究人员将此集合分为“简单”(Switchboard)和“复杂”(CallHome)实例,通常仅在较简单的部分报告新结果。 我们使用最有挑战性的全套案例,并报告整体单词错误率。
我们评估我们的系统仅接受300小时Switchboard对话电话语音数据集的培训,并受Switchboard(SWB)和费舍尔(FSH)的培训,这是一种与Switchboard相似的方式收集的2000小时语料库。 在Hub5’00上进行测试时,许多研究人员评估了从Switchboard对话电话语音中经过300小时训练后的模型。 部分原因是因为在整个2000小时的Fisher语料库上进行训练在计算上很困难。 使用第3节中提到的技术,我们的系统可以在短短几个小时内对2300个小时的数据进行完整处理。
由于Switchboard和Fisher语料库以8kHz的采样率分布,因此我们计算80个线性间隔对数滤波器组和能量项的频谱图。 滤波器组的计算范围是20ms的窗口除以10ms。 我们没有评估更复杂的功能,例如梅尔级对数滤波器组或梅尔频率倒谱系数。
扬声器的适应对于当前的ASR系统的成功至关重要[44,36],尤其是在300小时Switchboard上训练时。 对于我们在Hub5’00上测试的模型,我们通过将每个扬声器的频谱特征归一化来应用一种简单的扬声器自适应形式。 除此之外,我们不会以任何方式修改输入功能
对于解码,我们使用4-gram语言模型,该模型具有经过Fisher和Switchboard转录训练的30,000个单词的词汇。同样,通过对保留的开发集进行交叉验证来选择用于解码目标的超参数。深度语音SWB模型是一个由5个隐藏层组成的网络,每个隐藏层具有2048个神经元,仅需300小时总机即可对其进行训练。
深度语音SWB + FSH模型是4个RNN的集合,每个RNN都有5个隐藏的2304个神经元隐层,这些神经元在整个2300小时的组合语料库中训练。所有网络都在+/- 9帧上下文的输入上进行训练。
我们将结果报告在表3中。Vesely等人的模型。 (DNN-GMM sMBR)[44]在使用典型的混合DNN-HMM系统重新调整训练集后,在DNN顶部使用了基于序列的损失函数。在合并的Hub5’00测试集中,该模型的性能是之前发布的最佳结果。在结合2300个小时的数据进行训练时,深度语音系统在此基准上的绝对WER和相对值分别提高2.4%和13.0%。 Maas等人的模型。 (DNN-HMM FSH)[28]在Fisher 2000小时语料库上训练时,WER达到19.9%。该系统是使用Kaldi [32](最先进的开源语音识别软件)构建的。我们包含此结果,以证明深度语音在接受可比较数据量的训练时与现有最佳ASR系统相比具有竞争力。
我们已经尝试过通过耳机和计算机扬声器播放的噪音。 使用耳机的优点是我们可以获得“干净”的录音,而没有背景噪音,并且以后可以添加我们自己的合成噪音。
表3:Switchboard数据集上的错误率(%WER)。 标有“ SWB”和“ CH”的列分别是Hub5’00的简单子集和困难子集。
很少有标准可以测试嘈杂的语音性能,因此我们构建了自己的评估集,该评估集包含10个扬声器的100个有噪和100个无噪声发声。 噪音环境包括背景收音机或电视; 在水槽里洗碗; 拥挤的自助餐厅; 一个餐厅; 并在雨中驾驶的汽车内。 话语文本主要来自网络搜索查询和文本消息,以及新闻剪辑,电话交谈,Internet评论,公开演讲和电影脚本。 我们没有精确控制嘈杂样本的信噪比(SNR),但我们的目标是SNR在2至6 dB之间。
对于以下实验,我们在表2中列出的所有数据集(超过7000小时)上训练了RNN。由于我们在每次通过中训练了15至20个带有新合成噪声的epoch,因此我们的模型从100,000多个小时的新颖数据中学习。我们使用6个网络的集合,每个网络具有5个2560个神经元的隐藏层。没有任何形式的说话人适应应用于训练或评估集。为了使每个示例的总能力保持一致,我们会基于每个语音对训练示例进行规范化。这些功能是在20ms的窗口中计算的160个线性间隔的对数滤波器组,跨度为10ms和能量项。音频文件在特征化之前被重新采样到16kHz。最后,从每个频点中,我们去除训练集上的全局平均值,然后除以全局标准偏差,主要是这样,在训练的早期阶段就可以很好地缩放输入。
如2.2节所述,我们使用5-gram语言模型进行解码。我们在2.2亿个Common Crawl6的短语上训练了语言模型,这些短语的选择使得每个短语的至少95%的字符在字母表中。仅保留最常见的495,000个单词,其余单词重新映射到UNKNOWN令牌。
我们将Deep Speech系统与几种商业语音系统进行了比较:(1)wit.ai,(2)Google Speech API,(3)Bing Speech和(4)AppleDictation。
我们的测试旨在对嘈杂环境中的性能进行基准测试。这种情况给评估Web语音API带来了挑战:当SNR太低或发话时间太长时,这些系统将完全没有结果。因此,我们的比较仅限于所有系统返回非空结果的发话子集。8在测试文件中评估每个系统的结果如表4所示。
为了评估第4.1节中描述的噪声合成技术的有效性,我们训练了两个RNN,一个训练了5000小时的原始数据,另一个训练了相同的5000小时加上噪声。 在这100种清洁语音中,两个模型的清洁训练模型和噪声训练模型分别具有大约相同的WER,9.2%WER和9.0%WER。 但是,在100种嘈杂的语音中,嘈杂模型的WER为22.6%,而干净模型的WER为28.7%,绝对值为6.1%,相对改进为21.3%。
表4:在原始音频上评估的5个系统的结果(%WER)。 仅针对所有系统给出的发音报告分数。 每个数据集旁边的括号中的数字,例如 干净(94),是发声的次数。
我们工作的几个部分都受到先前结果的启发。神经网络声学模型和其他连接方法最早是在1990年代初期引入语音管道的[1,34,11]。这些系统类似于DNN声学模型[30、18、9],仅取代了语音识别管线的一个阶段。从机械上讲,我们的系统类似于通过深度学习算法构建端到端语音系统的其他工作。例如,Graves等。 [13]先前已经引入了“连接主义者的时间分类”(CTC)损失函数,用于对RNN产生的转录进行评分,并且在LSTM网络中,先前已经将该方法应用于语音[14]。类似地,我们将CTC损失作为训练过程的一部分,但使用更简单的具有整流线性激活的递归网络[12,29,31]。我们的递归网络类似于Hannun等人使用的双向RNN。 [16],但进行了多项更改以增强其可伸缩性。通过关注可伸缩性,我们证明了即使没有更复杂的LSTM机制,这些更简单的网络也可以有效。
我们的工作当然不是第一个利用可伸缩性来改善DL算法性能的人。深度学习中可伸缩性的价值得到了很好的研究[8,24],并且并行处理器(包括GPU)的使用已对最近的大规模DL结果起到了作用[43,24]。 DL算法向GPU的早期移植显示出显着的速度提升[33]。研究人员还开始选择与GPU硬件良好匹配的设计,以提高效率,包括卷积[23,4,35]和本地连接[7,5]网络,特别是当有cuDNN [2]和BLAS等优化库可用时。的确,使用高性能计算基础结构,如今有可能使用GPU集群训练具有超过100亿个连接的神经网络[7]。这些结果鼓舞了我们首先专注于做出可扩展的设计选择,以有效地利用许多GPU,然后再尝试自行设计算法和模型。
具有训练大型模型的潜力,也需要大型训练集。在其他领域(例如计算机视觉)中,大型标签训练集在用于馈送越来越大的DL系统时已经实现了性能上的飞跃[43,23]。但是,在语音识别中,这种大型训练集并不常见,典型的基准测试所具有的训练集范围从数十小时(例如,《华尔街日报》的语料库为80小时)到数百小时(例如,总机和广播新闻)。较大的基准数据集(例如带有2000小时转录语音的Fisher语料库[3])很少见,仅在最近才进行研究。为了充分利用我们现有的递归网络的表达能力,我们不仅依赖大量的带标签话语,而且还依赖于合成技术来生成新颖的例子。这种方法在计算机视觉中是众所周知的[37、26、6],但是我们发现,如果正确完成,这种方法对于语音特别方便和有效。
我们提出了一种基于端到端深度学习的语音系统,该系统能够在两种挑战性场景中超越现有的最新识别管道:清晰的会话语音和嘈杂的环境中的语音。 我们的方法尤其通过多GPU训练以及数据收集和综合策略来构建大型训练集,从而展现出系统必须处理的失真(例如背景噪声和伦巴德效应)而得以实现。 这些解决方案相结合,使我们能够构建一个数据驱动的语音系统,该系统在性能上比现有方法好得多,同时不再依赖阻碍了进一步发展的复杂处理阶段。 我们相信,随着我们将来利用不断增加的计算能力和数据集大小,这种方法将继续得到改善。