本文来自公众号“AI大道理”。
这里既有AI,又有生活大道理,无数渺小的思考填满了一生。
1 系统概要
孤立词识别:语音中只包含一个单词的英文识别
识别对象:0-9以及o的英文语音
训练数据:330句话,每个字符30句话,11个字符
测试数据:110句话,每个字符10句话,11个字符
模型:混合高斯模型(GMM),k=5个分量
环境:window、Pycharm、python3.5、utils、numpy、scipy
目标:单个字符的识别准确率大于97%
流程:
2 训练数据准备
本系统所用的数据为0-9(其中0的标签为Z(Zero))和o这11个字符的英文录音,每个语音对应的39维MFCC特征提前提取好。
系统中,每个字符用一个GMM来建模,每个GMM包含5个Gaussion分量。
在识别、预测阶段,对于某句话,对数似然最大的模型对应的字符为当前语音数据的预测结果。
训练数据:330句话,每个字符30句话,11个字符。
train文件下有语音文件、feats.ark、feats.scp、wav.scp、text文件。
wav.scp:句子id到wav的路径的映射,所用到的数据wav文件的相对路径。
feats.scp:语音识别工具kaidi提取的特征文件之一,句子id到特征数据真实路径和位置的映射。
text:句子id到标签的映射,本实验中标签(语音对应的文本)只能是0-9,o这11个字符。
feats.ark:语音识别工具kaidi提取的特征文件之一,特征实际存储在ark文件中,二进制。
3 GMM模型训练
每个GMM(0-9,o)都是用它对应的语音数据训练,测试的时候,也只能整段语音分帧、加窗、提特征,然后在每个GMM上,计算每一帧的似然最后求和得到最终似然。
GMM模型训练过程:
(1)MFCC特征提取已事先提取好。
(2)K-Means算法进行初始化GMM参数。
K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
输入:样本集D={x1,x2,...xm},聚类的簇树k=5,最大迭代次数N。
输出:簇划分C={C1,C2,...Ck}
1) 从数据集D中随机选择k个样本作为初始的k个质心向量:{μ1,μ2,...,μk}
2)对于n=1,2,...,N
a) 将簇划分C初始化为Ct=∅,t=1,2...k
b) 对于i=1,2...m,计算样本xi和各个质心向量μj(j=1,2,...k)的距离:
将xi标记最小的为dij所对应的类别λi。此时更新Cλi=Cλi∪{xi}
c) 对于j=1,2,...,k,对Cj中所有的样本点重新计算新的质心
d) 如果所有的k个质心向量都没有发生变化,则转到步骤3)
3) 输出簇划分C={C1,C2,...Ck}
算法实现:
11个GMM都要初始化,其中Z的GMM模型的初始参数为:
mu.shape (5, 39)
sigma.shape (5, 39, 39)
pi.shape (1, 5)
(3)EM 算法训练GMM模型
算法实现:
五次迭代,每次迭代后对数似然概率都在增大。
其中:
高斯概率:gaussian(X[n], self.mu[k], self.sigma[k])
算法实现:
对数似然:calc_log_likelihood(X)
算法实现:
迭代过程:(Z的GMM模型)
(O的GMM模型)
等等。
训练时间:17.5分钟
4 GMM预测
测试数据:110句话,每个字符10句话,11个字符
GMM预测过程:
(1)MFCC特征提取已事先提取好。
(2)11个GMM模型已经训练好。
(3)每个测试语音计算每一个模型的对数似然概率。
(4)对数似然最大的对应的模型即为预测输出。
(5)将预测输出与标签对比,计算模型测试准确率。
可见模型3对数似然最大,即这条语音预测为“3”。
predict_target:3
测试时间:test time: 12分钟
模型测试准确率:97.27%
5总结
基于GMM的11个单词孤立词识别准确率达97.27,满足设计要求。
基于GMM的0-9孤立词识别系统以词为训练单位,添加新词汇需要重新进行训练,若要涵盖所以词,差不多6万个词,训练量极大,预测时也要计算6万个模型的似然,哪个大预测出哪个,在实际应用中有局限性,只能应用于小词汇量场合。
本系统识别了0-9的数字的英文单词,但是假如有人用英文报电话号码,是识别不了整个号码的,甚至识别不了其中的one。
孤立词识别这个模型无法从一连串英文号码(里面包含了one two等多个数字)中准确识别出one,关键点在于连续语音中不知道哪些语音信号是one,哪些是two,或者说不知道哪些帧是one哪些帧是two,所以需要HMM进行对齐,才能进行连续语音识别。
灵魂的拷问:如果使用孤立词识别这个模型去预测连续的一个语音,会怎么样呢?
AI大语音:结果会是给定的类别中的一个,这就造成了误识别。系统中只有11个类别,任何语音,即使和我们的目标语音完全无关,也会根据计算的似然结果,选择最大的这个。就像CNN进行图像分类一样,输入的图像不管是不是类别中的,都会有一个最大输出,都会归于一类中。
连续语音识别如微信语音识别(语音转文字),输入的都是句子,而不是单个词,这就需要GMM-HMM模型了。
附录(魔鬼写手)
——————
浅谈则止,细致入微AI大道理
扫描下方“AI大道理”,选择“关注”公众号
—————————————————————
—————————————————————
投稿吧 |留言吧
▼
下期预告
▼
AI大语音(八)——基于GMM-HMM的语音识别系统
▼
往期精彩回顾
▼
AI大语音(一)——语音识别基础
AI大语音(二)——语音预处理
AI大语音(三)——傅里叶变换家族
AI大语音(四)——MFCC特征提取
AI大语音(五)——隐马尔科夫模型(HMM)
AI大语音(六)——混合高斯模型(GMM)
留你心,言你想