语音识别入门第四节:隐马尔可夫模型(HMM)

目录

隐马尔可夫模型的基本概念

定义

组成

基本假设

分类

隐马尔可夫模型的三个基本问题

概率计算问题

预测问题

学习问题


隐马尔可夫模型的基本概念

定义

隐马尔可夫模型(Hidden Markov Model,HMM)是关于时间序列的概率模型,描述由一个隐藏的马尔科夫链随机生成不可观测的状态序列(state sequence),再由各个状态生成一个观测而产生观测序列(observation sequence)的过程,序列的每一个位置又可以看作是一个时刻。

组成

HMM由初始概率分布、状态转移概率分布和观测概率分布决定,当观测为离散值时:

  • Q=\{q_{1}q_{2}\cdots q_{N}\}所有可能的状态的集合(N个)
  • V=\{v_{1}v_{2}\cdots v_{M}\}所有可能的观测的集合(M个)
  • I=\{i_{1}i_{2}\cdots i_{T}\}长度为T的状态序列,每个状态均来自状态集合Q
  • O=\{o_{1}o_{2}\cdots o_{T}\}长度为T的观测序列,每个均来自观测集合V
  • A=\left [ a_{ij} \right ]_{N\times N}状态转移概率矩阵,其中a_{ij}=P(i_{t+1}=q_j|i_t=q_i),i=1,2,\cdots,N;j=1,2,\cdots,N,是在时刻t处于状态q_i的条件下,时刻t+1转移到状态q_j的概率。
  • B=\left [ b_{j}(o_t) \right ]_{N\times M}观测概率矩阵,其中b_{j}(o_{t})=P(o_t=v_k|i_t=q_j),k=1,2,\cdots,M;j=1,2,\cdots,N,是在时刻t处于状态q_j的条件下生成观测v_k的概率
  • \pi = (\pi _{i})初始状态概率向量,其中,\pi_{i}=P(i_1=q_i),i=1,2,\cdots,N,是时刻t=1处于状态q_i的概率。

HMM   \lambda =(A,B,\pi)AB\pi称为HMM的三要素

基本假设

