[转]data-driven与决策树聚类的两种方法
参考文章:
http://blog.csdn.net/quheDiegooo/article/details/60873999
http://blog.csdn.net/quhediegooo/article/details/61202901
在发音过程中,因为协同发音的影响,同一个音素在不同的位置,其发音变化很大,如下图所示:
同样的元音[eh]在不同的单词中的发音在频域上区分非常明显。
因为单音素monophone 是上下文独立的(context-independent)
为了能够表示这种区别,因此提出了triphone的概念,triphone是根据左右音素来确定的,因此是上下文相关的(context-dependent)
上图中:W对应的是词组;Q对应的是monophone;L对应的就是triphone;P对应聚类或者状态绑定之后的triphone
接下来本文就要讨论triphone聚类/状态绑定的过程。
聚类过程有2中,一种是居于数据驱动的聚类过程,第二种是基于决策树的聚类过程
一、基于数据的过程
HMM状态绑定过程如下:
步骤为:
1)用flat-start方式创建 monophone集合,每个状态的输出概率密度函数为单高斯概率密度,均值,方差为训练数据的全局均值和方差(上图1);(该单音素对应的所有训练数据,求均值和方差);
2)用EM算法迭代3-4次,对高斯参数重新进行估计(上图1);(该单音素对应的所有训练数据,EM迭代训练);
3)每个单高斯monophone q被克隆一次,用来初始化那些在训练数据出现的,未被绑定的triphone: x-q+y(上图步骤2);(单音素拷贝到3音素,完成初始化)
4)对这些triphone,用EM算法再次迭代(这里),来高斯参数重新进行,同时状态j的占用数γ被计算出来(上图步骤2);(三音素的个例单独训练,如图,不是相同中心音素的训练成一个模型)
5)来自同一个monophone的三音素集合,相应的状态被聚类,在每个聚好的类中,选择一个状态作为典型,同类中的状态绑定到这个状态(上图步骤3);
6)绑定完成之后,对步骤5中的所有triphone的高斯参数再次进行EM迭代同时增加高斯混合模型中的分量(components),直到分量个数达到设定的预期或者性能达到测试预期。(上图步骤4)
上面过程简单总结就是:
monophone训练->monophone克隆->同样的状态进行绑定->增加混合高斯模型个数到设定值
基于data-driven的方法是根据状态的均值和方差进行聚类,这种方法的缺点是训练数据中未出现过的的triphone没有办法处理
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、triphone决策树聚类
基于data-driven的聚类算法,如KNN,有个缺点,就是无法处理训练数据中没有出现过的triphone,基于决策树的聚类可以解决这个问题。
基于决策树的聚类过程中,把任意一个phone分裂成2类,其log 似然必然会增加,因为分裂后同样的个数的数据,其参数增加一倍,因此,选择不同的question对phone集合进行分裂,使得分裂后的log 似然增加最大。具体描述如下:
1)初始所有的状态都在一个类别中,作为tree的root节点;
2)找到一个question,使得分裂后的2个类别的log 似然增加最大,把当前的question作为当前tree节点的问题;
3)从上到家重复这个过程,直到分裂后,增加的log 似然小于某个给定的阈值;
4)最后,对不同父亲节点的两个叶子节点的类别成一个类,计算其减少的log 似然是否小于给定的阈值,如果小于这个阈值,则合并,否则不合并。
其中log似然计算公式如下:s表示HMM中的状态,F代表训练数据中的帧,γ代表占用数(state occupation counts)
实际中通过monophone训练triphone的过程综合了状态绑定和决策树聚类的过程,核心步骤如下所示:
1)用flat-start方式创建 monophone集合,每个状态的输出概率密度函数为单高斯概率密度,均值,方差为训练数据的全局均值和方差(该单音素对应的所有训练数据,求均值和方差);
2)用EM算法迭代3-4次,对高斯参数重新进行估计(该单音素对应的所有训练数据,EM迭代训练);
3)对train data中出现的所有x-q+y音素,拷贝monophone q的状态的参数给triphone x-q+y,这样创建了上下文相关音素x-q+y,这步也是对triphone进行初始化的过程(单音素拷贝到3音素,完成初始化)
4) 对这些triphone,用EM算法再次迭代,来高斯参数重新进行,同时状态j的占用数(state occupation counts)γ被计算出来 (三音素的单独训练,如图,不是相同中心音素的训练成一个模型)
5) 把这些trephine用上述介绍的决策树聚类算法进行聚类。
6)最后对每个类增加高斯混合模型的component,并用EM重新估算高斯参数,直到节点个数到达给定的阈值。
以上就完成了monophone生成triphone的过程。