我们知道,这三张模型的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)中概率最大值为
递推
最后得到
这个 i∗T i T ∗ 正是我们想要的。
其实下面这张写法我更加喜欢。
定义 π(k,v)是以长度为k以v标签结尾的序列中最大概率的那一条 π ( 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 为所有可能标签的集合。定义, Kk=K K k = K , k=1,2,...n k = 1 , 2 , . . . n
注意我们要记录backpointer,(我也不知道怎么翻译这个)
大家这里一定要注意, 我们要记录的是前一个时刻哪个状态让我们现时刻得到了最大概率。
大家看统计学习方法里的例题,肯定就明白了。
MEMM
我为什么上面说喜欢第二张写法呢,因为那样更具有一般性,比如这个遇到了MEMM,我们依然定义:
你看,针对不同的模型,有不同的展开形式。但是这只是表,里并没有变。
递推形式是:
那 p(s|s′,x1,...,xn)]) p ( s | s ′ , x 1 , . . . , x n ) ] ) 是什么,不就前面说的
你看,核心是一样的,只不过针对你HMM,MEMM模型建模方式不一样,所以我这里展开的方式就要契合你们本身建模方式的不同。
CRF
CRF有一 丢丢小不同,我开始觉得因为CRF它的建模不是HMM,MEMM那种“步进”式可能在DECODING的时候有点复杂,结果发现没有,还挺简单。
我们的目标是发现(今天真是打了不少的公式,唉,趁着周末有时间多打一点吧,上班就没有时间了):
所以 sj−1 s j − 1 到 sj s j 的转换关系为:
从这里我们应该注意到,维特比算法的关键是找到从 sj−1 s j − 1 到 sj s j 的转换关系。找到这样的转换关系就简单了:
剩下的不用多说,照旧。
好,HMM.MEMM.CRF这个系列我想就先到此为止了,还有很多东西,比如说log-linear模型,还有CRF的参数估计。以后有时间再补充吧。