齐次马尔可夫性假设:隐藏的马尔科夫链在时刻t的状态只与时刻t-1的状态有关,即P(i_t|i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(i_t|i_{t-1}),t=1,2,\cdots,T

观测独立性假设:观测只和当前时刻的状态有关,即P(o_t|i_T,o_T,i_{T-1},o_{T-1},\cdots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\cdots,i_1,o_1)=P(o_t|i_t)

分类

HMM分类 观测 观测概率分布 例子
离散HMM 离散值 离散(概率) B=\left [ b_j(o_t) \right ]_{N\times M},o_t \in V={v_1,v_2,\cdots,v_m}
连续HMM 实数、向量 连续(概率密度函数)
  • 单个高斯分布:b_j(o_t)=\mathcal{N}(o_t;\mu_j;\Sigma_j)
  • 高斯混合模型:b_j(o_t)=\sum_{m=1}^{M} \alpha _{jm}\mathcal{N}(o_t;\mu_{jm};\Sigma_{jm})

当HMM的观测概率分布由高斯混合模型(GMM)表示时,合称为GMM-HMM。

GMM-HMM广泛应用于语音识别、词性标注等任务。

根据隐马尔可夫模型定义,可以将一个长度为T的观测序列O=(o_1,o_2,\cdots,o_T)的生成过程描述如下:

语音识别入门第四节:隐马尔可夫模型(HMM)_第1张图片

隐马尔可夫模型的三个基本问题

概率计算问题

已知模型\lambda=(A,B,\pi)和观测序列O=(o_1,o_2,\cdots,o_T),计算概率P(O|\lambda)

概率计算问题最直接的方法如下:

  • 列举所有可能的长度为T的状态序列I=(i_1,i_2,\cdots,i_T)
  • 求各个状态序列I与观测序列O=(o_1,o_2,\cdots,o_T)的联合概率P(O,I|\lambda)
  • 对所有可能的状态序列求和,得到P(O|\lambda)

直接计算法

  • 状态序列I=(i_1,i_2,\cdots,i_T)的概率是P(I|\lambda)=\pi_{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}\cdots a_{i_{T-1}i_{T}}
  • 对固定的状态序列I=(i_1,i_2,\cdots,i_T),观测序列O=(o_1,o_2,\cdots,o_T)的概率是P(O,I|\lambda)=b_{i_{1}}(o_1)b_{i_{2}}(o_2)\cdots b_{i_{T}}(o_T)
  • OI同时出现的联合概率为P(O,I|\lambda)P(I|\lambda)=\pi _{i_{1}}b_{i_{1}}(o_1)a_{i_{1}i_{2}}b_{i_2}(o_2)\cdots a_{i_{T-1}i_{T}}b_{i_T}(o_T)
  • 对所有可能的状态序列I求和,得到观测序列O的概率P(O|\lambda)=\sum_{I}P(O|I,\lambda)P(I|\lambda)=\sum_{i_1,i_2,\cdots,i_T}\pi _{i_{1}}b_{i_{1}}(o_1)a_{i_{1}i_{2}}b_{i_2}(o_2)\cdots a_{i_{T-1}i_{T}}b_{i_T}(o_T)

直接计算法的时间复杂度为O(TN^T),随着数据量变大,计算量暴增,故使用该方法解决实际问题并不可行,需要其他优化的算法来解决该问题。

前向算法

前向概率定义:给定隐马尔可夫模型\lambda,定义到时刻t部分观测序列为o_1,o_2,\cdots,o_t且状态为q_i的概率为前向概率,记为a_t(i)=P(o_1,o_2,\cdots,o_t,i_t=q_i|\lambda)

观测序列概率的前向算法为:

语音识别入门第四节:隐马尔可夫模型(HMM)_第2张图片

前向算法的关键在于每一次的计算,直接引用前一时刻的计算结果,避免重复计算,其时间复杂度降低为O(TN^2)

后向算法

后向概率定义:给定隐马尔可夫模型\lambda,定义在时刻t状态为q_i的条件下,从t+1T的部分观测序列为o_{t+1},o_{t+2},\cdots,o_T的概率为后向概率,记为\beta _{t}(i)=P(o_{t+1},o_{t+2},\cdots,o_T|i_t=q_i,\lambda)

语音识别入门第四节:隐马尔可夫模型(HMM)_第3张图片

预测问题

已知模型\lambda=(A,B,\pi)和观测序列O=(o_1,o_2,\cdots,o_T),计算式概率P(I|O)最大的状态序列I=(i_1,i_2,\cdots,i_T)

Viterbi解码算法:用动态规划求最大路径(最优路径),一个路径对应一个状态序列。

最优路径的特性:如果最优路径在时刻t通过节点i_t^*,那么这一路径从节点i_t^*到终点i_T^*的部分路径,对于从i_t^*i_T^*的所有可能的部分路径来说,必须是最优的。 

只需从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,知道得到时刻t=T状态为i的各条路径的最大概率,时刻t=T的最大概率记为最优路径的概率P^*,最优路径的终点i_T^*也同时得到。(递推)

之后,为了找出最优路径的各个节点,从终点i_T^*开始,由后向前逐步求得节点i_T^*,\cdots,i_1^*,得到最优路径I^*=(i_1^*,i_2^*,\cdots,i_T^*)。(回溯)

算法细节:

首先导入两个变量\delta\psi,定义在时刻t状态为i的所有单个路径(i_1,i_2,\cdots,i_t)中概率最大值为:\delta_t(i)=\max_{i_1,i_2,\cdots,i_{t-1}}P(i_t=i,i_{t-1},\cdots,i_1,o_t,\cdots,o_1|\lambda),i=1,2,\cdots,N

由定义可得变量\delta的递推公式:\begin{aligned} \delta_{t+1}(i)&=\max_{i_1,i_2,\cdots,i_t}P(i_{t+1}=i,i_t,\cdots,i_1,o_{t+1},\cdots,o_1|\lambda)\\ &=\max_{i\le j\le N}\left [ \delta _t(j)a_{ji} \right ]b_i(o_{t+1}),i=1,2,\cdots ,N;t=1,2,\cdots ,T-1 \end{aligned}

定义在时刻t状态为i的所有单个路径(i_1,i_2,\cdots,i_{t-1},i)中概率最大的路径的第t-1个节点为\psi _t(i)=\arg \max _{i \le j \le N}\left [ \delta _{t-1}(j)a_{ji} \right ], i=1,2,\cdots ,N

语音识别入门第四节:隐马尔可夫模型(HMM)_第4张图片

学习问题

已知观测序列O=(o_1,o_2,\cdots,o_T)b_j(o_t)=\sum_{m=1}^Mc_{jm}\mathcal{N}(o_t;\mu_{jm};\Sigma_{jm}),估计HMM-GMM参数\lambda,使P(O|\lambda)最大。

参数\lambda包括:

  • 初始状态概率向量\pi = (\pi _i)
  • 状态转移矩阵A=\left[ a_{ij} \right ]_{N\times N}
  • 状态j的GMM参数(c_{jm},\mu_{jm},\Sigma_{jm}),j=1,2,\cdots,N;m=1,\cdots,M表示GMM分量编号。

Viterbi学习算法

  • 如果已知状态-观测对齐序列,每个观测o_t对应一个具体的状态
  • 状态-观测对齐序列可通过Viterbi解码算法得到,也可通过人工标注得到(代价昂贵)
  • \pi_i可通过最大似然估计得到(数数)
    • C(i)表示初始状态为i的次数
    • \hat{\pi _{i}} = \frac{C(i)}{\sum _{k}C(k)}
  • a_{ij}也可通过最大似然估计得到(数数)
    • C(i\to j)表示从状态i到状态j的转移次数
    • \hat{a}_{ij}=\frac{C(i\to j)}{\sum _{k}C(i\to k)}
  • 可得到每个状态j对应的观测集合Z_j=(y_1,y_2,\cdots,y_N)
  • 每个状态对应一个GMM,也就得到了每个GMM对应的观测集合Z_j=(y_1,y_2,\cdots,y_N)

暂时假设b_j(o_t)=\mathcal{N}(o_t;\mu_{j};\Sigma_{j}),也就是GMM只有一个分量

\left | Z_j \right |表示Z_j的元素个数

\hat{\mu }_j = \frac{\sum _{o_t\in Z_j}o_t}{\left | Z_j \right | }

\hat{\Sigma}_j=\frac{\sum_{o_t\in Z_j}\left ( o_t-\hat{\mu}_j \right )\left ( o_t-\hat{\mu}_j \right )^T }{\left | Z_j \right | }

b_j(o_t)=\sum_{m=1}^Mc_{jm}\mathcal{N}(o_t;\mu_{jm};\Sigma_{jm})时,GMM的参数可用EM算法更新

把下面的\alpha替换成c

把标量y,\mu_k,\sigma _k替换为向量后,即为多元GMM

语音识别入门第四节:隐马尔可夫模型(HMM)_第5张图片

 Viterbi学习算法总结:

  • 初始化HMM-GMM参数,其中每个状态j对应的GMM参数为(\alpha _{jm},\mu_{jm},\Sigma_{jm})
  • 基于HMM-GMM参数\lambda和Viterbi算法得到状态-观测对齐,得到每个观测对应的隐藏状态。
  • 更新参数\lambda
    • \hat{\pi _{i}} = \frac{C(i)}{\sum _{k}C(k)}C(i)表示初始状态为i的次数
    • \hat{a}_{ij}=\frac{C(i\to j)}{\sum _{k}C(i\to k)}C(i\to j)表示从状态i到状态j的转移次数
    • 使用EM算法更新GMM的参数(c_{jm},\mu_{jm},\Sigma_{jm})
    • 重复2,3步,直到收敛

Baum-Welch学习算法

暂时假设b_j(o_t)=\mathcal{N}(o_t;\mu_{j};\Sigma_{j}),也就是GMM只有一个分量

Viterbi学习算法是一种近似、只考虑了最优对齐路径,而我们想考虑所有的路径

每个时刻t每个状态j以一定概率出现,而不是硬的状态-观测对齐

状态占用概率:给定模型\lambda和观测O,在时刻t处于状态q_i的概率为\gamma _t(i)=P(i_t=q_i|O,\lambda )=\frac{\alpha _t(i)\beta _t(i)}{\sum _{i=1}^{N}\alpha _T(i)}

将此概率用于EM算法,学习到参数\lambda(在HMM中称为Baum-Welch算法)

每次迭代分为两步:

  • E步:估计状态占用概率
  • M步:基于估计的状态占用概率,重新估计参数\lambda

对于某个状态,将所有时刻的状态占用概率相加,可以认为是一个软次数

可以使用该软次数重新估计HMM参数:

\hat{\mu }_j=\frac{\sum _{t=1}^{T}\gamma _t(j)o_t}{\sum_{t=1}^{T}\gamma _t(j)}

\hat{\Sigma}_j=\frac{\sum _{t=1}^{T}\gamma _t(j)(o_t-\hat{\mu _j})(o_t-\hat{\mu _j})^T } {\sum _{t=1}^{T}\gamma _t(i)}

与状态占用概率类似,定义给定模型\lambda和观测O,在时刻t处于状态q_i且在时刻t+1处于状态q_j的概率为:

\begin{aligned} \xi _t(i,j)&= P(i_t=q_i,i_{t+1}=q_j|O,\lambda )\\ &=\frac{P(i_t=q_i,i_{t+1}=q_j|O,\lambda )}{P(O|\lambda )}\\ &=\frac{\alpha _t(i)a_{ij}b_j(o_{t+1})\beta _{t+1}(j)} {\sum _{i=1}^{N}\alpha _{T}(i)} \end{aligned}

且有\gamma _t(i)=\sum _{k=1}^{N}\xi _t(i,k)

由该概率可得转移概率和初始概率:

\begin{aligned} \hat{a}_{ij}&=\frac{\sum_{t=1}^{T-1}\xi _t(i,j)} {\sum _{t=1}^{T-1}\sum _{k=1}^{N}\xi _t(i,k)} =\frac{\sum _{t=1}^{T}\xi _t(i,j)}{\sum _{t=1}^{T-1}\gamma _t(i)} \\ \hat{\pi }_i &=\gamma _1(i) \end{aligned}

b_j(o_t)=\sum_{m=1}^Mc_{jm}\mathcal{N}(o_t;\mu_{jm};\Sigma_{jm})时,定义给定模型\lambda和观测O,在时刻t处于状态q_j且为GMM第k个分量的概率为:

\begin{aligned} \zeta _t(j,k)&=P(i_t=q_j,m_t=k|O,\lambda )\\ &=\frac{P(i_t=q_j,m_t=k|O,\lambda )}{P(O|\lambda )} \\ &=\frac{\sum _{i}\alpha _{t-1}(i)a_{ij}c_{jk}b_{jk}(o_t)\beta _t(j)} {\sum _{i=1}^{N}\alpha _T(i)} \end{aligned}

则有:

\begin{aligned} \hat{\mu }_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)o_t}{\sum _{t=1}^{T}\zeta _t(j,k)} \\ \hat{\Sigma}_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)(o_t-\hat{\mu }_{jk} )(o_t-\hat{\mu }_{jk} )^T}{\sum _{t=1}^{T}\zeta _t(j,k)} \\ \hat{c}_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)}{\sum _{t=1}^{T}\sum _{k}\zeta _t(j,k)} \end{aligned}

