如上图所示,识别过程无非是:
把帧识别成状态(难点)。
把状态组合成音素。
把音素组合成单词。
那每个音素应该对应哪种状态呢?这就需要用到声学模型了。
2.4 声学模型
声学模型是识别系统的底层模型,其目的是提供一种计算语音的特征矢量序列和每个发音模板之间的距离的方法。
也就是说,提取到的语音特性,与某个发音之间的差距越小,越有可能是这个发音。
或者说,某帧对应哪个状态的概率最大,那这帧就属于哪个状态。这个可以用GMM(混合高斯模型,就是一种概率分布)或DNN(深度神经网络)来识别。
但这样识别出来的结果会比较乱,因为一个人讲话的速度不一样,每一帧识别出的结果可能是:....HHH_EE_LL__LLLL__OOO.....,如下图:
这个问题可以用DTW(动态时间规整)或HMM(隐马尔科夫模型)或CTC(改进的RNN模型)来对齐识别结果,知道单词从哪里开始,从哪里结束,哪些内容是重复的没有必要的。
a)常用的声学建模方法包含以下三种:
基于模式匹配的动态时间规整法(DTW);
隐马尔可夫模型法(HMM);
基于人工神经网络识别法(ANN);
在过去,主流的语音识别系统通常使用梅尔倒谱系数(Mel-Frequency Cepstral Coefficient, MFCC)或者线性感知预测(Perceptual Linear Prediction, PLP)作为特征,使用混合高斯模型-隐马尔科夫模型(GMM-HMM)作为声学模型。
近些年,分层鉴别模型比如DNN,变得可行起来,比如上下文相关的深度神经网络-隐马尔可夫模型(context-dependent DNN-HMM,CD-DNN-HMM)就比传统的GMM-HMM表现要好得多。
如下图,你可以清晰的看到被替换的部分。
b)主要问题:
我们要了解的是,声学模型存在2个问题:
特征向量序列的可变长;
每个人说同一个单词的时间长度都不一样,声学模型要能从不同的时间长度的语音信号中识别出是同一个单词。
解决方法就是DTW(动态时间规整)、 HMM(隐马尔可夫模型)。
音频信号的丰富变化性;
如说话人的性别,健康状况,紧张程度,说话风格、语速,环境噪音,周围人声,信道扭曲,方言差异,非母语口音等。
c)HMM 声学建模:
对语音识别系统而言,HMM 的输出值通常就是各个帧的声学特征 。 为了降低模型的复杂度,通常 HMM 模型有两个假设前提,一是内部状态的转移只与上一状态有关,一是输出值只与当前状态或当前状态转移有关。除了这两个假设外,HMM 模型还存在着一些理论上的假设,其中之一就是,它假设语音是一个严格的马尔科夫过程 。
2.5 语言模型
如何将识别出的单词,组成有逻辑的句子,如何识别出正确的有歧义的单词,这些就用到语言模型了。
由于语音信号的时变性、噪声和其它一些不稳定因素,单纯靠声学模型无法达到较高的语音识别的准确率。在人类语言中,每一句话的单词直接有密切的联系,这些单词层面的信息可以减少声学模型上的搜索范围,有效地提高识别的准确性,要完成这项任务语言模型是必不可少的,它提供了语言中词之间的上下文信息以及语义信息。
随着统计语言处理方法的发展,统计语言模型成为语音识别中语言处理的主流技术,其中统计语言模型有很多种,如N-Gram语言模型、马尔可夫N元模型(Markov N-gram)、指数模型( Exponential Models)、决策树模型(Decision Tree Models)等。而N元语言模型是最常被使用的统计语言模型,特别是二元语言模型(bigram)、三元语言模型(trigram)。
2.6 字典
字典是存放所有单词的发音的词典,它的作用是用来连接声学模型和语言模型的。
识别出音素,利用字典,就可以查出单词了。
例如,一个句子可以分成若干个单词相连接,每个单词通过查询发音词典得到该单词发音的音素序列。相邻单词的转移概率可以通过语言模型获得,音素的概率模型可以通过声学模型获得。从而生成了这句话的一个概率模型。
2.7 解码器
解码器的作用就是将上述训练好的模型按照一定的规则组合起来,将新输入的语音识别出来。
语音识别评估标准
在语音识别中,常用的评估标准为词错误率(Word Error Rate,WER)。
我们上面讲了帧向量识别为单词,需要用声学模型。因为识别出来的整个词序列是混乱的,需要进行替换、删除、插入某些词,使得次序列有序完整。
WER就是反映上述过程的标准,能直接反映识别系统声学模型的性能,也是其他评估指标如句错误率SER的基础。
传统的词错误率评估算法在语音识别中存在三种典型的词错误:
替换错误(Substitution):在识别结果中,正确的词被错误的词代替;
删除错误(Deletion):在识别结果中,丢失了正确的词;
插入错误(Insertion):在识别结果中,增加了一个多余的词;
所以,词错误率为:
S 为替代错误词数,D 为删除错误词数,I 为插入错误词数。T为参照句子中的所有词数。
需要注意的是,因为有插入词,所以WER有可能大于100%。