语音识别模型

数字语音识别的基本步骤

数字语音识别的基本模型如下图所示。首先对语音进行处理之后,使用声学模型进行解码,之后将音节与词表进行匹配得到词序列,最后再使用语言模型得到语句。
语音识别模型
在中间的过程中,通过解码后的音学信号序列得到词语序列。常规的方法是使用贝叶斯来计算词语的概率值。
假设XX是声学信号序列,WW是词语序列,那么贝叶斯公式为PΛ(WX)=PλX(XW)PλW(W)P(X)P_{\Lambda}(W|X)=P_{\lambda X}(X|W)\frac{P_{\lambda W}(W)}{P(X)}。在训练的过程中是要最大化maxΛPΛ(WX)max_{\Lambda}P_{\Lambda}(W|X),在语音解码得到词语序列的时候则是最大化maxWPΛ(WX)max_{W}P_{\Lambda}(W|X)

语音识别模型

语音识别常用的模型包括动态时间规整(Dyanmic Time Warping)矢量量化(Vector Quantization)隐马尔可夫模型(Hidden Markov Models)

隐马尔可夫模型

高斯混合密度分布刻画了语音状态(例如音素)以及语音状态之间的时序变迁的统计规律。基本的过程包含三步。

  1. 评估:给定观测向量Y和模型,利用前向后向算法计算得分;
  2. 匹配:给定观测向量Y,用Viterbi算法确定一个优化的状态序列;
  3. 训练:用Baum-Welch算法(类似于EM)重新估计参数,使得得分最大。
    已知一个有限的离散状态序列S={q1,q2,,qN1,qN}S=\{q_1,q_2,\dots,q_{N-1},q_N\},从时间tt到时间t+1t+1,保持当前状态或迁移到另一个状态。从时刻tt状态为qiq_i迁移到时刻t+1t+1状态为qjq_j,概率为aij=P(qt+1=jqt=i),1i,jNa_{ij}=P(q_{t+1}=j|q_t=i),1\leq i,j\leq N。这样就可以得到状态之间的迁移概率矩阵。
    A=[a11a12a1Na21a22a2NaN1aN2aNN] A=\left[\begin{matrix} a_{11} & a_{12} & \dots & a_{1N}\\ a_{21} & a_{22} & \dots & a_{2N}\\ \dots & \dots & \dots & \dots\\ a_{N1} & a_{N2} & \dots & a_{NN} \end{matrix}\right]
    在矩阵AA中,aija_{ij}满足aij0,ija_{ij}\geq0, \forall ij,且j=1Naij=1,i\sum_{j=1}^{N}a_{ij}=1, \forall i
    马尔可夫有两个基本假设:一是过程是无记忆的,即P(qt+1=jqt=i,qt1=k,)=P(qt+1=jqt=i)P(q_{t+1}=j|q_t=i,q_{t-1}=k,\dots)=P(q_{t+1}=j|q_{t}=i);二是马尔可夫过程是时间同质(homogeneous)的,即P(qt+1=jqt=i)=P(qt+1+k=jqt+k=i)P(q_{t+1}=j|q_t=i)=P(q_{t+1+k}=j|q_{t+k}=i)
    在计算某个序列的概率的时候,可以利用马尔可夫的链式规则来计算。例如,计算序列q1,q2,,qTq_1,q_2,\cdots, q_T的概率,
    P(q1,q2,,qT)=P(qTq1,q2,,qT1)P(q1,q2,,qT1)=P(qTqT1)P(q1,q2,,qT1)==P(qTqT1)P(qT1qT2)P(q2q1)P(q1)\begin{aligned}&P(q_1, q_2,\dots, q_T)\\ &=P(q_T|q_1,q_2,\dots,q_{T-1})P(q_1,q_2,\dots,q_{T-1})\\ &=P(q_T|q_{T-1})P(q_1,q_2,\dots,q_{T-1})\\ &=\cdots\\ &=P(q_T|q_{T-1})P(q_{T-1}|q_{T-2})\cdots P(q_2|q_1)P(q_1) \end{aligned}
    上面都是离散状态的隐马尔可夫模型,对于连续的马尔可夫模型,观察值是连续的随机变量XX。某个状态jj对应的观察值统计特性由一个观察值概率密度函数bj(X)b_{j}(X)表示。语音识别模型

