流式语音识别模型 低延时 基于Transformer的高效

从场景上,语音识别可以分为流式语音识别和非流式语音识别。非流式语音识别(离线识别)是指模型在用户说完一句话或一段话之后再启动识别,而流式语音识别则是指模型在用户还在谈话的时刻便同步启动语音识别。流式语音识别由于其延时低的特点,在工业界中有着宽泛的运行,例如听写转录等。

Transformer流式语音识别应战

目前,Transformer 模型只管在离线场景下可以启动准确的语音识别,但在流式语音识别中却遭逢了两个致命的疑问:

1)计算复杂度和内存贮存开支会随着语音时长的参与而变大。

由于 Transformer 经常使用自留意力模型时会将一切的历史消息启动思考,因此造成了存储和计算的复杂度会随着语音时长线性参与。而流式语音识别往往自身就有很长的语音输入,所以原生的 Transformer 很难运行于流式语音识别之中。

图1:流式语音识别 Transformer 自留意力示用意

2)Transformer 模型由于层数过多会造成未来窗口大小(lookahead window)传递。

如下图所示,Transformer 模型假设每层往后看一帧,那么最终的向前看(lookahead)会随着 Transformer 层数的参与而累积。例如,一个18层的Transformer,最终会积攒18帧的延时,这将在实践运行中带来很大的延时疑问,使得语音识别反响速度变慢,用户体验不佳。

图2:Transformer 的未来窗口随层数而参与

基于块和基于记忆的处置打算

为了处置上述 Transformer 模型在流式语音识别中的疑问,科研人员提出了基于块(chunk)和基于记忆(memory)的两种处置打算。

1) 基于块(chunk)的处置打算

第一种打算为基于块的处置打算,如下图所示,其中虚线为块的分隔符。其主体思维是把相邻帧变成一个块,之后依据块启动处置。这种方法的好处是可以极速地启动训练和解码,但由于块之间没有咨询,所以造成模型准确率不佳。

图3:基于块的流式语音识别处置打算

2) 基于记忆(memory)的处置打算

基于记忆的处置打算的主体思维则是在块的基础上引入记忆,让不同块之间可以咨询起来。但是,此方法会破坏训练中的非自循环机制,使得模型训练变慢。

图4:基于记忆的流式语音识别处置打算

工业界中往往有着少量的训练数据,基于记忆的处置打算会让模型训练开支增大。这就促使钻研人员须要去寻觅可以平衡准确率、训练速度和测试速度的打算。

极速训练和解码,Mask is all you need

针对上述疑问,微软的钻研员们提出了一种极速启动训练和解码的方法。该方法十分便捷,只要要一个掩码矩阵便可以让一个非流的 Transformer 变成流的 Transformer。

下图为非流和0延时的掩码矩阵,其为一个全1矩阵,或许一个下三角阵。

图5:离线语音识别编码器掩码矩阵

图6:0延时的流式语音识别编码器掩码矩阵

钻研员们宿愿将基于块的方法中的不同块衔接起来,并坚持 Transformer 并行训练的特点。为了到达这个目的,钻研员们提出了一种基于块的流式 Transformer,详细算法如下:

首先,在帧左侧,让每一层的每一帧区分向前看 n 帧,这样随着层数的叠加,Transformer 对历史的视线可以积攒。假设有 m 层,则可以看到历史的 n*m 帧。只管看到了额外的 n*m 帧,但这些帧并不会拖慢解码的期间,由于它们的表示会在历史计算时计算好,并不会在块启动重复计算。与解码期间关系的,只要每一层可以看到帧的数目。

由于宿愿未来的消息延时较小,所以要防止层数对视线的累积效应。为了到达这个目的,可以让每一个块最左边的帧没有任何对未来的视线,而块内的帧可以相互看到,这样便可以阻止延时随着层数而参与。

最后,在每个块之间让不同帧都可以相互看到,这样平均延时即块长度的二分之一。

