语音识别算法原理文档整理(六)

Viterbi算法(解码)

解码的过程就是在给定声学特征的情况下,找到最可能对应的词组的过程,再次看如下求解目的的公式:
这里写图片描述

其中似然概率是在一系列给定声学frame情况下,计算每个对应的分类器得分,然后相乘得出的概率,使得其值变得很小,而P(W)比较大,这样就导致
P(w)权重太大了,所以需要对齐进行缩放,以平衡贡献值,所以把上面公式改写如下:
这里写图片描述
因为P(w)小于1,使LMSF大于1,(5-15),这样就减小了P(w)对整个公式的贡献,以达到缩放的目的。
但是在P(w)中以上惩罚对词插入的情况下是有副作用的,所以改写如下:
这里写图片描述
在log形式展开,最后解码的目标就是如下公式所示:
这里写图片描述

有了上述的目标公式,接下来就要讨论,如何解码取其最大值
解码中最常用的是Viterbi算法,首先看一下语音识别中HMM模型:
Q = q1q2 …qN 对应subphone的状态序列
A = a01a02 …an1 …ann 状态转移矩阵(自环和转到下一个状态)
B = bi(ot) 观测似然,或者叫做发射概率,代表在t时刻,状态i产生声音倒谱特征O的概率
下图为识别数字的HMM结构图。
这里写图片描述

首先我看用前向算法O(N2T) 来进行解码的过程,
举例如下:英文字母five,有对应状态[f], [ay], 和[v] ,观测序列O,如下所示:
这里写图片描述

首先我们引入t ( j) ,记做:在看见前t个观测值之后,处于状态j的概率。
这里写图片描述
这里qt = j 表示在状态序列中,t时刻状态为j,
t ( j) 可以理解为,所有能到到达当前状态的所有路径的概率之和,即:
这里写图片描述
其中,t−1(i) 表示前一个(t-1)之前的路径的概率,
aij 表示概率转移矩阵,表示从状态qi 到当前状态qj 的概率
bj(ot) 叫做状态观测似然,也叫作发射概率,表示给定状态j,观测到ot 的概率
前向算法如下所示:
这里写图片描述
qF 表示结束状态。
假设矩阵A自环概率为0.5,假设矩阵B如下所示:
这里写图片描述
则单词“five”的前向算法过程如下所示:
这里写图片描述
接着讨论Viterbi算法,
Viterbi算法是返回最可能的状态序列,虽然不是最可能的次序列,但是也足够接近了,其时间复杂度为O(N2T) ,
使得vt(j)记做:在给定 λ 的情况下,在看到前t个观测特征Ot,且通过了最可能的q1…qt−1 状态序列的情况下,HMM当前状态为j的概率,即:
这里写图片描述

根据动态规划算法,可以理解为t-1时刻的在状态i时候的最大概率路径到当前时刻t时候,状态为j的概率,记做:
这里写图片描述

vt−1(i) 表示:前一时刻,Viterbit路径的概率;
ai j 表示:状态qi 到状态qj的概率 ;
bj(ot) 表示:状态观测似然,表示为给定状态j,产生观测向量ot 的概率。
根据上式可知,Viterbi算法是在给定观测序列o=(o1o2o3 …oT) 情况下,找到最优的状态序列q=(q1q2q3 …qT)的过程,同时找到对应的最大的概率。对比上面的前向算法可知,他们目标都是一致的,但是Viterbi算法是求其最大值。
Viterbi具体解码算法如下所示:(假设起始状态为0,结束状态为qF,是非发射状态)

这里写图片描述

例子:
假设矩阵A自环概率概率为0.5,假设矩阵B如下所示:
这里写图片描述
则对应的计算数值如下所示:
这里写图片描述
Viterbi解码的真正用处不仅仅是在词内解码,更重要的是可以解码一串词,为了使Viterbi能够进行词间进行解码,我们得增加矩阵A,使其不仅要有词内的状态转移概率,还需要增加从一个词末尾,到另一个词开始的状态转移概率。
下图补充了2-gram间的转移概率。
这里写图片描述
下图展示了2-gram词间解码的过程:
这里写图片描述
一旦一句话的Viterbi解码计算完毕,就可以用过后项指针回溯,来找到最大概率的状态序列,即最大概率的词序列。
如下图所示:最后的回溯词序列为w1wN •••w2

这里写图片描述

猜你喜欢

转载自blog.csdn.net/bvngh3247/article/details/80786724