欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
本文由 腾讯云AI中心发表于 云+社区专栏
我今天演讲主要分四个部分,第一个是分享语音识别概述,然后是深度神经网络的基础;接下来就是深度学习在语音识别声学模型上面的应用,最后要分享的是语音识别难点以及未来的发展方向。
首先简单介绍一下语音识别,它主要是个怎么样的过程呢?语音识别最简单的就是语音变成文字,这也是计算机发明以来人类一直追求的想要机器识别出来人说了什么话,或者更进一步机器理解人到底说了什么内容?但是语音识别这项技术,10年以前没有得到大规模的商业应用,为什么呢?因为10年前语音识别的效果不太好,识别准确率只有70%到80%。10个字识别了7、8个字,看起来还可以,但真正用到应用上时,这个准确率就远远不够了。
10年前我们对产品的应用,并不是像现在手机上这么多的应用,我们操作更多的是在电脑上,这种情况下,用鼠标和键盘的操作方式就会更加准确,更加方便。但是现在有了APP,比如说在车上,在很多产品上用鼠标或者用键盘就会变得不太合适,因此就产生了需要用语音去控制的情况。
今年来,为什么准确率能够得到大幅度的提升?我自己归纳有三个方面的原因:
第一是互联网的发展,为什么互联网的发展让语音识别技术的准确率能够有很大的提升?因为互联网的发展让语音能够在电脑上得到分享,让大量的语音数据存储起来,2000几年的时候语音识别技术,可能只有几百个小时的语音识别数据,那个时候觉得是很大的数据,现在我们做语音识别技术,都需要几万个小时才能做的比较好。
另外一个是硬件的发展也就是GPU/CPU硬件的发展,计算速度相比几年前高了几十个量级,更加突出的是GPU的应用,特别是在深度需要方面的应用。CPU一个指令做一个加法做一个乘法,但是GPU做1千维的,一次的加法GPU一个指令就完成了。这三者结合让语音识别的准确率得到很高的提升。
再讲一下语音识别系统基本的识别过程到底是什么样子?首先我们来看一下在进行语音识别的时候,我们先想象一下人自己,我们到底是怎么样识别一个语音变成文字的呢?比如说我们现在是一个小学生,刚刚学习中文不久,有人说了一句话,说“马化腾”,识别出来几个字,首先听到是一个音波,比如说马化腾,把它识别成为拼音,马就是ma,化就是hua,teng,拿到拼音的时候不知道到底是哪几个字,然后查一下新华字典,对应的麻、马,我从拼音可以变成汉字了,汉字怎么变成一句话和一个词呢?我就看了一下,我觉得马化腾这几个字出现概率比较高,是我们经常可以看到的,说到这句话的时候,马化腾,而不是后面的麻花疼。
我们得到发音以后,通过语言模型把音速通过一定的干预变成识别结果,变成字、词,或者是句。特征提取这部分,我们经常看到一些音频说8K、16K,或者是16K,16B,这些是什么意思呢?比如说8K,就是说音频会采用8千次,相当于这个录音设备在录音的时候,每八千分之一秒采一个点,知道这个声音的强度是多少?这相当于一个训练的点,然后再对这个数据进行分帧,比如说25毫秒作为一个帧,不断的往后移,对每帧的数据对数变化,如果是16K,就是400个点,相当于这一帧的数据里面,之前是时间上面的先后点,然后再变成在这一帧上不同频率的声音是怎么分布的,然后再经过频率滤波,或者是对数变换,相当于是一个限量值。比如说MFCC,一帧数据得到13个数,一帧数据变成13个点,相当于13×100的限量,这就是一般的特征提取的过程。
我们得到这个特征数据以后,就需要把特征数据变成到底是发哪个音速的概率?这项研究的历史过程大概是这样的,很多年前他们做语音识别的时候,不是我们现在体验式的语音识别,叫孤立词识别DTW,比如说起立,在座的人400人,比如说开门是怎么开的?把这个数据收集起来,然后还说很多难得的词,现在新来一个词,我就去比较这个人说的这句话跟哪个词关联性比较强的?比如说这个人进来,这个词比较像开门,就识别出来开门,一开始的语音识别是比较简单的一个词一个词识别。后来发展有了HMM/GMM,混合高速模型,这个对语音识别来说从孤立词识别到大词汇量的连续语音识别,是比较大的进步,做出这个还是很牛逼的。
有了混合高速模型之后,它的识别率比之前有了很大幅度的提高,但还是达不到工艺上或者我们生活中应用的程度,最近10年之内深度学习让语音识别准确率达到90%以上,之前可能是70%到80%,达到90%以上才有了商业上大规模的应用。
前面说的发音上的特征,首先是变成一个音速,然后是音速变成句子,一个节点有一个输入,生成这个词需要几个原料,发音辞典,语音模型,很多文本性的产生,发音辞典是需要提前问题的。
接下来讲一下神经网络的基本知识,首先是深度的神经元,包括细胞核和树突,接受外部的信号,根据信号和其他的原因选择它的细胞到底是激活还是不激活?
据说这些科学家受到了动物深度神经元的启发,发明了在数学上神经元的基本结构,实际上是不是受这个启发也不知道?也就是每个输入乘以一个值,把它们加起来,然后再非线性函数处理一下就是输出,是一种很简单的方式。
简单的神经网络,还有这么简单的神经元到底能够干什么事情呢?第一印象是干不了什么事情的,通过把这些神经元组合起来,组合成一个神经网络,神经网络结构也是比较简单的,他是一种分层结构,有输入层,隐藏层,以及输出层,每一个神经元,也是前面说的简单的神经元结构,这么一个简单的神经元如果做事情的话,对数据的表现能力也还是比较简单的。
前面说的发音上的特征,首先是变成一个音速,然后是音速变成句子,一个节点有一个输入,生成这个词需要几个原料,发音辞典,语音模型,很多文本性的产生,发音辞典是需要提前问题的。
接下来讲一下神经网络的基本知识,首先是深度的神经元,包括细胞核和树突,接受外部的信号,根据信号和其他的原因选择它的细胞到底是激活还是不激活?
卷积神经网络,卷积到底是什么东西?我们可能也经常听说卷积,一开始的时候我也觉得卷积是什么东西?就像它的名字一样卷一下积一下,积就是乘一下,卷就是卷起来了,我是这么理解的,可以看一下这个图。前面是一个原始元素值,中间这是一个卷积核,这是卷积之后的,至于卷积的过程,就是把这个卷积盒跟前面对应起来,每一个对应点都相乘加起来,变成后面这个样子,这是卷积过程。
这个卷积到底有什么用?乘一下计算一下到底有什么用?没有直观的感受,现在给一个直观的感受,这三个是卷积盒,这是用前面的方式对这个图像进行卷积处理,最后得出来的图像是这个样子,相当于我一个图像主对角线加起来,可以提出来主对角线的纹路。第二种是把中间这个减进去,然后是求平均值,得到的效果是主对角线纹路,然后是周围象素检测边缘,然后是变模糊了。前面看资料的时候卷积资料是什么特征,这个图可以看出来直观的感受。
RNN单元是对数据做空间上相近特征的提取,语音识别和NRP数据的提取,数据前后时间上的点有关联性的,语音识别上前后相连的帧是有关联的,选择前面的字和后面的字,语音上也是有关联的。RNN循环神经网络结构,它的一个神经元的输入,可以作为下一个时间点的输入,第一个时间点输入,有原来的输入,也有这样一个时间点的输入,这样的网络化,可以得到之前N个时间点的数据信息,RNN网络有一个梯队爆炸和梯队小时的特点,每次训练的时候,都会经过激活函数,要么大于1,要么小于1,经过这个函数的时候,往前传播的时候要么变大,要么变小,如果小于1,不断的乘以0点几,一直到前面的话影响就比较小了,如果是大的话乘以1点几就越来越大,我们在语音识别上面造成很大影响,我们在第10帧的时候已经感受不到在第一帧的数据了。
有人提出LSTM单元,LSTM就是长短时间记忆单元,在这种网络结构中,它增加了两个比较明显的特征,来解决前面说的梯度消失和梯度爆炸的概念,增加了一个门,在这个通道上,它的梯队不会消失或者爆炸的,通过门的控制可以控制上一个信息点进来的多少。
下面讲深度学习和声学模型上的应用,语音识别最主要的工作集中在声学模型建模,主要是人发音以后,到底识别出来的音速是什么样,到底是什么声音?深度学习在语音识别上面的工作,主要是有DNN、LSTM、CLDNN,看起来是一些英文字母,其实都是深度学习的神经网络。
首先DNN,输入一帧数据,得到发音单元的分类结果,其实这是比较纯粹的,输入一帧数据,有一个分类结果的概率,也没有应用到其他的信息。
LSTM单元,会利用到这个时间点,和之前分割时间点的一些数据源,来进行辅助判断,当前的这帧数据到底数据哪一个分类?
双向的LSTM效果比单向的效果更好一些,因为它是同时两个方向,比如说今天去吃饭,现在的LSTM识别的时候,识别我的时候它可能只应用到今天,前面的数据,但是双向的话,在识别我的时候会用到今天,会用到我们去吃饭,其实两边都会用到,能够获取上下文的信息更多一些,效果也更好。现在我们很多语音识别的产品可以看到,我们一边说话一边在出结果,这个模型是不知道后面的数据,一般只能识别单向的。
CLDNN,这种网络结构目前来看是比较成熟和稳定的一种结构,在这上面有训练数据,也能够比较容易的训练出来,前面是几个网络后面再接LSTM,后来再接Dense,有一些高效的企业会提出增加新的网络,比如说可能会把卷积网络加很多层,可能会加10几层,因为卷积网络的特点是如果加10几层后会提出来声音特征,最后的识别效果也会更好
最近几年来在语音识别上面有一些新的技术,其实也不是太新,CTC最开始的算法是在2003年还是2006年就提出来了,这是端到端的识别方法,在语音识别之前需要做一些预处理,比如说我们的训练数据,我说这句话它的文本是什么?需要把人的音频和对应的发音,要先对好,端到端的算法不需要,一句话输进去,然后一句话出来,我们的训练是输入音频数据,然后得到结果,跟之前不一样的是对整个一句话的训练和识别,对一句话做计算。
单元粒度的变化,可以训练音速,到最后的汉字,我们不用关心里面的细节是什么样子,也不用加工人工的处理,对于去操作这个模型的人来说更加简单了。
RNN单元是对数据做空间上相近特征的提取,语音识别和NRP数据的提取,数据前后时间上的点有关联性的,语音识别上前后相连的帧是有关联的,选择前面的字和后面的字,语音上也是有关联的。RNN循环神经网络结构,它的一个神经元的输入,可以作为下一个时间点的输入,第一个时间点输入,有原来的输入,也有这样一个时间点的输入,这样的网络化,可以得到之前N个时间点的数据信息,RNN网络有一个梯队爆炸和梯队小时的特点,每次训练的时候,都会经过激活函数,要么大于1,要么小于1,经过这个函数的时候,往前传播的时候要么变大,要么变小,如果小于1,不断的乘以0点几,一直到前面的话影响就比较小了,如果是大的话乘以1点几就越来越大,我们在语音识别上面造成很大影响,我们在第10帧的时候已经感受不到在第一帧的数据了。
有人提出LSTM单元,LSTM就是长短时间记忆单元,在这种网络结构中,它增加了两个比较明显的特征,来解决前面说的梯度消失和梯度爆炸的概念,增加了一个门,在这个通道上,它的梯队不会消失或者爆炸的,通过门的控制可以控制上一个信息点进来的多少。
下面讲深度学习和声学模型上的应用,语音识别最主要的工作集中在声学模型建模,主要是人发音以后,到底识别出来的音速是什么样,到底是什么声音?深度学习在语音识别上面的工作,主要是有DNN、LSTM、CLDNN,看起来是一些英文字母,其实都是深度学习的神经网络。
首先DNN,输入一帧数据,得到发音单元的分类结果,其实这是比较纯粹的,输入一帧数据,有一个分类结果的概率,也没有应用到其他的信息。
LSTM单元,会利用到这个时间点,和之前分割时间点的一些数据源,来进行辅助判断,当前的这帧数据到底数据哪一个分类?
双向的LSTM效果比单向的效果更好一些,因为它是同时两个方向,比如说今天去吃饭,现在的LSTM识别的时候,识别我的时候它可能只应用到今天,前面的数据,但是双向的话,在识别我的时候会用到今天,会用到我们去吃饭,其实两边都会用到,能够获取上下文的信息更多一些,效果也更好。现在我们很多语音识别的产品可以看到,我们一边说话一边在出结果,这个模型是不知道后面的数据,一般只能识别单向的。
CLDNN,这种网络结构目前来看是比较成熟和稳定的一种结构,在这上面有训练数据,也能够比较容易的训练出来,前面是几个网络后面再接LSTM,后来再接Dense,有一些高效的企业会提出增加新的网络,比如说可能会把卷积网络加很多层,可能会加10几层,因为卷积网络的特点是如果加10几层后会提出来声音特征,最后的识别效果也会更好
最近几年来在语音识别上面有一些新的技术,其实也不是太新,CTC最开始的算法是在2003年还是2006年就提出来了,这是端到端的识别方法,在语音识别之前需要做一些预处理,比如说我们的训练数据,我说这句话它的文本是什么?需要把人的音频和对应的发音,要先对好,端到端的算法不需要,一句话输进去,然后一句话出来,我们的训练是输入音频数据,然后得到结果,跟之前不一样的是对整个一句话的训练和识别,对一句话做计算。
单元粒度的变化,可以训练音速,到最后的汉字,我们不用关心里面的细节是什么样子,也不用加工人工的处理,对于去操作这个模型的人来说更加简单了。
另外一种端到端的识别,是encoder—decoder+attention,通过借助机器翻译中的编码、解码模型和注意力机制。首先是听者解码器,处理的数据刚开始跟传统的数据一样,将数据的特征提取以后,把这组数据经过小的神经网络,提取出来高位特征,然后再输Attender,参与者对前面提取出来的特征采用注意力机制,然后结果输给拼字者Speller,将这些音速变成字和句子。
我看谷歌发布的文章里面说,这种方法比之前传统的算法错误率低了很多,它是一种完全端到端的分法,它出来以后,前面其他的算法都变成的传统的算法,但是这样的算法也有一个缺陷,不能做实时的识别,不能一边说话一边识别,实时功能暂时还不能做。
至于我们现在的技术难点,如果哪个厂商说准确率97%,那这个就很牛了,关于它的准确率各个厂商都这么说,其实准确率是在安静的情况下还有标准化的情况下才能够达到,如果说有噪音,或者说那个人普通话不标准,或者有口音的普通话,识别率会降到80%,效果并没有想象那么好。关于远场识别,如果说我有一个话筒,同声传译效果比较好,高噪音环境下效果不是很好。还有就是带口音的识别不好。还有多人的时候语音混杂,以及带情绪的声音。这些都会使识别效果不好。
怎么解决这些问题呢?采用麦克风,更高质量的阵列麦克风,更多的远场数据,增加语义理解的辅助。
我们的运营同学要求我们加一些广告,是我们腾讯AI有关的小程序,很多产品可以体验一下。
现在腾讯云语音识别的相关产品就有上面这几种,离线语音识别,实时语音,一句话识别,同声传译,语音识成。
离线语音识别,客户留言识别出来,还有就是实时语音,突然说话的时候可以识别出来,我自己开发一个APP,选择这个功能可以嵌入进去。一句话识别,说完这句话就可以识别传给我。同声传译,识别汉语的同时把汉语翻译成英文,然后在屏幕上识别出来。还有就是语音合成。
Q&A
Q:老师你好,我想问一下腾讯云上云端服务语音识别的调用时间能够做到二三十毫秒的响应时间吗?谢谢。
A:如果是我们自己内部设施的话,识别的话,可以到30毫秒,但是如果是我们提供的服务,你们自己请求过来,还要返回去,主要是这个方面延迟,所以到不了那么快,可能要100毫秒左右。
Q:人工智能可以有嗅觉吗?
A:我之前也想过这个问题,我记得我读书的时候,我们老师叫做我们写一个文章,跟你今天问的差不多,有嗅觉,有人走进来就知道这个人来了,现在没有。
相关阅读
这是一份「不正经」的深度学习简述
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识
此文已由作者授权腾讯云+社区发布,更多原文请点击
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!