语音识别学习日志 2018-7-17 语音识别基础知识准备(3)

2018-7-17

Kmeans算法的缺陷

k均值算法主要的两个缺陷: 
1. K值需要预先给定,很多情况下K值的估计是非常困难的,对于像计算全部微信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算。
2. K-Means算法对初始选取的聚类中心点是敏感的,不同的起始K点所得到的聚类结果完全不同 。
3. K均值算法并不适合所有的数据类型。它不能处理非球形簇、不同尺寸和不同密度的簇,银冠指定足够大的簇的个数是他通常可以发现纯子簇。 
4. 对离群点的数据进行聚类时,K均值也有问题,这种情况下,离群点检测和删除有很大的帮助。

HMM模型

隐马尔可夫模型(Hidden Markov Model,以下简称HMM)。

1、什么样的问题需要HMM模型

使用HMM模型的问题一般有一下两个特征:

      1)问题是基于序列的,比如时间序列或者状态序列。

      2)问题中有两类数据,一列序列数据是可以观测的,即观测序列;而另一类数据是不能观测到的,即隐藏状态序列,简称状态序列。

有这两个特征,那么问题一般可以用HMM模型解决。这样的问题在实际生活中是很多的。比如:打字的过程,在键盘上敲出来的一系列字符就是观测序列,而实际想输入的句子就是隐藏序列,输入法的任务就是根据敲入的一系列字符尽可能的猜测我要输入的词语,并把最可能的词语放在最前面,这就可以看做一个HMM模型。

2、HMM模型的定义

对于HMM模型,假设Q是所有可能的隐藏状态的集合,V是所有可能的观测状态的集合,即:

                                                                Q={q_1,q_2,...,q_N}, V={v_1,v_2,...v_M}

其中,N是可能的隐藏状态数,M是所有的可能的观察状态数。

对于一个长度为T的序列,I对应的状态序列, O是对应的观察序列,即:

                                                              I={i_1,i_2,...,i_T}, O={o_1,o_2,...o_T}

其中,任意一个隐藏状态i_t∈Q, 任意一个观察状态o_t∈V。

HMM模型做了两个很重要的假设如下:

1)齐次马尔科夫链假设。即任意时刻的隐藏状态只依赖于它前一个隐藏状态。当然这样假设有点极端,因为很多时候我们的某一个隐藏状态不仅仅只依赖于前一个隐藏状态,可能是前两个或者是前三个。但是这样假设的好处就是模型简单,便于求解。如果在时刻t的隐藏状态是i_t=q_i,在时刻t+1的隐藏状态是i_t_+_1=q_j , 则从时刻t到时刻t+1的HMM状态转移概率a_i_j可以表示为:

                                                  a_i_j=P(i_t+1=q_j|i_t=q_i)

这样a_i_j可以组成马尔科夫链的状态转移矩阵A:

                                                A=[a_i_j]_N_*_N

 

2)观测独立性假设。即任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态,这也是一个为了简化模型的假设。如果在时刻t的隐藏状态是i_t=q_j, 而对应的观察状态为o_t=v_k, 则该时刻观察状态v_k在隐藏状态q_j下生成的概率为b_j(k),满足:

                                               b_j(k)=P(o_t=v_k|i_t=q_j)

这样b_j(k)可以组成观测状态生成的概率矩阵B:

                                               B=[b_j(k)]_N_*_M

除此之外,我们需要一组在时刻t=1的隐藏状态概率分布Π:

                                              \Pi =[\pi(i)]_N, 其中 \pi(i)=P(i_1=q_i)

一个HMM模型,可以由隐藏状态初始概率分布Π, 状态转移概率矩阵A和观测状态概率矩阵B决定。Π, A决定状态序列,B决定观测序列。因此,HMM模型可以由一个三元组λ表示如下:

                                             \lambda =(A,B,\Pi )

3、一个HMM模型实例

一个简单的实例来描述上面抽象出的HMM模型。这是一个盒子与球的模型,例子来源于李航的《统计学习方法》。

假设我们有3个盒子,每个盒子里都有红色和白色两种球,这三个盒子里球的数量分别是:

                                                

按照下面的方法从盒子里抽球,开始的时候,从第一个盒子抽球的概率是0.2,从第二个盒子抽球的概率是0.4,从第三个盒子抽球的概率是0.4。以这个概率抽一次球后,将球放回。然后从当前盒子转移到下一个盒子进行抽球。规则是:如果当前抽球的盒子是第一个盒子,则以0.5的概率仍然留在第一个盒子继续抽球,以0.2的概率去第二个盒子抽球,以0.3的概率去第三个盒子抽球。如果当前抽球的盒子是第二个盒子,则以0.5的概率仍然留在第二个盒子继续抽球,以0.3的概率去第一个盒子抽球,以0.2的概率去第三个盒子抽球。如果当前抽球的盒子是第三个盒子,则以0.5的概率仍然留在第三个盒子继续抽球,以0.2的概率去第一个盒子抽球,以0.3的概率去第二个盒子抽球。如此下去,直到重复三次,得到一个球的颜色的观测序列: 

                                                        O={红,白,红}.

注意在这个过程中,观察者只能看到球的颜色序列,却不能看到球是从哪个盒子里取出的。

那么按照我们上一节HMM模型的定义,我们的观察集合是: 

                                                       V={红,白},M=2

我们的状态集合是:

                                                      Q={盒子1,盒子2,盒子3},N=3

而观察序列和状态序列的长度为3.

初始状态分布为:

                                                     \Pi=(0.2,0.4,0.4)^T

状态转移概率分布矩阵为:

                                                  A=\begin{pmatrix} 0.5&0.2 &0.3 \\ 0.3& 0.5 &0.2 \\ 0.2&0.3 &0.5 \end{pmatrix}

观测状态概率矩阵为:

                                                B=\begin{pmatrix} 0.5 &0.5 \\ 0.4&0.6 \\ 0.7&0.3 \end{pmatrix}

从上一节的例子,可以抽象出HMM观测序列生成的过程。

输入的是HMM的模型\lambda =(A,B,\Pi ),观测序列的长度T

输出是观测序列O={o_1,o_2,...o_T}

生成的过程如下:

 1)根据初始状态概率分布Π生成隐藏状态i_1

 2) for t from 1 to T

   a. 按照隐藏状态it的观测状态分布b_i___t(k)生成观察状态o_t.   
           b. 按照隐藏状态it的状态转移概率分布a_i___t _i___t___+___1产生隐藏状态i_t_+_1.

所有的o_t一起形成观测序列O={o_1,o_2,...o_T}

HMM模型一共有三个经典的问题需要解决:

 1) 评估观察序列概率。即给定模型λ=(A,B,Π)和观测序列O={}{o_1,o_2,...o_T},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向后向算法。

 2)模型参数学习问题。即给定观测序列O={o_1,o_2,...o_T},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baun-Welch算法。这个问题是HMM模型三个问题中最复杂的。

 3)预测问题,也称为解码问题。即给定模型λ=(A,B,Π)和观测序列O={o_1,o_2,...o_T},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的维特比(Viterbi)算法。这个问题是HMM模型三个问题中复杂度居中的算法。

Baun-Welch算法,Viterbi解码算法将在下一篇学习日志中介绍。

 

 

 

 

 

你可能感兴趣的:(ASR)