维特比算法

维特比算法在机器学习中非常重要,在求解隐马尔科夫和条件随机场的预测问题中均用到了维特比算法。实际上,维特比算法不仅是很多自然语言处理的解码算法,也是现代数字通信中使用最频繁的算法。

以一个简单的隐马尔科夫模型为例,

x=(x1,x2,...,xN) 为观测符号, y=(y1,y2,...,yN) 为隐状态序列,要求的预测问题为:


(y1,y2,...,yN)=argmaxP(y1,y2,...,yN|x1,x2,...,xN)

依据马尔科夫假设,上式等价于:

argmaxi=1NP(xi|yi)P(yi|yi1)

在隐马尔科夫链中,任意时刻t下状态的值是有多个的,以拼音转汉字为例,输入拼音“yike”,可能有的值为一颗、一刻、一棵等等,用符号 yij 表示状态 yi 的第j个可能值,将状态序列按值展开,就得到了一个篱笆网络,这也是维特比算法求解最优路径的图结构:

维特比算法_第1张图片

隐马尔科夫的预测问题就是要求图中的一条路径,使得该路径对应的概率值最大。
对应上图来讲,如果直接求的话,有 3N 的组合数,底数3为篱笆网络宽度,指数N为篱笆网络的长度,计算量非常大。维特比利用动态规划的思想来求解概率最大路径(可理解为求图最短路径),使得复杂度正比于序列长度,复杂度为 O(ND2) ,N为长度,D为宽度,从而很好地解决了问题的求解。

维特比算法的基础可以概括为下面三点(吴军:数学之美):
1、如果概率最大的路径经过篱笆网络的某点,则从开始点到该点的子路径也一定是从开始到该点路径中概率最大的。
2、假定第i时刻有k个状态,从开始到i时刻的k个状态有k条最短路径,而最终的最短路径必然经过其中的一条。
3、根据上述性质,我们在计算第i+1状态的最短路径时,只需要考虑从开始到当前的k个状态值的最短路径和当前状态值到第i+1状态值的最短路径即可,如求t=3时的最短路径,等于求t=2时的所有状态结点 y2i 的最短路径加上t=2到t=3的各节点的最短路径。

为了记录中间变量,引入变量 δψ 。定义t时刻到状态为i的所有结点最大概率值(最短路径):


δt(i)=maxP(it=i,it1,...,i1,ot,...,o1|λ),i=1,2,...,N

其中, it 表示最短路径, ot 表示观测符号, λ 表示模型参数。依据上式可以得出变量 δ 的递推式:

δt+1(i)=max[δt(j)aji]bi(ot+1)

i=1,2,...,N;t=1,2,...,T1
表示t时刻处于状态j,t+1时刻转移到状态i且观测到符号 ot+1 的最大概率。
定义 ψt(i) 为时刻t到状态为i的概率最大路径的前一个时刻经过的结点,即它保存了最短路径所经过的结点:

ψt(i)=argmax1jN[δt1(j)aji]

使用维特比算法的一个例子(统计学习方法):
例:给出隐马尔科夫模型参数 λ=(A,B,π) ,
转移矩阵

A=0.50.30.20.20.50.30.30.20.5

观测概率矩阵
B=0.50.40.70.50.60.3

初始状态矩阵
π=0.20.40.4

已知观测序列O=(红,白,红),试求最优状态序列。
求解过程如下:
(1)、计算t=1时刻的概率 δ1(i) ,


δ1(i)=πibi(o1)=πibi()

即求t=1时刻观测到红球,对应的状态i可能是1,2,3的概率,可解得
δ1(1)=0.2×0.5=0.1,
δ1(2)=0.4×0.4=0.16,
δ1(3)=0.4×0.7=0.28
(2)、计算t=2时刻的概率 δ2(i)psi2(i) ,根据前面 δ,ψ 定义来求:
δ2(1)=max1j3[δ1(j)aj1]bi(o2)
=max{0.1×0.5×0.5,0.16×0.3×0.5,0.28×0.2×0.5}
=0.028
ψ2(1)=3
同样可求,
δ2(2)=0.0504,ψ2(2)=3
δ2(3)=0.042,ψ2(3)=3
(3)、计算t=3时刻的概率 δ3(i)psi3(i)
计算过程与t=2时刻的计算过程相同,可得:
δ3(1)=0.00756,ψ3(1)=2
δ3(2)=0.01008,ψ3(2)=2
δ3(3)=0.0147,ψ3(3)=3
(4)、根据最短路径回溯找到所经过的结点
由(3)可知,t=3时,最短路径对应的最大概率为0.0147,为上一时刻t=2时结点3到达当前结点3所得到的概率;
t=2时,由 ψ2(3)=3 可知,最短路径由上一时刻t=1时结点3到当前结点3;
综上,可得到当观测序列为(红,白,红)时最可能对应的状态序列为(3,3,3)。

你可能感兴趣的:(自然语言处理,隐马尔科夫模型,维特比算法)