AI大语音(七)——基于GMM的0-9语音识别系统

点击上方“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)

 

 

                                                                                    留你心,言你想

 

版权声明:本文为AIBigTruth原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/AIBigTruth/p/13572083.html