摘要: 阿里开源语音识别模型DFSMN 在近期举行的云栖大会武汉峰会上,装有DFSMN语音识别模型的“AI收银员”在与真人店员的PK中,在嘈杂环境下准确识别了用户的语音点单,在短短49秒内点了34杯咖啡。此外,装备这一语音识别技术的自动售票机也已在上海地铁“上岗”。网络
在近期举行的云栖大会武汉峰会上,装有DFSMN语音识别模型的“AI收银员”在与真人店员的PK中,在嘈杂环境下准确识别了用户的语音点单,在短短49秒内点了34杯咖啡。此外,装备这一语音识别技术的自动售票机也已在上海地铁“上岗”。ide
著名语音识别专家,西北工业大学教授谢磊表示:“阿里这次开源的DFSMN模型,在语音识别准确率上的稳定提高是突破性的,是近年来深度学习在语音识别领域最具表明性的成果之一,对全球学术界和AI技术应用都有巨大影响。”工具
图:阿里在GitHub平台上开源了自主研发的DFSMN语音识别模型性能
语音识别技术一直都是人机交互技术的重要组成部分。有了语音识别技术,机器就能够像人类同样听懂说话,进而可以思考、理解和反馈。学习
近几年随着深度学习技术的使用,基于深度神经网络的语音识别系统性能得到了极大的提高,开始走向实用化。基于语音识别的语音输入、语音转写、语音检索和语音翻译等技术获得了普遍的应用。测试
目前主流的语音识别系统广泛采用基于深度神经网络和隐马尔可夫(Deep Neural Networks-Hidden Markov Model,DNN-HMM)的声学模型,其模型结构如图 1所示。声学模型的输入是传统的语音波形通过加窗、分帧,而后提取出来的频谱特征,如 PLP, MFCC 和 FBK等。而模型的输出通常采用不一样粒度的声学建模单元,例如单音素 (mono-phone)、单音素状态、绑定的音素状态 (tri-phonestate) 等。从输入到输出之间能够采用不一样的神经网络结构,将输入的声学特征映射获得不一样输出建模单元的后验几率,而后再结合HMM进行解码获得最终的识别结果。大数据
最先采用的网络结构是前馈全链接神经网路(Feedforward Fully-connected Neural Networks, FNN)。FNN实现固定输入到固定输出的一对一映射,其存在的缺陷是无法有效利用语音信号内在的长时相关性信息。一种改进的方案是采用基于长短时记忆单元(Long-Short Term Memory,LSTM)的循环神经网络(Recurrent Neural Networks,RNN)。LSTM-RNN经过隐层的循环反馈链接,能够将历史信息存储在隐层的节点中,从而能够有效地利用语音信号的长时相关性。优化
图 1. 基于DNN-HMM的语音识别系统框图编码
进一步地经过使用双向循环神经网络(BidirectionalRNN),能够有效地利用语音信号历史以及将来的信息,更有利于语音的声学建模。基于循环神经网络的语音声学模型相比于前馈全链接神经网络能够得到显著的性能提高。可是循环神经网络相比于前馈全链接神经网络模型更加复杂,每每包含更多的参数,这会致使模型的训练以及测试都须要更多的计算资源。spa
另外基于双向循环神经网络的语音声学模型,会面临很大的时延问题,对于实时的语音识别任务不适用。现有的一些改进的模型,例如,基于时延可控的双向长短时记忆单元(Latency Controlled LSTM,LCBLSTM )[1-2],以及前馈序列记忆神经网络(Feedforward SequentialMemory Networks,FSMN)[3-5]。去年咱们在工业界第一个上线了基于LCBLSTM的语音识别声学模型。配合阿里的大规模计算平台和大数据,采用多机多卡、16bit量化等训练和优化方法进行声学模型建模,取得了相比于FNN模型约17-24%的相对识别错误率降低。
FSMN是近期被提出的一种网络结构,经过在FNN的隐层添加一些可学习的记忆模块,从而能够有效地对语音的长时相关性进行建模。FSMN相比于LCBLSTM不只能够更加方便地控制时延,并且也能得到更好的性能,须要的计算资源也更少。可是标准的FSMN很难训练很是深的结构,会因为梯度消失问题致使训练效果很差。而深层结构的模型目前在不少领域被证实具备更强的建模能力。于是针对此咱们提出了一种改进的FSMN模型,称之为深层的FSMN(DeepFSMN, DFSMN)。进一步地咱们结合LFR(lowframe rate)技术构建了一种高效的实时语音识别声学模型,相比于去年咱们上线的LCBLSTM声学模型能够得到超过20%的相对性能提高,同时能够得到2-3倍的训练以及解码的加速,能够显著地减小咱们的系统实际应用时所须要的计算资源。
图 2. FSMN模型结构以及和RNN的对比
最先提出的FSMN的模型[3]结构如图 2(a)所示,其本质上是一个前馈全链接神经网络,经过在隐层旁添加一些记忆模块(memory block)来对周边的上下文信息进行建模,从而使得模型能够对时序信号的长时相关性进行建模。记忆模块采用如图 2(b)所示的抽头延迟结构将当前时刻以及以前 N 个时刻的隐层输出经过一组系数编码获得一个固定的表达。FSMN的提出是受到数字信号处理中滤波器设计理论的启发:任何无限响应冲击(Infinite Impulse Response, IIR)滤波器能够采用高阶的有限冲击响应(Finite Impulse Response, FIR)滤波器进行近似。从滤波器的角度出发,如图 2(c)所示的RNN模型的循环层就能够看做如图 2(d)的一阶IIR滤波器。而FSMN采用的采用如图 2(b)所示的记忆模块能够看做是一个高阶的FIR滤波器。从而FSMN也能够像RNN同样有效地对信号的长时相关性进行建模,同时因为FIR滤波器相比于IIR滤波器更加稳定,于是FSMN相比于RNN训练上会更加简单和稳定。
根据记忆模块编码系数的选择,能够分为:1)标量FSMN(sFSMN);2)矢量FSMN(vFSMN)。sFSMN 和 vFSMN顾名思义就是分别使用标量和矢量做为记忆模块的编码系数。sFSMN和vFSMN记忆模块的表达分别以下公式:
以上的FSMN只考虑了历史信息对当前时刻的影响,咱们能够称之为单向的FSMN。当咱们同时考虑历史信息以及将来信息对当前时刻的影响时,咱们能够将单向的FSMN进行扩展获得双向的FSMN。双向的sFSMN和vFSMN记忆模块的编码公式以下:
这里
和
分别表明回看(look-back)的阶数和向前看(look-ahead)的阶数。咱们能够经过增大阶数,也能够经过在多个隐层添加记忆模块来加强FSMN对长时相关性的建模能力。
图 3. cFSMN结构框图
FSMN相比于FNN,须要将记忆模块的输出做为下一个隐层的额外输入,这样就会引入额外的模型参数。隐层包含的节点越多,则引入的参数越多。研究[4]结合矩阵低秩分解(Low-rank matrix factorization)的思路,提出了一种改进的FSMN结构,称之为简洁的FSMN(CompactFSMN,cFSMN),是一个第l 个隐层包含记忆模块的cFSMN的结构框图。
对于cFSMN,经过在网络的隐层后添加一个低维度的线性投影层,而且将记忆模块添加在这些线性投影层上。进一步的,cFSMN对记忆模块的编码公式进行了一些改变,经过将当前时刻的输出显式地添加到记忆模块的表达中,从而只须要将记忆模块的表达做为下一层的输入。这样能够有效得减小模型的参数量,加快网络的训练。具体单向和双向的cFSMN记忆模块的公式表达分别以下:
如图 4是咱们进一步提出的Deep-FSMN(DFSMN)的网络结构框图,其中左边第一个方框表明输入层,右边最后一个方框表明输出层。咱们经过在cFSMN的记忆模块(红色框框表示)之间添加跳转链接(skip connection),从而使得低层记忆模块的输出会被直接累加到高层记忆模块里。这样在训练过程当中,高层记忆模块的梯度会直接赋值给低层的记忆模块,从而能够克服因为网络的深度形成的梯度消失问题,使得能够稳定地训练深层的网络。咱们对记忆模块的表达也进行了一些修改,经过借鉴扩张(dilation)卷积[6]的思路,在记忆模块中引入一些步幅(stride)因子,具体的计算公式以下:
其中
表示第
层记忆模块第t个时刻的输出。S1和S2分别表示历史和将来时刻的编码步幅因子,例如S1=2则表示对历史信息进行编码时每隔一个时刻取一个值做为输入。这样在相同的阶数的状况下能够看到更远的历史,从而能够更加有效的对长时相关性进行建模。
对于实时的语音识别系统咱们能够经过灵活的设置将来阶数来控制模型的时延,在极端状况下,当咱们将每一个记忆模块的将来阶数都设置为0,则咱们能够实现无时延的一个声学模型。对于一些任务,咱们能够忍受必定的时延,咱们能够设置小一些的将来阶数。
相比于以前的cFSMN,咱们提出的DFSMN优点在于,经过跳转链接能够训练很深的网络。对于原来的cFSMN,因为每一个隐层已经经过矩阵的低秩分解拆分红了两层的结构,这样对于一个包含4层cFSMN层以及两个DNN层的网络,总共包含的层数将达到13层,从而采用更多的cFSMN层,会使得层数更多而使得训练出现梯度消失问题,致使训练的不稳定性。咱们提出的DFSMN经过跳转链接避免了深层网络的梯度消失问题,使得训练深层的网络变得稳定。须要说明的是,这里的跳转链接不只能够加到相邻层之间,也能够加到不相邻层之间。跳转链接自己能够是线性变换,也能够是非线性变换。具体的实验咱们能够实现训练包含数十层的DFSMN网络,而且相比于cFSMN能够得到显著的性能提高。
从最初的FSMN到cFSMN不只能够有效地减小模型的参数,并且能够得到更好的性能[4]。进一步的在cFSMN的基础上,咱们提出的DFSMN,能够更加显著地提高模型的性能。以下表是在一个2000小时的英文任务上基于BLSTM,cFSMN,DFSMN的声学模型性能对比。
Model |
BLSTM |
cFSMN |
DFSMN |
WER% |
10.9 |
10.8 |
9.4 |
从上表中能够看到,在2000小时这样的任务上,DFSMN模型能够得到比BLSTM声学模型相对14%的错误率下降,显著提升了声学模型的性能。
图 5. LFR-DFSMN声学模型结构框图
目前的声学模型,输入的是每帧语音信号提取的声学特征,每帧语音的时长一般为10ms,对于每一个输入的语音帧信号会有相对应的一个输出目标。最近有研究提出一种低帧率(LowFrame Rate,LFR)[7]建模方案:经过将相邻时刻的语音帧进行绑定做为输入,去预测这些语音帧的目标输出获得的一个平均输出目标。具体实验中能够实现三帧(或更多帧)拼接而不损失模型的性能。从而能够将输入和输出减小到原来的三分之一甚至更多,能够极大地提高语音识别系统服务时声学得分的计算以及解码的效率。咱们结合LFR和以上提出的DFSMN,构建了如图 5的基于LFR-DFSMN的语音识别声学模型,通过多组实验咱们最终肯定了采用一个包含10层cFSMN层+2层DNN的DFSMN做为声学模型,输入输出则采用LFR,将帧率下降到原来的三分之一。识别结果和去年咱们上线的最好的LCBLSTM基线比较以下表所示。
CER% |
产品线A |
产品线B |
LFR-LCBLSTM |
18.92 |
10.21 |
LFR-DFSMN |
15.00(+20.72%) |
8.04(21.25%) |
经过结合LFR技术,咱们能够得到三倍的识别加速。从上表中能够看到,在实际工业规模应用上,LFR-DFSMN模型比LFR-LCBLSTM模型能够得到20%的错误率降低,展现了对大规模数据更好的建模特性。
实际的语音识别服务一般会面对很是复杂的语音数据,语音识别声学模型必定要尽量地覆盖各类可能的场景,包括各类对话、各类声道、各类噪音甚至各类口音,这就意味着海量的数据。而如何应用海量数据快速训练声学模型并上线服务,就直接关系到业务相应速度。
咱们利用阿里的MaxCompute计算平台和多机多卡并行训练工具,在使用8机16GPU卡、训练数据为5000小时的状况下,关于LFR-DFSMN声学模型和LFR-LCBLSTM的训练速度以下表:
处理一个epoch须要的时间 |
|
LFR-LCBLSTM |
10.8小时 |
LFR-DFSMN |
3.4小时 |
相比于基线LCBLSTM模型,每一个epoch DFSMN能够得到3倍的训练速度提高。在2万小时的数据量上训练LFR-DFSMN,模型收敛通常只须要3-4个epoch,所以在16GPU卡的状况下,咱们能够在2天左右完成2万小时数据量的LFR-DFSMN声学模型的训练。
设计更为实用化的语音识别系统,咱们不只须要尽量地提高系统的识别性能,并且须要考虑系统的实时性,这样才能给用户提供更好的体验。此外在实际应用中咱们还须要考虑服务成本,于是对于语音识别系统的功耗也有必定的要求。传统的FNN系统,须要使用拼帧技术,解码延迟一般在5-10帧,大约50-100ms。而去年上线的LCBLSTM系统,解决了BLSTM的整句延迟的问题,最终能够将延时控制在20帧左右,大约200ms。对于一些对延时有更高要求的线上任务,还能够在少许损失识别性能的状况下(0.2%-0.3%绝对值左右),将延迟控制在100ms,彻底能够知足各种任务的需求。LCBLSTM相比于最好的FNN能够得到超过20%的相对性能提高,可是相同CPU上识别速度变慢(即功耗高),这主要是由模型的复杂度致使。
咱们最新的LFR-DFSMN,经过LFR技术能够将识别速度加速3倍以上,进一步的DFSMN相比于LCBLSTM在模型复杂度上能够再下降3倍左右。以下表是咱们在一个测试集上统计的不一样的模型须要的识别时间,时间越短则表示咱们所须要的计算功耗越低:
模型 |
整个测试集识别所须要的时间 |
LCBLSTM |
956秒 |
DFSMN |
377秒 |
LFR-LCBLSTM |
339秒 |
LFR-DFSMN |
142秒 |
关于LFR-DFSMN的解码时延问题,咱们能够经过减少记忆模块滤波器向将来看的阶数来减少时延。具体实验中咱们验证了不一样的配置,当咱们将LFR-DFSMN的延时控制在5-10帧时,大体只损失相对3%的性能。
此外,相对于复杂的LFR-LCBLSTM模型,LFR-DFSMN模型具备模型精简的特色,虽然有10层DFSMN,但总体模型大小只有LFR-LCBLSTM模型的一半,模型大小压缩了50%。
本文做者:张仕良