聊聊语音识别的发展历程
现在的语音识别的准确率看起来已经很高了,虽然已经将近95%了,不过从95%到99%还有很大的距离,如果识别准确率到了99%了,相信语音的应用应该会非常广泛了吧!
在深度学习发展之前,语音识别还是基于传统的机器学习算法,如混合高斯分布(GMM)拟合以及隐马尔科夫模型(HMM)对音标状态进行推测.但是基于这类算法实现的语音识别系统精确度不够高,这类算法主要在2010年以前.而在2012年以后,随着Hinto的ImageNet比赛上神经网络的大显身手之后,深度学习开始走向热门.这主要是由于现阶段计算机的计算性能显著提高,加上2006年Hinto提出了一种新型的神经网络训练算法使得深度学习死灰复燃.而深度学习主要是基于神经网络,通过构造多层神经网络来实现对输入数据进行得到较好的抽象的特征分布.当然,最基本的神经网络就是一层前馈神经网络,它由一个隐含层构成,隐含层上具有一个核函数或称激活函数,此核函数可以为线性的也可以为非线性的,只要满足可微的性质就好,这种较浅的神经网络无法拟合较为复杂的高维问题,例如语音识别.因此,人们开始探索构建深层的前馈神经网络,即DNN,通过DNN对语音特征(一般为音频的功率谱)进行学习,然后再接入状态的HMM中去来获得最优的音节.这种由DNN表示的对语音特征进行分布学习的网络结构并不具有时间关联性,因为其隐含层里面的神经元之间没有连接,所以为了刻画语音识别中的内部关联性,循环神经网络就派上了用场,即RNN,由于循环神经网络隐含层的神经元之间有连接,这样可以保证后一时刻记录了前一时刻的特征信息,从而提高了语音识别准确率,当然,这里我说的识别准确率主要是针对声学模型而言的,实践表明语音识别的准确率主要取决于声学模型的准确率,语言模型在这里只是起到了一个锦上添花的作用.在RNN以及Deep RNN被应用之后,为了更全面地获取音频的上下文信息,又引入了Bidirectional RNN,即双向循环神经网络,这种网络包含两条隐含层,即前向记忆层和后向记忆层,这样就使得网络对特征的记忆更加全面了.但是由于RNN难以训练,经常会遇到梯度消失或梯度爆炸问题,LSTM很好地客服了这个缺点,所以尽管训练复杂度更大了,但是LSTM独特的记忆结构以及优于RNN的训练使得语音识别更加准确了,同时双向LSTM网络也被广泛使用了.
语音识别目前还处在监督学习阶段,监督学习主要由两部分构成,一是模型,二是目标函数.在语音识别问题上,目标函数主要有两种.一种是最传统的交叉熵形势,即把每一帧所得到的音标与目标音标进行比较,这样就得到一个交叉熵公式或者平方差公式作为目标函数,然后使用此目标函数利用梯度下降算法进行训练;而第二种则是使用一种端对端的训练方法,即不考虑每一帧的准确性,因为有时候我们只有音频和其对应的整句文字,而并不知道每一帧所对应的是哪个字母或哪个音标,这时候端对端的训练就派上用场了,端对端的训练所使用的算法是CTC,输入挣个音频得到整个句子再计算其误差函数从而进行训练.实践表明,第一种方法更容易训练一点,但是我觉得第二种训练方法是趋势,第二种训练方法的技巧我本人也在不断探索中.恰好,前不久百度硅谷研究院也开源了一个CTC代码,在github上面有.
这是我的一点语音识别的体会,当然还有其他一些方法,例如使用注意力模型或者使用深度卷积神经网络.这两块我以后再慢慢介绍.
原文来自:点击这里打开
本文来自:聊聊语音识别的发展历程-小码农,转载请保留本条链接,感谢!