本文将分 3 期进行连载,共介绍 17 个在语音识别任务上曾取得 SOTA 的经典模型。
- 第 1 期:NNLM、RNNLM、LSTM-RNNLM、Bi-lstm、Bi-RNN+Attention、GPT-1
- 第 2 期:BERT、Transformer-XL、EeSen、FSMN、CLDNN、highway LSTM
- 第 3 期:Attention-lvcsr、residual LSTM、CTC/Attention、Transfomer-Transducer、Conformer
本期收录模型速览
语音识别是指将语音信号转换为文字的过程。具体来说,输入一段语音信号,找到一个文字序列(由词或字组成),使得它与语音信号的匹配程度最高。这个匹配程度,一般是用概率表示的。语音识别系统一般由如下几个部分组成:信号处理、解码器、文本输出。信号处理模块根据人耳的听觉感知特点,抽取语音中最重要的特征,将语音信号转换为特征矢量序列。现行语音识别系统中常用的声学特征有线性预测编码(Linear Predictive Coding,LPC)、梅尔频率倒谱系数(Mel-frequency Cepstrum Coefficients,MFCC)、梅尔标度滤波器组(Mel-scale Filter Bank,FBank)等。解码器(Decoder)根据声学模型(Acoustic Model,AM)和语言模型(Language Model,LM),将输入的特征矢量序列转化为字符序列。解码器对给定的特征向量序列和若干假设词序列计算声学模型得分和语言模型得分,将总体输出分数最高的词序列作为识别结果。其中,声学模型是对声学、语音学、环境的变量,以及说话人性别、口音的差异等的知识表示,主要实现预测通过词 W 的发音生成特征 X 的概率。声学模型的训练数据是标注的声音特征(标注是对应的文本内容);语言模型则是对一组字序列构成的知识表示,主要实现预测某词或词序列的概率。语言模型的训练数据是一些合乎语法的句子(纯文本)。
从语言模型角度分析,近些年随着深度学习的发展,神经网络语言模型 (neural network language model,NLM) 由于能将词向量映射到低维连续空间,因此逐渐成为主流方法,具备较好的泛化性能。最早的神经语言模型是基于前馈神经网络 (feedforward neural network, FNN) 的,初步实现了对长文本序列在低维连续空间的建模,但这种方法能够处理的文本长度受限于网络的输入长度,而后循环神经网络 (recurrent neural network, RNN) 为代表的语言模型利用循环结构可以在理论上对无限长的文本建模,性能得到极大提升。基于长短期记忆循环神经网络 (long short-term memory recurrent neural network, LSTM-RNN) 的语言模型则解决了 RNN 在长历史序列建模时梯度消失的问题,在各种任务上都取得不错的效果。近年来,基于 Transformer 的语言模型在自注意力机制作用下对长文本具有更强的建模能力,在一系列自然语言和语音的任务上均取得了最优性能。从语言模型的发展中可以看出,研究核心在于如何提高模型对于长历史序列信息的建模能力,这也是神经语言模型在语音识别应用中需要考虑的核心问题。
从声学模型角度分析,传统的语音识别系统的声学模型普遍采用的是基于GMM-HMM的声学模型,其中,GMM用于对语音声学特征的分布进行建模,HMM则用于对语音信号的时序性进行建模。2006年深度学习兴起以后,深度神经网络(Deep Neural Networks,DNN)被应用于语音声学模型。2009年,Hinton及其学生将前馈全连接深度神经网络应用于语音识别声学建模,在TIMIT数据库上基于DNN-HMM的声学模型相比于传统的GMM-HMM声学模型可以获得显著的性能提升。DNN相比于GMM的优势在于:1)DNN对语音声学特征的后验概率进行建模不需要对特征的分布进行去分布假设;2)GMM要求对输入的特征进行去相关处理,而DNN可以采用各种形式的输入特征;3)GMM只能采用单帧语音作为输入,而DNN则可以通过拼接相邻帧的方式利用上下文的有效信息。2011年,Deng Li等提出基于CD-DNN-HMM的声学模型,在大词汇量连续语音识别任务上取得成功,相比于传统的GMM-HMM系统可以获得超过20%的相对性能提升。基于DNN-HMM的语音声学模型开始取代GMM-HMM成为主流的声学模型。此后大量的研究人员投入到基于深度神经网络的语音声学建模研究中,语音识别取得了突破性的进展。
本文分别总结了神经语音识别中神经语言模型和神经声学模型的经典TOP模型。
一、神经语言模型
1、 BERT
BERT的全称为Bidirectional Encoder Representation from Transformers,是一个预训练的语言表征模型。它采用新的masked language model(MLM),能生成深度的双向语言表征。预训练后,只需要添加一个额外的输出层进行fine-tune,就可以在各种各样的下游任务中取得state-of-the-art的表现。在这过程中并不需要对BERT进行任务特定的结构修改。BERT利用MLM进行预训练并且采用深层的双向Transformer组件来构建整个模型,生成能融合左右上下文信息的深层双向语言表征。如图1所示。
除了输出层之外,在预训练和微调中使用了相同的架构。使用相同的预训练模型参数来初始化不同下游任务的模型。在微调过程中,所有的参数都要进行微调。[CLS]是添加在每个输入样本前面的特殊符号,[SEP]是一个特殊的分隔符(例如分隔问题/答案)
BERT输入。每一个token(图11中的粉色块)对应的表征(图11中的黄色块),单词字典是采用WordPiece算法来进行构建的。
表征由三部分组成的,分别是对应的token、分割和位置 embeddings。
BERT输出。C为分类token([CLS])对应最后一个Transformer的输出,[公式] 则代表其他token对应最后一个Transformer的输出。对于一些token级别的任务(如,序列标注和问答任务),就把[公式] 输入到额外的输出层中进行预测。对于一些句子级别的任务(如,自然语言推断和情感分类任务),就把C输入到额外的输出层中。
当前 SOTA!平台收录 BERT 共 6 个模型实现资源。
2、 Transformer-XL
Transformer-XL引入了segment-level 循环机制和positional编码框架。不仅可以捕捉长时依赖,还可以解决上下文断片问题 (fragmentation problem),还可以学到比RNNs长80%的依赖、比vanilla Transformers长450%的依赖。Transformer-XL在长短序列上都取得了更好的结果。与vanilla Transformer相比,Transformer-XL的另一个优势是它可以用于单词级和字符级的语言建模。
与vanilla Transformer的基本思路一样,Transformer-XL仍然是使用分段的方式进行建模,但其与vanilla Transformer的本质不同是引入了段与段之间的循环机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。如下图所示:
在训练阶段,处理后面的段时,每个隐藏层都会接收两个输入:一个是该段的前面隐藏层的输出,与vanilla Transformer相同(上图的灰色线);另一个是前面段的隐藏层的输出(上图的绿色线),可以使模型创建长期依赖关系。拼接这两个输入,然后用于计算当前段的Key和Value矩阵。对于某个段的某一层的具体计算公式如下:
原则上只要GPU内存允许,该方法可以利用前面更多段的信息,测试阶段也可以获得更长的依赖。
Transformer考虑了序列的位置信息。在分段的情况下,如果仅仅对于每个段仍直接使用Transformer中的位置编码,即每个不同段在同一个位置上的表示使用相同的位置编码,就会出现问题。比如,第i−2段和第i−1段的第一个位置拥有相同的位置编码,但它们对于第i段的建模重要性显然并不相同(例如第i−2段中的第一个位置重要性可能要低一些)。因此,需要对这种位置进行区分。对于这个问题,Transformer-XL引入一种新的位置编码的方式,即根据词之间的相对距离而非像Transformer中的绝对位置进行编码。在Transformer中,第一层的计算查询qTi和键kj之间的attention分数的方式为:
在Transformer-XL中,对上述的attention计算方式进行了变换,转为相对位置的计算,而且不仅仅在第一层这么计算,在每一层都是这样计算:
结合上面两个创新点,将Transformer-XL模型的整体计算公式整理如下,这里考虑一个N层的只有一个注意力头的模型:
当前 SOTA!平台收录 Transformer-XL 共 4 个模型实现资源。
二、神经声学模型
1、EeSen
Eesen框架简化了构建最优ASR系统的流程。声学建模包括使用RNN学习预测上下文无关目标(音素或字符),为了消除对预先生成的帧标签的需求,本文采用了CTC目标函数来推断语音和标签序列之间的对齐方式。Eesen的一个显著特征是基于带权有限状态转录器(Weight finite state transducer,WFST)解码方式,该方法可将词典和语言模型有效地合并到CTC中。具体的,Eesen使用RNN作为声学模型,使用LSTM作为模型组成块,使用CTC作为目标函数,Eesen将声音建模简化为通过语音和上下文无关( context-independent ,CI)的标签序列对学习单个RNN。用这种方法,将各个组成部分(CTC标签、词典和语言模型)编码为WFST,然后组成一个全面的搜索图。WFST表示提供了一种简易方式来处理CTC空白标签,并在解码期间启用波束搜索。
Eesen中的声学模型是深度双向RNNs,用CTC目标函数训练。给定一个输入序列X = (x_1, ..., x_T),使用一个递归层计算隐藏状态的前向序列→H = (→h 1, ..., →h T),从t=1到T进行迭代:
除了输入x_t之外,也将前一个时间步长的隐性激活h_t-1输入,以影响当前时间步长的隐性输出。在双向RNNs中,一个额外的递归层计算从t=T到1的隐藏输出←H的后向序列:
RNNs的学习可以使用通过时间的反向传播(back-propagation through time,BPTT)来完成。在实践中,由于梯度消失的问题,训练RNN来学习长期的时间依赖性可能是很困难的。为了克服这个问题,引入LSTM单元作为RNNs的构建模块。LSTM包含具有自连接的记忆单元,以存储网络的时间状态。此外,还增加了乘法门控单元来控制信息流。
图3中蓝色曲线代表窥视孔连接,将存储单元与门控单元连接起来,以了解输出的精确时间。时间步长t的计算可以正式写成如下。省略了"→"这个箭头,以使表述不那么复杂:
这项工作中提出了一种基于WFSTs的通用解码方法。一个WFST是一个有限状态接受器( finite-state acceptor,FSA),其中每个过渡都有一个输入符号,一个输出符号和一个权重。一个通过WFST的路径需要一串输入符号,并生成一串输出符号。解码方法将CTC标签、词典和语言模型作为独立的WFST。使用高度优化的FST库,如OpenFST,可以将WFSTs有效地融合到一个单一的搜索图中。各个WFST的构建描述如下。虽然是以英语为例,但同样的程序也适用于其他语言。
语法。语法WFST对语言/领域中可允许的单词序列进行编码。图4所示的WFST代表一个玩具语言模型,它可以生成两个句子 "你怎么样 "和 "它怎么样"。WFST的符号是单词,弧形权重是语言模型的概率。有了这个WFST表示,CTC解码原则上可以利用任何可以转换为WFST的语言模型。语言模型WFST表示为G。
弧的权重是给定前一个词时发出下一个词的概率。节点0是起始节点,双圈的节点是结束节点
词库。词库WFST编码了从词库单元序列到单词的映射。根据RNN所建模的标签,有两种情况需要考虑。如果标签是音素,词库就是一个标准的词典,就像我们在混合方法中通常使用的那样。如果标签是字符,则词库只包含单词的拼写。这两种情况的一个关键区别是,拼写词库可以很容易地扩展以包括任何词库外(Out of Vocabulary,OOV)的词汇。相比之下,音素词库的扩展就不那么简单了。它依赖于一些字形到音素的规则/模型,并有可能出现错误。将词库WFST表示为L。两种方法如图5所示。
对于拼写词典,还有一个复杂的问题需要处理。对于作为CTC标签的字符,我们通常会在每一对单词之间插入一个额外的空格字符,以模拟原始文本中的单词定界。在解码过程中,允许空格字符选择性地出现在一个词的开头和结尾。图6所示的WFST可以很容易地处理这个复杂的问题。
Token。第三个WFST组件将框架级别的CTC标签序列映射到一个词库单元(音素或字符)。对于一个词库单元,将其Token WFST设计为包含其在框架级别的所有可能的标签序列。因此,这个WFST允许出现空白标签∅,以及任何非空白标签的重复。Token WFST将所有这3个序列映射到一个单子词库单元 "A"。
搜索图。在汇编了三个单独的WFSTs之后,将它们汇编成一个综合搜索图。首先生成词典和语法的WFST组合。然后,在组合中执行两个特殊的WFST操作,即确定化和最小化,以压缩搜索空间,从而加快解码速度。生成的WFST LG语言图再与Token WFST组成,最后生成搜索图。总的操作如下式所示:
在对混合DNN模型进行解码时,需要使用状态先验来扩展DNN的状态后验。这些先验值通常是从训练数据的强制排列中估计出来的。在对CTC训练的模型进行解码时,采用类似的程序。具体来说,我们在训练集上运行最终的RNN模型,进行传播处理。挑选出具有最大后验值的标签作为框架级的排列,从中估计出标签的先验值。在此基础上,作者建议从训练数据中的标签序列来估计更稳健的标签预设。
当前 SOTA!平台收录 EeSen 共 2 个模型实现资源。
2、 FSMN
LSTM是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样仅有一种记忆叠加方式。但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。RNN与LSTM计算复杂度较高,很难应用于较大任务,如何在不使用循环前馈的基础上更有效的对数据序列构建长依赖?受信号处理理论启发,使用高阶有限冲激响应(FIR)滤波器可以很好地逼近任何无限冲激响应(IIR)滤波器,本文提出了前馈顺序记忆网络(feedforward sequential memory networks,FSMN),在不使用循环反馈的情况下对时间序列中的长期依赖性进行建模。FSMN是一个标准的全连接前馈神经网络,在其隐藏层中配备了一些可学习的记忆模块。记忆模块使用了一个 tapped-delay line结构,将长的上下文信息编码成一个固定大小的表示,作为短期记忆机制。
图7. 前馈顺序记忆网络(FSMN)及其抽头延迟记忆块的图示。(每个z-1块代表一个延迟或存储单元)
观察图17(a)可以发现,在隐藏层的旁边,FSMN挂了一个记忆模块Memory Block,记忆模块的作用与LSTM门结构类似,可以用来记住t时刻输入信息的相邻时刻序列的信息。FSMN使用一组可学习的系数将回溯期(lookback window)内的past context编码为一个固定大小的表示。结果表示被计算为所有先前N个时间实例的隐藏激活的加权和,在图17(b)中显示为一个tapped-delay的结构。
根据记忆模块编码方式的区别,FSMN又可以分为sFSMN和vFSMN,前者代表以标量系数编码,后者代表以向量系数编码。对于sFSMN和vFSMN,使用与上下文无关的系数,将长的周围环境编码为固定大小的表示法。前述简单的回看式FSMN,也就是说当下的记忆模块只关注了它之前的信息,如果还要关注未来的信息,实现上下文联通,也就是所谓的双向的FSMN。在这项工作中,也尝试使用依赖于上下文的系数,称之为基于注意力的FSMN。使用以下的注意力函数来计算与上下文有关的系数:
其中,N1和N2分别代表回看和前看的阶数。因此,(a_t)^l是一组与上下文有关的系数,相对于(h_t)^l,用于编码时间实例t的长周期上下文,如下所示
与sFSMN和vFSMN相同,将(h~_t)^l送入下一个隐藏层。
3、 CLDNN
卷积神经网络(CNN)和长短期记忆(LSTM)都已在各种语音识别任务中显示出对深度神经网络(DNN)的改进。CNN、LSTM和DNN在建模能力上是互补的,CNN擅长减少频率变化,LSTM擅长时间建模,而DNN适合将要素映射到更加可分离的空间。本文通过将CNN、LSTM和DNN组合成一个统一的架构来利用它们的互补性,提出了CLDNN(CONVOLUTIONAL, LONG SHORT-TERM MEMORY, FULLY CONNECTED DEEP NEURAL NETWORKS)。具体使用到的经典网络结构包括:
- LSTM(Long-Short-Term-Memory) ,处理与时间相关的数据;
- CNN(Convolutional Neural Network) ,将多个时间点的数据抽象提取特征,减少无效数据;
- DNN(Deep-Neural-Network) 将输入数据中的特征映射至更离散的空间,即将输入的数据变成神经网络中的各种参数。
如图8所示模型架构。CLDNN网络的输入数据包括:数据的基本单位为帧(x_t ),每帧都是一个含40维度的梅尔频谱,输入的数据是由多帧组合成的向量[x_t−l,..., x_t+r] ,其中,最左侧一帧即第一帧计为l,最后一帧计为r。
CLDNN的卷积结构具体为:
(1)CNN共使用两层卷积层,第一层的卷积核为(9,9),第二层的卷积核为(4,3),两层卷积层中包含1个池化核为3的池化层。由于卷积结构的结果数据量过大,CLDNN使用线性层将数据降维处理,将数据降维至每帧256个数据。
(2)LSTM每层包含832个单元,另有一个包含500个单元的Projection Layer作降维处理。time_step设为20,使用BPTT(backpropagation through time)方法训练。
(3)全连接层:在进行频率和时间建模后,将LSTM的输出传给几个全连接的DNN层。共两层全连接层,每层1024个神经元。
4、 highway LSTM
highwayLSTM是LSTM的变体,主要解决多层LSTM网络引起的梯度弥散问题。Highway翻译成中文就是”高速公路“,也就是说Highway LSTM提供了一条”高速公路“,让信息(细胞状态)可以在不同层之间畅通无阻的流通。通过在相邻层的记忆单元之间引入门控直接连接来扩展深度长短期记忆(DLSTM)循环神经网络。这些直接连接被称为highway连接,使不同层之间的信息流动不受阻碍,从而缓解了构建深度长短时记忆的梯度消失问题。进一步,作者介绍了延迟控制的双向LSTM(BLSTM),它可以在控制延迟的情况下利用整个历史信息。
通过上图,我们可以看出Highway LSTM增加了一个控制门,叫carry gate(上图中的(d_t)^(l+1) ),用来控制低层的细胞状态有多少信息可以传递给高层的细胞状态(这是一种空间上的捷径)。如果carry gate为1,那么就像是一条highway,低层的细胞状态就可以畅通无阻的流向高层
LSTM RNN最初是为了解决RNN中的梯度递减问题而提出的。它在时间t的记忆单元状态c_t和t-1的同一单元状态c_t-1之间引入了线性依赖关系。引入非线性门以控制信息流。网络运行遵循以下公式:
深度LSTM RNNs是由多层LSTM单元堆叠而成。具体来说,下层LSTM单元的输出(y_t)^l作为输入(x_t)^l+1被送入上层。每个LSTM层在时间上是很深的,因为它可以在时间上展开,成为一个前馈神经网络,其中每层共享相同的权重,但深度LSTM RNNs仍然大大超过了单层LSTM RNNs的表现。在经典的DLSTM RNNs中,不同层的单元之间的互动必须通过输出-输入连接。
本文提出的Highway LSTM(HLSTM)RNN如图9所示。它在下层l的存储单元(c_t)^l和上层l+1的存储单元(c_t)^l+1之间有一个直接的门控连接(红色块)。carry gate控制多少信息可以从下层细胞直接流向上层细胞。在时间t的l+1层的门控函数为
使用carry gate,一个HLSTM RNN在第(l+1)层计算单元状态
因此,根据carry gate的输出,highway连接可以在普通LSTM层之间平滑地改变其行为,或者简单地从上一层传递其单元记忆。不同层的单元之间的highway连接使得从一层的单元到另一层的影响更加直接,并且在训练较深的LSTM RNNs时可以缓解梯度消失的问题。
上面描述的单向LSTM RNNs只能利用过去的历史。然而,在语音识别中,未来的上下文也传递信息,应该利用它来进一步增强声学模型。双向RNN通过用两个独立的隐藏层处理两个方向的数据来利用过去和未来的上下文,因此可以提高语音识别结果。将HLSTM RNNs从单向扩展到双向。后向层遵循前向层使用的相同方程,只是t-1被t+1取代,以利用未来的帧,模型的运行时间为t=T到1。前向和后向层的输出被串联起来,形成下一层的输入。