自然语言处理--HMM,MEMM,CRF中的decoding问题

我们知道,这三张模型的decoding都是采用维特比算法,具体的实现过程又不一样,我们一个一个来看,其中有不少精妙处,值得细细评味。

HMM

这里就直接按统计学习方法里的写法了。
我们已经知道了 (A,B,π) ( A , B , π ) 和观测序列 O=(o1,o2,...,oT) O = ( o 1 , o 2 , . . . , o T )
定义在时刻t状态为i的所有单个路径(i_1,i_2,…,i_t)中概率最大值为

δt(i)=maxp(it=i,it1,...,i1,ot,o...,o1|λ) δ t ( i ) = m a x p ( i t = i , i t − 1 , . . . , i 1 , o t , o . . . , o 1 | λ )

递推
δt(i)=max[δt1(j)aji]bi(ot) δ t ( i ) = m a x [ δ t − 1 ( j ) a j i ] b i ( o t )

最后得到
P=maxδT(i) P ∗ = m a x δ T ( i )

iT=argmax[δT(i)] i T ∗ = a r g m a x [ δ T ( i ) ]

这个 iT i T ∗ 正是我们想要的。
其实下面这张写法我更加喜欢。
定义 π(k,v)kv π ( k , v ) 是 以 长 度 为 k 以 v 标 签 结 尾 的 序 列 中 最 大 概 率 的 那 一 条
我们的输入是一条观测序列 (x1,x2,...,xk), ( x 1 , x 2 , . . . , x k ) , 参数 q(s|v) q ( s | v ) e(x|s) e ( x | s ) 就是我们见面HMM的那两个假设嘛。
定义 K K 为所有可能标签的集合。定义K0={}, Kk=K K k = K , k=1,2,...n k = 1 , 2 , . . . n
π(k,v)=maxuKk1(π(k1,u)×q(v|u)×e(xk|v)) π ( k , v ) = m a x u ∈ K k − 1 ( π ( k − 1 , u ) × q ( v | u ) × e ( x k | v ) )

注意我们要记录backpointer,(我也不知道怎么翻译这个)
bp(k,v)=argmaxuKk1(π(k1,u)×q(v|u)×e(xk|v)) b p ( k , v ) = a r g m a x u ∈ K k − 1 ( π ( k − 1 , u ) × q ( v | u ) × e ( x k | v ) )

大家这里一定要注意, 我们要记录的是前一个时刻哪个状态让我们现时刻得到了最大概率。
大家看统计学习方法里的例题,肯定就明白了。

MEMM

我为什么上面说喜欢第二张写法呢,因为那样更具有一般性,比如这个遇到了MEMM,我们依然定义:

π[j,s]=max(p(s|sj1,x1,...,xn)k=1j1p(sk|sk1,x1,...,xm)) π [ j , s ] = m a x ( p ( s | s j − 1 , x 1 , . . . , x n ) ∏ k = 1 j − 1 p ( s k | s k − 1 , x 1 , . . . , x m ) )

你看,针对不同的模型,有不同的展开形式。但是这只是表,里并没有变。
递推形式是:
π[j,s]=maxs(π[j1,s]×p(s|s,x1,...,xn)]) π [ j , s ] = m a x s ′ ( π [ j − 1 , s ′ ] × p ( s | s ′ , x 1 , . . . , x n ) ] )

p(s|s,x1,...,xn)]) p ( s | s ′ , x 1 , . . . , x n ) ] ) 是什么,不就前面说的
p(si|si1,x1,...,xn)=exp(w.ϕ(x1,...,xn,i,si1,si)exp(w.ϕ(x1,...,xn,i,si1,s) p ( s i | s i − 1 , x 1 , . . . , x n ) = e x p ( w . ϕ ( x 1 , . . . , x n , i , s i − 1 , s i ) ∑ e x p ( w . ϕ ( x 1 , . . . , x n , i , s i − 1 , s ′ )

你看,核心是一样的,只不过针对你HMM,MEMM模型建模方式不一样,所以我这里展开的方式就要契合你们本身建模方式的不同。

CRF

CRF有一 丢丢小不同,我开始觉得因为CRF它的建模不是HMM,MEMM那种“步进”式可能在DECODING的时候有点复杂,结果发现没有,还挺简单。
我们的目标是发现(今天真是打了不少的公式,唉,趁着周末有时间多打一点吧,上班就没有时间了):

argmaxsSm=argmaxsSmexp(w.Φ(x,s)ssmexp(w.Φ(x,s))=argmaxsSmexp(w.Φ(x,s))=argmaxsSmw.Φ(x,s)=argmaxsSmw.j=1mϕ(x,j,sj1,sj)=argmaxsSmj=1mw.ϕ(x,j,sj1,sj) a r g m a x s ∈ S m = a r g m a x s ∈ S m e x p ( w . Φ ( x , s ) ∑ s ′ ∈ s m e x p ( w . Φ ( x , s ) ) = a r g m a x s ∈ S m e x p ( w . Φ ( x , s ) ) = a r g m a x s ∈ S m w . Φ ( x , s ) = a r g m a x s ∈ S m w . ∑ j = 1 m ϕ ( x , j , s j − 1 , s j ) = a r g m a x s ∈ S m ∑ j = 1 m w . ϕ ( x , j , s j − 1 , s j )

所以 sj1 s j − 1 sj s j 的转换关系为:
w.ϕ(x,j,sj1,sj) w . ϕ ( x , j , s j − 1 , s j )

从这里我们应该注意到,维特比算法的关键是找到从 sj1 s j − 1 sj s j 的转换关系。找到这样的转换关系就简单了:
π[j,s]=maxs(π[j1,s]+w.ϕ(x,j,sj1,sj)) π [ j , s ] = m a x s ′ ( π [ j − 1 , s ′ ] + w . ϕ ( x , j , s j − 1 , s j ) )

剩下的不用多说,照旧。
好,HMM.MEMM.CRF这个系列我想就先到此为止了,还有很多东西,比如说log-linear模型,还有CRF的参数估计。以后有时间再补充吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值