从应用、算法、芯片角度了解语音识别技术
扫描二维码
随时随地手机看文章
基于大量数据的积累、深度神经网络模型的发展及算法的迭代优化,近年,语音识别准确率取得了不断的提升。2016年10月,微软宣布英语语音识别词错率下降到5.9%,从而能够媲美人类。现阶段,在理想的环境下,多家公司的语音识别系统已经越过了实用的门槛,并在各个领域得到了广泛的应用。
人工智能产业链由基础层、技术层与应用层构成。同样,智能语音识别亦由这三层组成,本文从语音识别的商业化应用出发,并探讨驱动语音识别发展的算法及硬件计算能力,三位一体浅析语音识别现状、发展趋势及仍然面临的难点。
一、应用智能语音技术是人工智能应用最成熟的技术之一,并拥有交互的自然性,因而,其具有巨大的市场空间。中国语音产业联盟《2015中国智能语音产业发展白皮书》数据显示,2017年全球智能语音产业规模将首次超过百亿美元,达到105亿美元。中国2017年智能语音产业规模也将首次突破百亿元,五年复合增长率超过60%。
科技巨头都在打造自己的智能语音生态系统,国外有IBM、微软、Google,国内有百度、科大讯飞等。
IBM、微软、百度等公司在语音识别方面,使用组合模型,不断提升语音识别性能。微软基于6个不同的深度神经网络构成的声学模型以及4个不同的深度神经网络构成的语言模型,取得了超越人类的识别准确率。科大讯飞则基于深度全序列卷积神经网络语音识别框架,取得了实用级的识别性能。云知声、捷通华声、思必驰等智能语音创业公司亦在不断打磨自己的识别引擎,并能够把自己的技术落地到产业中。
在巨头和创新者的推动下,语音识别逐渐在智能家居、智能车载、语音助手、机器人等领域取得迅猛发展。
1、智能家居在智能家居,尤其是智能音箱市场,亚马逊与Google处于行业统治地位,并各具特色。
亚马逊的Echo已经卖出近千万台,引爆了在线智能音箱市场。相比于传统的音箱,Echo具有远程唤醒播放音乐、联网查询咨询信息、智能控制家电等功能。但是在智能问答方面,Echo表现一般,Google以此为突破口,发布Google Home,从亚马逊手中抢夺23.8%的智能音箱市场份额。2017年9月,亚马逊发布了多款Echo二代产品,相比一代在音质上有明显的提升,且Echo Plus具备更加强大的家居控制功能,能够自动搜索到附件的智能家居设备,并进行控制。
在我国的语控电视、语控空调、语控照明等智能语控家电市场,科大讯飞、云知声、启英泰伦做了深入布局。
科大讯飞联合京东发布叮咚音箱,并于2016年推出讯飞电视助理,打造智能家居领域的入口级应用。云知声提供物联网人工智能技术,通过与格力等公司合作,把自己的语音识别技术集成到终端家电产品中,另外,云知声发布的‘Pandora’语音中控方案,能够大幅缩短产品智能化周期。启英泰伦结合自己强大的硬件(终端智能语音识别芯片CI1006)及算法(深度学习语音识别引擎)优势,提供离线与在线的整套语音识别方案,并在物联网各个领域有广泛的布局。
2、智能车载随着智能网联的发展,预计未来车联网在车载端的渗透率将超过50%。但是基于安全性等因素考虑,车载端智能与手机端智能有极大的差别,从手机端简单拷贝的方式并不适合车载端使用场景。语音基于其交互的自然性,被认为是未来人与车交互的主要入口路径。
百度借助自己的人工智能生态平台,推出了智能行车助手CoDriver。科大讯飞与奇瑞等汽车制造商合作,推出了飞鱼汽车助理,推进车联网进程。搜狗与四维图新合作推出了飞歌导航。云知声、思必驰在导航、平视显示器等车载应用方面推出了多款智能语控车载产品。出门问问则基于自己的问问魔镜进入到智能车载市场。
在语音识别的商业化落地中,需要内容、算法等各个方面的协同支撑,但是良好的用户体验是商业应用的第一要素,而识别算法是提升用户体验的核心因素。下文将从语音识别的算法发展路径、算法发展现状及前沿算法研究三个方面来探讨语音识别技术。
二、算法对于语音识别系统而言,第一步要检测是否有语音输入,即,语音激活检测(VAD)。在低功耗设计中,相比于语音识别的其它部分,VAD采用always on的工作机制。当VAD检测到有语音输入之后,VAD便会唤醒后续的识别系统。识别系统总体流程如图2所示,主要包括特征提取、识别建模及模型训练、解码得到结果几个步骤。
图2.语音识别系统
1、VAD(语音激活检测)用于判断什么时候有语音输入,什么时候是静音状态。语音识别后续的操作都是在VAD截取出来的有效片段上进行,从而能够减小语音识别系统噪声误识别率及系统功耗。在近场环境下,由于语音信号衰减有限,信噪比(SNR)比较高,只需要简单的方式(比如过零率、信号能量)来做激活检测。但是在远场环境中,由于语音信号传输距离比较远,衰减比较严重,因而导致麦克风采集数据的SNR很低,这种情况下,简单的激活检测方法效果很差。使用深度神经网络(DNN)做激活检测是基于深度学习的语音识别系统中常用的方法(在该方法下,语音激活检测即为一个分类问题)。在MIT的智能语音识别芯片中使用了精简版的DNN来做VAD,该方法在噪声比较大的情况下也具有很好的性能。但是更复杂的远场环境中,VAD仍然是未来研究的重点。
2、特征提取梅尔频率倒谱系数(MFCC)是最为常用的语音特征,梅尔频率是基于人耳听觉特征提取出来的。MFCC主要由预加重、分帧、加窗、快速傅里叶变换(FFT)、梅尔滤波器组、离散余弦变换几部分组成,其中FFT与梅尔滤波器组是MFCC最重要的部分。但是近年研究表明,对于语音识别而言,梅尔滤波器组不一定是最优方案。受限的玻尔兹曼机(RBM)、卷积神经网络(CNN)、CNN-LSTM-DNN(CLDNN)等深度神经网络模型作为一个直接学习滤波器代替梅尔滤波器组被用于自动学习的语音特征提取中,并取得良好的效果。
目前已经证明,在特征提取方面,CLDNN比对数梅尔滤波器组有明显的性能优势。基于CLDNN的特征提取过程可以总结为:在时间轴上的卷积、pooling、pooled信号进入到CLDNN中三个步骤。
远场语音识别领域,由于存在强噪声、回响等问题,麦克风阵列波束成形仍然是主导方法。
另外,现阶段,基于深度学习的波束成形方法在自动特征提取方面亦取得了众多研究成果。
3、识别建模语音识别本质上是音频序列到文字序列转化的过程,即在给定语音输入的情况下,找到概率最大的文字序列。基于贝叶斯原理,可以把语音识别问题分解为给定文字序列出现这条语音的条件概率以及出现该条文字序列的先验概率,对条件概率建模所得模型即为声学模型,对出现该条文字序列的先验概率建模所得模型是语言模型。
3.1 声学模型
声学模型是把语音转化为声学表示的输出,即找到给定的语音源于某个声学符号的概率。对于声学符号,最直接的表达方式是词组,但是在训练数据量不充分的情况下,很难得到一个好的模型。词组是由多个音素的连续发音构成,另外,音素不但有清晰的定义而且数量有限。因而,在语音识别中,通常把声学模型转换成了一个语音序列到发音序列(音素)的模型和一个发音序列到输出文字序列的字典。
需要注意的是,由于人类发声器官运动的连续性,以及某些语言中特定的拼读习惯,会导致音素的发音受到前后音素的影响。为了对不同语境的音素加以区分,通常使用能够考虑前后各一个音素的三音子作为建模单元。
另外,在声学模型中,可以把三音子分解为更小的颗粒—状态,通常一个三音子对应3个状态,但是这会引起建模参数的指数增长,常用的解决方案是使用决策树先对这些三音子模型进行聚类,然后使用聚类的结果作为分类目标。
至此,语音识别有了最终的分类目标—状态。最常用的声学建模方式是隐马尔科夫模型(HMM)。在HMM下,状态是隐变量,语音是观测值,状态之间的跳转符合马尔科夫假设。其中,状态转移概率密度多采用几何分布建模,而拟合隐变量到观测值的观测概率的模型常用高斯混合模型(GMM)。基于深度学习的发展,深度神经网络(DNN)、卷积神经网络(CNN)、循环神经网络(RNN)等模型被应用到观测概率的建模中,并取得了非常好的效果。下文给出各个模型的原理、所解决的问题及各自局限性,且给出了由模型的局限性而引起建模方式发展的脉络。
1)高斯混合模型(GMM)
观测概率密度函数由高斯混合模型建模,训练中,不断迭代优化,以求取GMM中的加权系数及各个高斯函数的均值与方差。GMM模型训练速度较快,且GMM声学模型参数量小,可以容易地嵌入到终端设备中。在很长一段时间内,GMM-HMM混合模型都是表现最优秀的语音识别模型。但是GMM不能利用语境信息,其建模能力有限。
2)深度神经网络(DNN)
最早用于声学模型建模的神经网络,DNN解决了基于高斯混合模型进行数据表示的低效问题。语音识别中,DNN-HMM混合模型大幅度的提升了识别率。目前阶段,DNN-HMM基于其相对有限的训练成本及高识别率,仍然是特定的语音识别工业领域常用的声学模型。需要注意的是,基于建模方式的约束(模型输入特征长度的一致性需求),DNN模型使用的是固定长度的滑动窗来提取特征。
3)循环神经网络(RNN)/卷积神经网络(CNN)模型
对于不同的音素与语速,利用语境信息最优的特征窗长度是不同的。能够有效利用可变长度语境信息的RNN与CNN在语音识别中能够取得更好的识别性能。因而,在语速鲁棒性方面,CNN/RNN比DNN表现的更好。
在使用RNN建模方面,用于语音识别建模的模型有:多隐层的长短期记忆网络(LSTM)、highway LSTM、ResidualLSTM、双向LSTM、时延控制的双向LSTM。
LSTM,基于门控电路设计,其能够利用长短时信息,在语音识别中取得了非常好的性能。另外,可以通过增加层数进一步提升识别性能,但是简单地增加LSTM的层数会引起训练困难及梯度消失问题。
Highway LSTM,在LSTM相邻层的记忆单元间添加一个门控的直接链路,为信息在不同层间流动提供一个直接且不衰减的路径,从而解决梯度消失问题
Residual LSTM,在LSTM层间提供一个捷径,亦能解决梯度消失问题。
双向LSTM,能够利用过去及未来的语境信息,因而其识别性能比单向的LSTM好,但是由于双向LSTM利用了未来的信息,因而基于双向LSTM建模的语音识别系统需要观察完整的一段话之后才能识别,从而不适用于实时语音识别系统。
时延控制的双向LSTM,通过调整双向LSTM的反向LSTM,实现了性能与实时性的一个折中建模方案,能够应用于实时的语音识别系统。
CNN建模方面,包括时延神经网络(TDNN)、CNN-DNN、CNN-LSTM-DNN(CLDNN)、CNN-DNN-LSTM(CDL)、深度CNN、逐层语境扩展和注意(LACE)CNN、dilated CNN。
TDNN,最早被用于语音识别的CNN建模方式,TDNN 会沿频率轴和时间轴同时进行卷积,因此能够利用可变长度的语境信息。TDNN用于语音识别分为两种情况,第一种情况下:只有TDNN,很难用于大词汇量连续性语音识别(LVCSR),原因在于可变长度的表述(utterance)与可变长度的语境信息是两回事,在LVCSR中需要处理可变长度表述问题,而TDNN只能处理可变长度语境信息;第二种情况:TDNN-HMM 混合模型,由于HMM能够处理可变长度表述问题,因而该模型能够有效地处理LVCSR问题。
CNN-DNN,在DNN前增加一到两层的卷积层,以提升对不同说话人的可变长度声道(vocal tract)问题的鲁棒性,对比于单纯DNN,CNN-DNN性能有一定幅度(5%)的提升
CLDNN及CDL,在这两个模型中,CNN只处理频率轴的变化,LSTM用于利用可变长度语境信息。
深度CNN,这里的“深度”是指一百层以上。语谱图可以被看作是带有特定模式的图像,通过使用比较小的卷积核以及更多的层,来利用时间及频率轴上长范围的相关信息,深度CNN的建模性能与双向LSTM性能相当,但是深度CNN没有时延问题。在控制计算成本的情况下,深度CNN能够很好的应用于实时系统。
逐层语境扩展和注意(LACE)CNN及dilated CNN,深度CNN的计算量比较大,因而提出了能够减小计算量的 LACE CNN与dilated CNN,其把整个话语看作单张输入图,因而可以复用中间结果,另外,可以通过设计LACE CNN及dilated CNN网络每一层的步长,使其能够覆盖整个核,来降低计算成本。
语音识别的应用环境常常比较复杂,选择能够应对各种情况的模型建模声学模型是工业界及学术界常用的建模方式。但是各个单一模型都有局限性。HMM能够处理可变长度的表述,CNN能够处理可变声道,RNN/CNN能够处理可变语境信息。声学模型建模中,混合模型由于能够结合各个模型的优势,是目前声学建模的主流方式。
3.2 语言模型
语音识别中,最常见的语言模型是N-Gram。近年,深度神经网络的建模方式也被应用到语言模型中,比如基于CNN及RNN的语言模型。
4、端到端的语音识别系统在DNN-HMM或者CNN/RNN-HMM模型中,DNN/CNN/RNN与HMM是分开优化的,但是语音识别本质上是一个序列识别问题,如果模型中的所有组件都能够联合优化,很可能会获取更好的识别准确度,这一点从语音识别的数学表达式也可以看出(利用贝叶斯准则变化之后的表达式),因而端到端的处理方式亦被引入到语音识别系统中。
4.1 CTC准则
其核心思想是引入空白标签,然后基于前向后向算法做序列到序列的映射。CTC准则可分为character-based CTC、other output units-based CTC、word-based CTC,由于CTC准则是直接预测字符、单词等,而不是预测音素,因而其能够剔除语音识别中的字典等专家知识。由于在非word-based CTC中,仍然需要语言模型及解码器。因而,character-basedCTC与other output units-based CTC是非纯粹的端到端的语音识别系统。相反,word-based CTC模型是纯粹的端到端语音识别系统。
基于word-based CTC准则,使用10万个词作为输出目标且使用 12.5 万小时训练样本得到的语音序列到单词序列的模型,能够超越基于音素单元的模型。但是word-based CTC模型有训练困难及收敛慢的问题。
4.2 AttenTIon-based模型
相比于CTC准则,AttenTIon-based模型不需要有帧间独立性假设,这也是AttenTIon-based模型的一大优势,因而AttenTIon-based模型可能能够取得更好的识别性能。但是相比于CTC准则,Attention-based模型训练更加困难,且有不能单调地从左到右对齐及收敛更慢的缺点。通过将 CTC 目标函数用作辅助代价函数,Attention训练和 CTC 训练以一种多任务学习的方式结合到了一起。这种训练策略能够很大程度上改善Attention-based模型的收敛问题,并且缓解了对齐问题。
语音识别的发展过程中,深度学习起到了关键的作用。声学模型遵循从 DNN 到 LSTM再到端到端建模的发展路径。深度学习最大的优势之一是特征表征。在有噪声、回响等情况下,深度学习可以把噪声、回响看为新的特征,并通过对有噪声、回响数据的学习,达到比较理想的识别性能。目前阶段,端到端的建模方式是声学模型建模的重点研究方向,但是相比于其它的建模方式,其还没有取得明显的性能优势。如何在端到端建模的基础上,提升训练速度及性能,并解决收敛问题是声学模型的重要研究方向。
5、解码基于训练好的声学模型,并结合词典、语言模型,对输入的语音帧序列识别的过程即为解码的过程。传统的解码是将声学模型、词典以及语言模型编译成一个网络。解码就是在这个动态网络空间中,基于最大后验概率,选择一条或多条最优路径作为识别结果(最优的输出字符序列)。搜索常用的方法是Viterbi算法。对于端到端的语音识别系统,最简单的解码方法是beam search算法。
6、远场复杂环境下解决方案目前阶段,在近场安静环境下,语音识别能够取得非常理想的识别效果,但是在高噪声、多人说话、强口音等环境,特别是远场环境下,语音识别还有诸多问题需要解决。语音模型自适应、语音增强与分离、识别模型优化等是常用的可选解决方案。
6.1 语音增强与分离
远场环境下,语音输入信号衰减比较严重,为了对语音信号增强,常采用麦克风阵列的波束形成技术,比如,Google Home采用双麦的设计方案,亚马逊Echo采用6+1的麦克风阵列设计方案。近年,深度学习方法被应用到语音增强与分离中,核心思想是把语音增强与分离转化为一个监督学习问题,即预测输入声音源的问题。有研究使用DNN替代波束形成,实现语音增强,并在一定场景下取得了比较理想的效果。但是在背景噪声很大的环境中,该方法性能还有较大提升空间。
在多人说话的情况下,如果不对输入信号做分离处理,而进行语音识别的话,识别效果会很差。对于该问题,在多个说话人距离较远的情况下,波束形成是一个比较好的解决方案,但是当多个说话人距离很近的时候,波束形成的语音分离效果也很差。为了避开波束形成所带来的场景分类问题,传统的方法多是在单通道下尝试解决该问题,常用算法有computational auditory scene analysis、非负矩阵分解、deep clustering 等,但是这些方法只有当噪声信号(除声源外的其他信号)与声音源信号有明显不同的特征时,这些技术才取得比较好的效果。其它情况下,这些方法在语音分离中取得的效果一般。2016年,俞栋博士提出了一种新的深度学习训练准则-- permutation invariant training,巧妙地解决了该问题,并取得了不错的效果。
6.2 语音模型自适应
大量且丰富(能够提供更多信息)的数据集是提升模型泛化能力的最直接简单的方法;
基于成本及训练时间的考虑,一般情况下只使用有限的训练数据。此时,在模型训练中加入Kullback-Leiblerdivergence正则项是解决模型自适应问题非常有效的方式;
除了加入正则项外,使用非常少的参数来表征说话者特征是另一种自适应方式,其包括:奇异值分解瓶颈自适应,把满秩矩阵分解为两个低秩矩阵,减小训练参数;子空间法,子空间法又包括:
1. 在输入空间及深度网络的各个层中加入i-vector、扬声器(speaker)编码、噪声估计等辅助特征;
2. 聚类自适应训练(CAT);
3. 隐层分解(FHL),相比于CAT,FHL只需要少量的训练数据,原因在于FHL的基是秩为1的矩阵,而CAT的基是满秩矩阵,在基数量一样的情况下,CAT需要更多的训练数据。
实时性是语音识别应用中关注度很高的问题之一,实时性直接影响用户的体验感,提高语音识别的实时性可以通过降低运算时间成本与提升识别硬件计算能力两方面完成。
7、降低运算时间成本SVD,基于奇异值分解的数学原理,把满秩矩阵分解为两个低秩矩阵,减小深度模型的参数,且能够不降低模型识别性能;
压缩模型,使用向量量化或者极低比特量化算法;
改变模型结构,主要针对LSTM,在LSTM中增加一个线性映射层,降低原有LSTM的输出维度,从而降低运算时间成本;
使用跨帧的相关性来降低评估深度网络分数的频率,对于DNN或CNN而言,这可以通过使用跳帧策略完成,即每隔几帧才计算一次声学分数,并在解码时将该分数复制到没有评估声学分数的帧 。
另外,提升识别阶段硬件的运算能力,开发专用的语音识别芯片对增强语音识别的实时性意义重大,下文将会在这方面展开讨论。
三、芯片不断积累的高质量大数据与深度学习算法是语音识别性能能够不断提升的关键。基础层的核心处理芯片是支持海量训练数据、复杂的深度网络建模方式以及实时推断的关键要素。语音识别包括训练与识别(给定训练好的模型,对输入语音进行识别)两部分。
在训练阶段,由于数据量及计算量巨大,传统的CPU或者单一处理器几乎无法单独地完成一个模型训练过程(初始阶段,谷歌大脑语音识别项目是基于16000个CPU,用了75天,完成一个有156M参数的深度神经网络模型训练工作)。原因在于CPU芯片架构中只有少量的逻辑运算单元,且指令执行是一条接一条的串行过程,其算力不足。研发具有高计算能力的芯片成为语音识别乃至整个人工智能硬件的发展趋势。
与CPU不同的是,GPU具有大量的计算单元,因而特别适合大规模并行计算。另外,FPGA、TPU、ASIC这些延续传统架构的芯片亦在大规模并行计算中得到广泛的应用。需要注意的是,从本质上讲,这些芯片都是计算性能与灵活性/通用性trade-off的结果,即,如图3所示。CPU,GPU是通用处理器,DSP归为ASP,TPU是ASIC这一类,FPGA则是一种Configurable Hardware。
另外,基于实时性、低功耗、高计算力的需求,使用专属语音识别AI芯片处理识别阶段大量的矩阵运算,进行运算加速是今后终端语音识别芯片市场的主流方向。
1、云端场景由于计算量、训练数据量极大,且需要大量的并行运算,目前语音识别的模型训练部分基本都放在云端进行。在云端训练中,英伟达的GPU占主导市场,多GPU并行架构是终端训练常用的基础架构方案。另外,Google在自己的人工智能生态中,使用TPU做训练与识别。
目前阶段,语音识别公司的识别部分也大多放在云端,比如Google home、亚马逊Echo,国内的科大讯飞、云知声等。在云端识别中,虽然也有使用GPU,但是GPU并不是最优方案,更多的是利用CPU、GPU、FPGA各自优势,采用异构计算方案(CPU+GPU+FPGA/ASIC)。
2、终端场景在智能家居等行业应用中,对实时性、稳定性及隐私性有极高的要求。出于对云端数据处理能力、网络延迟及数据安全性的考虑,把计算下放到终端硬件中的边缘计算得到了快速的发展。终端离线的语音识别即是一种基于边缘计算的边缘智能,我们认为离线与在线是语音识别共存的发展路线。在终端离线识别中,需要把训练好的模型存储到芯片。给定语音输入时,引擎会调用模型,完成识别。终端语音识别两个关键因素是实时性与成本,其中实时性影响用户体验,成本影响语音识别应用范围。
由于深度神经网络在语音识别中取得明显的性能优势,其是目前主流的语音识别建模方式。但是神经网络的模型参数量一般非常大,且识别过程中有大量的矩阵计算,常用的DSP或者CPU处理该问题时需要大量的时间,从而无法满足语音识别的实时性需求。GPU、FPGA的价格又是阻碍其在终端语音识别中大规模应用的主要障碍。考虑到终端应用中,场景相对比较固定,且需要很高的计算性能,研发语音识别专属芯片是终端语音识别硬件发展趋势。
启英泰伦(ChipIntelli):2015年11月在成都成立。2016年6月推出了全球首款基于人工智能的语音识别芯片CI1006,该芯片集成了神经网络加速硬件,可实现单芯片、本地离线、大词汇量识别,且识别率明显高于传统终端语音识别方案。另外,启英泰伦能够提供廉价的单麦远场语音识别模组,其实际识别效果能够媲美使用了科胜讯降噪模块的双麦模组,大幅度降低远场语音识别模组成本。启英泰伦在终端语音识别专用芯片发展上取得了明显的技术及先发优势。
MIT项目:MIT黑科技,即,MIT在ISSCC2017上发表的paper里的芯片,该芯片能够支持DNN运算架构,进行高性能的数据并行计算,可以实现单芯片离线识别上千单词。
云知声:云知声致力于打造“云端芯”语音生态服务系统,其刚获取3亿人民币的投资,将把部分资金投入到终端语音识别芯片“UniOne”的研发中,据报道,该芯片将会内置DNN处理单元,兼容多麦克风阵列。
过去几十年,尤其是最近几年,语音识别技术不断取得突破。但是,在大多数场景下,语音识别远没有达到完美。解决远场复杂环境下的语音识别问题仍然是当前研究热点。另外,通常情况下,语音识别都是针对特定的任务,训练专用的模型,因而,模型的可移植性比较差。
人类在对话过程中,可以很高效的利用先验知识,但是目前的语音识别系统都还无法有效利用先验知识。因此,语音识别还有很多问题待解决。令人兴奋的是,随着高质量数据的不断积累、技术的不断突破及硬件平台算力的提升,语音识别正在向我们期待的方向快速发展。