论语音识别三大关键技术
李万鸿
语音识别已经成为人工智能应用的一个重点,通过语音控制设备简单方便,在各个领域兴起了研究应用的热潮。数据、算法及芯片是语音识别技术的3个关键,大量优质的数据、精准快速的算法和高性能语音识别芯片是提升语音识别的核心。语音是人工智能产品的主要入口,乃兵家必争之地也。相关算法研究日新月异,CNN RNN CLRNN HMM LACE等模型都尤其优势,将多种算法综合运用修改更佳。这里对语音识别的技术做个综述。
一、应用场景
目前语音识别在智能家居、智能车载、智能客服机器人方面有广泛的应用,未来将会深入到学习、生活、工作的各个环节。国内外许多大公司都在倾力研究此技术,并不断推出实际产品。比如科大讯飞的翻译器译呗,可实现汉语与各种语言之间的互译,效果不错。
百度借助自己的人工智能生态平台,推出了智能行车助手CoDriver。科大讯飞与奇瑞等汽车制造商合作,推出了飞鱼汽车助理,推进车联网进程。搜狗与四维图新合作推出了飞歌导航。云知声、思必驰在导航、平视显示器等车载应用方面推出了多款智能语控车载产品。出门问问则基于自己的问问魔镜进入到智能车载市场。
在语音识别的商业化落地中,需要内容、算法等各个方面的协同支撑,但是良好的用户体验是商业应用的第一要素,而识别算法是提升用户体验的核心因素。下文将从语音识别的算法发展路径、算法发展现状及前沿算法研究三个方面来探讨语音识别技术。
二、算法
对于语音识别系统而言,第一步要检测是否有语音输入,即,语音激活检测(VAD)。在低功耗设计中,相比于语音识别的其它部分,VAD采用always on的工作机制。当VAD检测到有语音输入之后,VAD便会唤醒后续的识别系统。识别系统总体流程如图2所示,主要包括特征提取、识别建模及模型训练、解码得到结果几个步骤。
语音识别系统
首先,我们知道声音实际上是一种波。常见的mp3等格式都是压缩格式,必须转成非压缩的纯波形文件来处理,比如Windows PCM文件,也就是俗称的wav文件。wav文件里存储的除了一个文件头以外,就是声音波形的一个个点了。
在开始语音识别之前,有时需要把首尾端的静音切除,降低对后续步骤造成的干扰。这个静音切除的操作一般称为VAD,需要用到信号处理的一些技术。
要对声音进行分析,需要对声音分帧,也就是把声音切开成一小段一小段,每小段称为一帧。分帧操作一般不是简单的切开,而是使用移动窗函数来实现,这里不详述。帧与帧之间一般是有交叠的,就像下图这样:
图中,每帧的长度为25毫秒,每两帧之间有25-10=15毫秒的交叠。我们称为以帧长25ms、帧移10ms分帧。
分帧后,语音就变成了很多小段。但波形在时域上几乎没有描述能力,因此必须将波形作变换。常见的一种变换方法是提取MFCC特征,根据人耳的生理特性,把每一帧波形变成一个多维向量,可以简单地理解为这个向量包含了这帧语音的内容信息。这个过程叫做声学特征提取。实际应用中,这一步有很多细节,声学特征也不止有MFCC这一种。
至此,声音就成了一个12行(假设声学特征是12维)、N列的一个矩阵,称之为观察序列,这里N为总帧数。观察序每一帧都用一个12维的向量表示,色块的颜色深浅表示向量值的大小。
接下来就要介绍怎样把这个矩阵变成文本了。首先要介绍两个概念:
1. 音素:单词的发音由音素构成。对英语,一种常用的音素集是卡内基梅隆大学的一套由39个音素构成的音素集,参见The CMU Pronouncing Dictionary。汉语一般直接用全部声母和韵母作为音素集,另外汉语识别还分有调无调,不详述。
2. 状态:这里理解成比音素更细致的语音单位就行啦。通常把一个音素划分成3个状态。
语音识别是怎么工作的呢?实际上一点都不神秘,无非是:
把帧识别成状态(难点)。
把状态组合成音素。
把音素组合成单词。
如下图所示:
图中,每个小竖条代表一帧,若干帧语音对应一个状态,每三个状态组合成一个音素,若干个音素组合成一个单词。也就是说,只要知道每帧语音对应哪个状态了,语音识别的结果也就出来了。
那每帧音素对应哪个状态呢?有个容易想到的办法,看某帧对应哪个状态的概率最大,那这帧就属于哪个状态。比如下面的示意图,这帧在状态S3上的条件概率最大,因此就猜这帧属于状态S3。
那这些用到的概率从哪里读取呢?有个叫“声学模型”的东西,里面存了一大堆参数,通过这些参数,就可以知道帧和状态对应的概率。获取这一大堆参数的方法叫做“训练”,需要使用巨大数量的语音数据。
但这样做有一个问题:每一帧都会得到一个状态号,最后整个语音就会得到一堆乱七八糟的状态号。假设语音有1000帧,每帧对应1个状态,每3个状态组合成一个音素,那么大概会组合成300个音素,但这段语音其实根本没有这么多音素。如果真这么做,得到的状态号可能根本无法组合成音素。实际上,相邻帧的状态应该大多数都是相同的才合理,因为每帧很短。
解决这个问题的常用方法就是使用隐马尔可夫模型(Hidden Markov Model,HMM)。这东西听起来好像很高深的样子,实际上用起来很简单:
第一步,构建一个状态网络。
第二步,从状态网络中寻找与声音最匹配的路径。
这样就把结果限制在预先设定的网络中,避免了刚才说到的问题,当然也带来一个局限,比如你设定的网络里只包含了“今天晴天”和“今天下雨”两个句子的状态路径,那么不管说些什么,识别出的结果必然是这两个句子中的一句。
那如果想识别任意文本呢?把这个网络搭得足够大,包含任意文本的路径就可以了。但这个网络越大,想要达到比较好的识别准确率就越难。所以要根据实际任务的需求,合理选择网络大小和结构。
搭建状态网络,是由单词级网络展开成音素网络,再展开成状态网络。语音识别过程其实就是在状态网络中搜索一条最佳路径,语音对应这条路径的概率最大,这称之为“解码”。路径搜索的算法是一种动态规划剪枝的算法,称之为Viterbi算法,用于寻找全局最优路径。
这里所说的累积概率,由三部分构成,分别是:
1. 观察概率:每帧和每个状态对应的概率
2. 转移概率:每个状态转移到自身或转移到下个状态的概率
3. 语言概率:根据语言统计规律得到的概率
其中,前两种概率从声学模型中获取,最后一种概率从语言模型中获取。语言模型是使用大量的文本训练出来的,可以利用某门语言本身的统计规律来帮助提升识别正确率。语言模型很重要,如果不使用语言模型,当状态网络较大时,识别出的结果基本是一团乱麻。这样基本上语音识别过程就完成了。
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、识别建模
语音识别本质上是音频序列到文字序列转化的过程,即在给定语音输入的情况下,找到概率最大的文字序列。基于贝叶斯原理,可以把语音识别问题分解为给定文字序列出现这条语音的条件概率以及出现该条文字序列的先验概率,对条件概率建模所得模型即为声学模型,对出现该条文字序列的先验概率建模所得模型是语言模型。
声音的三个主要的主要属性,即音量(响度)、音调、音色(也称音品),声音的音量(volume),即音频的强度和幅度;声音的音调,也称为音高(pitch),即音频的频率或每秒变化的次数;声音的音色(timbre),即音频泛音或谐波成分。每个人的发音都有其独特的音品,为此,在训练用户的语音识别时,需要提取用户的音品特征,对已经训练的基础模型进行调整,建立用户的声音特征模型,这样可以显著提升识别的成功率和速度,在复杂语音背景下增强抗干扰能力。这是一个值得研究的新思路。
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算法。原理如下:
假设词表大小为3,内容为a,b,c。beam size是2
decoder解码的时候:
1:生成第1个词的时候,选择概率最大的2个词,假设为a,c,那么当前序列就是a,c
2:生成第2个词的时候,我们将当前序列a和c,分别与词表中的所有词进行组合,得到新的6个序列aa ab ac ca cb cc,然后从其中选择2个得分最高的,作为当前序列,假如为aa cb
3:后面会不断重复这个过程,直到遇到结束符为止。最终输出2个得分最高的序列。
6、远场复杂环境下解决方案
目前阶段,在近场安静环境下,语音识别能够取得非常理想的识别效果,但是在高噪声、多人说话、强口音等环境,特别是远场环境下,语音识别还有诸多问题需要解决。语音模型自适应、语音增强与分离、识别模型优化等是常用的可选解决方案。
6.1 语音增强与分离
远场环境下,语音输入信号衰减比较严重,为了对语音信号增强,常采用麦克风阵列的波束形成技术,比如,Google Home采用双麦的设计方案,亚马逊Echo采用6+1的麦克风阵列设计方案。近年,深度学习方法被应用到语音增强与分离中,核心思想是把语音增强与分离转化为一个监督学习问题,即预测输入声音源的问题。有研究使用DNN替代波束形成,实现语音增强,并在一定场景下取得了比较理想的效果。但是在背景噪声很大的环境中,该方法性能还有较大提升空间。
在多人说话的情况下,如果不对输入信号做分离处理,而进行语音识别的话,识别效果会很差。对于该问题,在多个说话人距离较远的情况下,波束形成是一个比较好的解决方案,但是当多个说话人距离很近的时候,波束形成的语音分离效果也很差。为了避开波束形成所带来的场景分类问题,传统的方法多是在单通道下尝试解决该问题,常用算法有computational auditory scene analysis、非负矩阵分解、deep clustering 等,但是这些方法只有当噪声信号(除声源外的其他信号)与声音源信号有明显不同的特征时,这些技术才取得比较好的效果。其它情况下,这些方法在语音分离中取得的效果一般。2016年,俞栋博士提出了一种新的深度学习训练准则-- permutation invariant training,巧妙地解决了该问题,并取得了不错的效果。采用综合考虑多参数的混合模型具有更好的精度和速度。prediction-adaptation-correction(PAC)模型可以把一些识别上的行为特征比如预测、自适应、和纠偏直接建在模型里。又比如,我们在书中提到的noise-aware和speaker-aware自适应方法可以通过网络结构直接实现自适应建模。再比如,PIT模型可以直接由深度学习模型分离语音,而基于CTC和RNN生成模型的识别方法更是直接由深度学习模型产生识别结果。基于注意的模型使用语音编码到语言文字输出解码的方式,效果好,但有不能单调地从左到右对齐和收敛缓慢的缺点。通过将 CTC 目标函数用作辅助成本函数,注意训练和 CTC 训练以一种多任务学习的方式结合到了一起。这样一种训练策略极大地改善了基于注意的模型的收敛,并且缓解了对齐问题。
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。
图3.来源:RIT的Shaaban教授的计算机体系结构课程
另外,基于实时性、低功耗、高计算力的需求,使用专属语音识别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处理单元,兼容多麦克风阵列。
过去几十年,尤其是最近几年,语音识别技术不断取得突破。但是,在大多数场景下,语音识别远没有达到完美。解决远场复杂环境下的语音识别问题仍然是当前研究热点。另外,通常情况下,语音识别都是针对特定的任务,训练专用的模型,因而,模型的可移植性比较差。
人类在对话过程中,可以很高效的利用先验知识,但是目前的语音识别系统都还无法有效利用先验知识。因此,语音识别还有很多问题待解决。令人兴奋的是,随着高质量数据的不断积累、技术的不断突破及硬件平台算力的提升,语音识别正在向我们期待的方向快速发展。
人工智能具有自学习自适应功能,可以充分利用这个特点,从无到有地打造语音识别平台,让机器在不断的训练和工作中持续学习提升,变得越来越强大,圆满完美完成语音识别服务。推而广之,人脸识别、图像、视频识别、文字理解等各个领域都可以采用这个方法取得突破,能听能说,能看能理解和思考,并设制造出和人一样的机器人,完成人类各项工作,实现人类的大解放。
要充分运用人工智能、机器学习及云计算和芯片的新技术,全面提升各种语言的语音识别的速度与精度,让设备听懂人的话,实现自然交流和简单灵活的控制,开辟一个会听话的人工智能新世界。建立混合模型提高质量,人工智能的模型实现迁移学习,节省成本,提高效率,相信很快就会迎来一个神奇美好的新世界!