Baum_Welch学习算法总结

  • 初始化HMM-GMM参数\lambda=\left ( \pi _i,a_{ij},\left (c_{jm},\mu _{jm},\Sigma_{jm} \right ) \right )
  • E步:对所有时间t、状态i
    • 递推计算前向概率\alpha _t(i)和后向概率\beta_t(i)
    • 计算

​​​​​​​\zeta _t(j,k)=\frac{\sum _{i}\alpha _{t-1}(i)a_{ij}c_{jk}b_{jk}(o_t)\beta _t(j)} {\sum _{i=1}^{N}\alpha _T(i)} , \xi _t(i,j)=\frac{\alpha _t(i)a_{ij}b_j(o_{t+1})\beta _{t+1}(j)} {\sum _{i=1}^{N}\alpha _T(i)} , \gamma _t(i)=\sum _{k=1}^{N}\xi _t(i,k)​​​​​​​

  • M步:更新参数

​​​​​​​\begin{aligned} \hat{\mu }_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)o_t}{\sum _{t=1}^{T}\zeta _t(j,k)} \\ \hat{\Sigma}_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)(o_t-\hat{\mu }_{jk} )(o_t-\hat{\mu }_{jk} )^T}{\sum _{t=1}^{T}\zeta _t(j,k)} \\ \hat{c}_{jk}&=\frac{\sum _{t=1}^{T}\zeta _t(j,k)}{\sum _{t=1}^{T}\sum _{k}\zeta _t(j,k)} \\ \hat{a}_{ij}&=\frac{\sum _{t=1}^{T-1}\xi _t(i,j)}{\sum _{t=1}^{T-1}\sum _{k=1}^{N}\xi _t(i,k)} =\frac{\sum _{t=1}^{T-1}\xi _t(i,j)}{\sum _{t=1}^{T-1}\gamma _t(i)} \\ \hat{\pi}_i&=\gamma _1(i) \end{aligned}

  • 重复2,3步,直到收敛

你可能感兴趣的:(语音识别入门,语音识别,人工智能)