在看kaldi文档中对chain model的介绍时,其中反复提到了MMI、lattice free MMI、DNN-HMM这些关键词,之前一直都没搞懂MMI到底是什么东西,看了很多博客只能大概了解到应该是训练声学模型时的一个准则。而且前几天分别看了GMM和HMM,各自原理大概明白了,但是还不太清楚它们是怎么和语音识别联系起来的,今天特地看了几篇博客去了解了一下GMM、HMM具体是如何和语音识别联系到一起的,对GMM-HMM算是有了个粗浅的了解,同时也看了一下DNN-HMM的细节,巧合下也终于弄明白MMI/BMMI/MPE/MBR/lattice free MMI到底是什么东西了,不过它们的细节还没有仔细去看。
GMM-HMM
以孤立词识别为例。
一、每个单词的读音都对应一个HMM模型,大家都知道HMM模型中有个状态集S,那么每个状态用什么来表示呢,数字?向量?矩阵?其实这个状态集中的状态没有具体的数学要求,只是一个名称而已,你可以用’1’, ’2’, ‘3’…表示,也可以用’a’, ‘b’, ’c ’表示。另外每个HMM模型中到底该用多少个状态,是通过先验知识人为设定的。
二、HMM的每一个状态都对应有一个观察值,这个观察值可以是一个实数,也可以是个向量,且每个状态对应的观察值的维度应该相同。假设现在有一个单词的音频文件,首先需要将其进行采样得到数字信息(A/D转换),然后分帧进行MFCC特征提取,假设每一帧音频对应的MFCC特征长度为39,则每个音频文件就转换成了N个MFCC向量(不同音频文件对应的N可能不同),这就成了一个序列,而在训练HMM模型的参数时(比如用Baum-Welch算法),每次输入到HMM中的数据要求就是一个观测值序列。这时,每个状态对应的观测值为39维的向量,因为向量中元素的取值是连续的,需要用多维密度函数来模拟,通常情况下用的是多维高斯函数。在GMM-HMM体系中,这个拟合函数是用K个多维高斯混合得到的。假设知道了每个状态对应的K个多维高斯的所有参数,则该GMM生成该状态上某一个观察向量(一帧音频的MFCC系数)的概率就可以求出来了。
三、对每个单词建立一个HMM模型,需要用到该单词的训练样本,这些训练样本是提前标注好的,即每个样本对应一段音频,该音频只包含这个单词的读音。当有了该单词的多个训练样本后,就用这些样本结合Baum-Welch算法和EM算法来训练出GMM-HMM的所有参数,这些参数包括初始状态的概率向量,状态之间的转移矩阵,每个状态对应的观察矩阵(这里对应的是GMM,即每个状态对应的K个高斯的权值,每个高斯的均值向量和方差矩阵)。
四、在识别阶段,输入一段音频,如果该音频含有多个单词,则可以手动先将其分割开(考虑的是最简单的方法),然后提取每个单词的音频MFCC特征序列,将该序列输入到每个HMM模型(已提前训练好的)中,采用前向算法求出每个HMM模型生成该序列的概率,最后取最大概率对应的那个模型,而那个模型所表示的单词就是我们识别的结果。
上面四个过程的描述来自机器学习&数据挖掘笔记_14(GMM-HMM语音识别简单理解)。
根据我自己的理解,上面的过程每个单词对应一个GMM-HMM模型,而一个单词包含多个状态(例如单词的每个帧作为一个状态),单词的每个状态都会对应一个混合高斯模型。
DNN-HMM
DNN-HMM涉及到的细节比较多,我主要看的浅谈语音识别基础这篇文章,巧合的是终于知道MMI是个什么东西了,这个词在介绍chain model时反复提到,因为不知道是什么,导致我chain model也看不下去了。。
我就是从下面“深度神经网络序列鉴别性训练”的描述中大概明白了MMI到底指的是什么。
深度神经网络序列鉴别性训练
传统DNN进行多分类问题时通常采用交叉熵损失函数,它能够独立的处理每一帧语音向量,但是,语音识别本质上是一个序列分类问题,DNN的输入也是一长段帧,所以我们需要引入一些更契合这种问题的序列鉴别性训练方法,比如常用的最大互信息(MMI)、增强型最大互信息(BMMI)、最小音素错误(MPE)和最小贝叶斯风险训练准则(MBR)。
这里简单介绍一下这几种方法的基本思想,语音识别中使用的最大互信息(MMI)准则旨在最大化单词序列分布和观察序列分布的互信息。增强型MMI是MMI准则的一个变种,它增强了错误较多的路径的似然度。最小音素错误和状态级最小贝叶斯风险都旨在最小化不同颗粒度标注下的期望错误。比如,MPE准则旨在最小化期望音素错误,而状态级贝叶斯风险(sMBR)旨在最小化状态错误的统计期望。
序列鉴别性训练准则的形式可以有很多,如果准则被形式化成最大化的目标方程,我们可以通过乘以-1来使其成为一个最小化的损失函数。这样损失函数可以被永远形式化为两个词图的值的比率:代表参考标注的分子词图和代表与之竞争的解码输出的分母词图。
这里我们介绍一下词图(lattice),词图本质上是一个有向无环(directed acyclic graph)图。每个词网格包含一个开始结点以及一个结束结点,即在每个词网格中,仅存在一个入度(in-degree)为0的节点和一个出度(out-degree)为0的节点。我们也一般采用词图来保存识别的候选序列。
![](https://i-blog.csdnimg.cn/blog_migrate/757b3a3a020a2b2e183729700f24056b.png)
根据我的理解,MMI/BMMI/MPE/MBR指的应该是类似于神经网络训练过程中的损失函数,是神经网络序列鉴别训练的一种准则,当然这些准则的具体内容我还没仔细看,等我明白了再说明一下。