此方法可以让 Transformer 坚持并行训练的好处,极速启动训练,其获取的掩码矩阵如下。

图7:所提出方法的编码器掩码矩阵

在解码环节中,解码期间关键由块的大小而选择。将之前的 key 和 value 启动缓存,这样可以防止重复计算,以减速解码。该方法的公式如下,历史的 key 和 value(标红)在启动留意力权重(attention weight)计算中被缓存。

试验

数据集与模型设置

钻研员们的试验在微软外部启动了6.5万小时以上的训练,并在微软外部约180万词的测试集上启动了测试。试验经常使用了32个 GPU,以混合精度的模式训练了约两天可以使模型收敛,并且经常使用 torchjit 启动测速。钻研员们经常使用 Transducer 框架成功语音识别流式识别,试验对比了 Transformer Transducer (T-T)、Conformer Transducer (C-T)以及 RNN Transducer(RNN-T),其中 Transformer 和 Conformer 的编码局部经常使用了18层,每层 hidden state(暗藏形态)= 512的参数量。而 Transducer 中的预测网络(predictor network)则经常使用了 LSTM 网络结构,并蕴含两层,每层 hidden state = 1024。RNN-T 也与其大小相似。

低延时解码成果

从表1可以看到:1)在低延时的状况下,T-T 和 C-T 会比 RNN-T 消弭10% 的词错率( Word Error Rate,WER);2)假设每层向左看60帧(1.8s),它和看所有历史的结果相比,性能损失不大,约1%左右;3)但是 T-T 的速度却比 RNN-T 慢了一些,在四线程的状况下 Transformer 速度比 RNN 慢了3倍左右。这个疑问可以尝试应用批(batch)的方法来处置,即把相邻的几帧一同启动解码,再应用 Transformer 的并行才干,减速解码。

表2是依据批(batch)中帧的数目的不同,所对应的不同的 Transformer 的实时率。可以看到在两帧一同解码时,Transformer 就曾经到达了 RTF<1,而在5帧一同时,RTF<5。据此可以得出论断,在就义很少的延时的状况下(2帧约为 40ms),T-T 可以不做量化便可在实践场景中运行。

低延时解码成果

而在低延时的状况下,Transformer Transducer 家族的好处更是得以突显。对比传统混合(hybrid)模型,T-T有着13%的 WER改 善,对比流式的 S2S 模型(参数量分歧),Transducer 模型往往会到达更好的成果(对比 RNN S2S 和 Trans S2S)。而在雷同的 Transducer 框架下,Transformer 模型会比 RNN 模型到达更好的成果,并且速度上也有清楚的好处。令人惊讶的是,经过上述方法,目前 T-T 的离线和流式的距离无余10%,这就证实了钻研员们提出的流式方法的有效性,可以最大水平防止精度的损失。

8比特量化

经过8比特量化,可以获取更快的 Transducer 模型。在复线程的状况下,Transformer 可以优化一倍的速度,不过,RNN-T 可以优化约4倍的速度。其中,Transformer 速度优化有限的要素是,SoftMax 和 Layer Norm 等操作,难以经过8比特启动减速。

结语

在本文中,微软 Azure 语音团队与微软亚洲钻研院的钻研员们一同提出了一套联合 Transformer 家族的编码器和流式 Transducer 框架的流式语音识别打算处置打算。该打算应用 Mask is all you need 的机制,可以对流式语音识别模型启动极速训练以及解码。在六万五千小时的大规模训练数据的试验中,可以看到 Transformer 模型比 RNN 模型在识别准确率上有着清楚地提高,并在低延时的场景下,解码速度更快。

未来,钻研员们将继续钻研基于 Transformer 的语音识别模型,力争进一步降落解码的运算消耗,在0延时的场景下,让 Transformer 模型可以与 RNN 模型到达相反的解码速度。

您可能还会对下面的文章感兴趣: