/HMM_isolated_word_recognition

Speech Recognition Course | Assignment

Primary LanguagePython

  1. 在models文件中已经有两个训练好的模型,分别是前10个wav文件夹220个样本和前20个文件夹440个样本训练出来的状态数为15、迭代次数为20的模型

  2. 只有两个文件,运行时请运行main_model文件,这里面是训练语音声学模型的过程。另一个只是单纯的HMM结合高斯分布的模型。

  3. 总共有11个单词

  4. 观测值 $$ o{t}为mfcc特征值(39维,且为连续随机变量,服从正态分布,故其观测概率b{{ij}}为概率密度积分) $$

  5. 状态 $$ i{_t}为每一个音素的三状态, $$

  6. 为了避免数据稀疏(对于音素来说当然不会稀疏,因为就以英语举例,总共也就只有四十多个音素,关键是有跨词音素的存在,这些属于各个音素的排列数,那样的数量级就是灾难性的巨大),所以需要使用聚类,把相同的类型的跨词音素放到一起,然后共用一个HMM模型。当然这只是一种粗浅的聚类方法.

  7. 计算状态转移概率 $$ a{{ij}} $$ 的时候还是用HMM的前后向算法即通过EM迭代算法来求出参数 $$ a{{ij}} $$ 的极大估计值。但是计算观测概率时就要用到GMM里面的协方差矩阵,这个矩阵也需要计算。

  8. 在李航的统计学习方法中,他提到了利用前向概率和后向概率可以算出给定模型参数λ和观测O序列下的某一个状态在时刻t的概率和从给定模型参数λ和观测O序列下的某一个状态在时刻t转移至t+1的概率,而通过这个两个概率的统计量可以推导出我们的三个参数A(状态转移概率)B(观测概率)以及初始状态Π。

  9. (以下观点引自知乎)

对于单高斯模型,我们可以用最大似然法(Maximum likelihood)估算参数 [公式] 的值,

[公式]

这里我们假设了每个数据点都是独立的(Independent),似然函数由概率密度函数(PDF)给出。

[公式]

由于每个点发生的概率都很小,乘积会变得极其小,不利于计算和观察,因此通常我们用 Maximum Log-Likelihood 来计算(因为 Log 函数具备单调性,不会改变极值的位置,同时在 0-1 之间输入值很小的变化可以引起输出值相对较大的变动):

[公式]

对于高斯混合模型,Log-Likelihood 函数是:

[公式]

如何计算高斯混合模型的参数呢?这里我们无法像单高斯模型那样使用最大似然法来求导求得使 likelihood 最大的参数,因为对于每个观测数据点来说,事先并不知道它是属于哪个子分布的(hidden variable),因此 log 里面还有求和,对于每个子模型都有未知的 [公式] ,直接求导无法计算。需要通过迭代的方法求解