前向后向算法

前向后向算法用来计算一个给定观察值序列O=O1,O2,,OTO=O_1,O_2,\dots, O_T以及一个模型λ=(π,A,B)\lambda=(\pi,A,B)P(Oλ)P(O|\lambda)的概率。
设问题为计算P(O1,O2,,OTλ)P(O_1,O_2,\dots, O_T|\lambda),状态序列为q=(q1,q2,,qT)q=(q_1,q_2,\dots, q_T),假设观察值之间是相互独立的,则P(Oq,λ)=Πi=1TP(Otqt,λ)=bq1(O1)bq2(O2)bqT(OT)P(O|q,\lambda)=\Pi_{i=1}^{T}P(O_t|q_t,\lambda)=b_{q_1}(O_1)b_{q_2}(O_2)\dots b_{q_T}(O_T)。如果目标是计算出概率最大的那个序列,直接用这个公式一一计算,则需要计算NTN^T个状态序列。因此,使用前向后向算法相比之下更为高效。前向后向算法类似于动态规划过程。定义前向过程变量αt(i)=P(O1,O2,,Ot,qt=θiλ),1tT\alpha_t(i)=P(O_1,O_2,\dots,O_t,q_t=\theta_{i}|\lambda), 1\leq t \leq Tαt(i)\alpha_t{(i)}是从时刻1至当前时刻tt的观察序列的概率(不是全部序列的概率)。
语音识别模型
前向算法计算过程包括三个步骤。初始时刻的步骤为α1(i)=πibi(oi)\alpha_1(i)=\pi_ib_i(o_i),之后就是逐时刻递推αt+1(j)=[i=1Nαt(i)αij]bj(oi+1)\alpha_{t+1}(j)=[\sum_{i=1}^{N}\alpha_{t}(i)\alpha_{ij}]b_j(o_{i+1})。在最终的结束时刻,P(Oλ)=i=1NαT(i)P(O|\lambda)=\sum_{i=1}^{N}\alpha_T(i)。后向算法与前向算法类似,计算顺序上是从后向前计算。

维特比算法

  1. 初始化:δ1(i)=πibi(O1),1iN\delta_1(i)=\pi_ib_i(O_1), 1 \leq i \leq N, ψ1(i)=0\psi_1(i)=0
  2. 递推过程:δt(j)=max1iN[δt1(i)αij]bi(Ot),2tT,1jN\delta_t(j)=max_{1\leq i \leq N}[\delta_{t-1}(i)\alpha_{ij}]b_i(O_t),2 \leq t \leq T, 1 \leq j \leq N,
    ψt(j)=argmax1iN[δt1(i)αij],2tT,1jN\psi_t(j)=argmax_{1\leq i \leq N}[\delta_{t-1}(i)\alpha_{ij}], 2\leq t \leq T, 1 \leq j \leq N
  3. 终止:P=max1iN[δT(i)]P^*=max_{1\leq i \leq N}[\delta_T(i)],
    qT=argmax1iN[δT(i)]q^*_T=argmax_{1\leq i \leq N}[\delta_T(i)]

最终反向递推得到最佳序列 qt=ψt+1(qt+1),t=T1,T2,,1q_t^*=\psi_{t+1}(q^*_{t+1}),t=T-1,T-2,\dots,1
隐马尔可夫模型可以固定的使用某个语料库得到初始概率分布以及转移矩阵等参数。同样,该模型能够进行训练,从而能够更好的标注特定语料下的语句。
设模型表示为λ(A,B,π)\lambda(A,B,\pi),目标是最大化P(Oλ)P(O|\lambda)。训练的过程可以描述如下:

  • 初始化模型参数 λ0\lambda_0;
  • 使用观测序列OO和模型参数λ\lambda得到新的模型λ~\widetilde{\lambda};
  • λ~λ\widetilde{\lambda} \leftarrow \lambda;
  • 重复步骤2-3,直到 logP(Oλ)logP(Oλ0)<dlogP(O|\lambda)-logP(O|\lambda_0)\lt d