三元隐马尔科夫模型
定义
定义 2.2(三元隐马尔科夫模型(Trigram Hidden Markov Models,Trigram HMMs)):
trigram HMM 由有限集 V、有限集 K 和以下参数组成:
q(s∣u,v)
s∈K∪{STOP},u,v∈K∪{∗}。q(s∣u,v) 可以理解为标签 s 跟在 (u,v) 后的概率。
e(x∣s)
x∈K,s∈K。e(x∣s) 可以理解为在 s 状态下观察结果为 x 的概率。
定义 S 为所有序列对 ⟨x1…xn,y1…yn+1⟩ 的集合(n≥0,xi∈V,yi∈K,i=1…n,yn+1=STOP)。
然后定义:
p(x1…xn,y1…yn+1)=i=1∏n+1q(yi∣yi−2,yi−1)i=1∏ne(xi∣yi)(2.3)
其中 y0=y−1=∗,∗ 是一个特殊的开始符号。
如:n=3,x1…x3 为一个句子 the dog laughs,y1…y4 为标签序列 D N V STOP。则:
p(x1…xn,y1…yn+1)
=q(D∣∗,∗)×q(N∣∗,D)×q(V∣D,N)×q(STOP∣N,V)×e(the∣D)×e(dog∣N)×e(laughs∣V)
从模型的形式来看,这是一个噪声通道模型:
- q(D∣∗,∗)×q(N∣∗,D)×q(V∣D,N)×q(STOP∣N,V) 是标签序列 D N V STOP 的先验概率(而且这里用了二阶马尔科夫模型)
- e(the∣D)×e(dog∣N)×e(laughs∣V) 是条件概率 p(the dog laugh∣D N V STOP)
独立性假设
考虑一对有随机变量组成的序列 X1…Xn 和 Y1…Yn,其中 Xi 可以为 V 中的任何单词, Yi 可以为 K 中的任何标签。因为 n 是一个随机变量,句子可以为任意长度,所以这里用与变长序列的马尔科夫模型中所用方法类似的方法来处理这个问题。
HMM 的任务是对联合概率进行建模(xi∈V,yi∈K):
P(X1=x1…Xn=xn,Y1=y1…Yn+1=yn+1)
=i=1∏n+1P(Yi=yi∣Yi−2=yi−2,Yi−1=yi−1)i=1∏nP(Xi=xi∣Yi=yi)(2.4)
如果我们假设对任意 i、任意 yi−2,yi−1,yi:
P(Yi=yi∣Yi−2=yi−2,Yi−1=yi−1)=q(yi∣yi−2,yi−1)
且对任意 i、任意 xi,yi:
P(Xi=xi∣Yi=yi)=e(xi∣yi)
那么公式 2.4 就可以写成上一部分中公式 2.3 的形式了。
公式 2.4 是由模型中的独立性假设(Independence Assumptions)推导出来的,首先:
P(X1=x1…Xn=xn,Y1=y1…Yn+1=yn+1)
=P(Y1=y1…Yn+1=yn+1)×P(X1=x1…Xn=xn∣Y1=y1…Yn+1=yn+1)
这一步由链式法则直接推出。现在联合概率已经被分解为了标签序列 y1…yn+1 的概率和在选定了标签序列的情况下 x1…xn+1 的概率,跟噪声通道模型的形式一样。
然后进行独立性假设:
- 假设对任意序列 y1…yn+1:
P(Y1=y1…Yn+1=yn+1)=i=1∏n+1P(Yi=yi∣Yi−2=yi−2,Yi−1=yi−1)
即假设 y1…yn+1 是一个二阶马尔科夫序列,每个状态只依赖于它的前两个状态。
- 假设对任意在给定标签序列 y1…yn+1 的情况下的序列 x1…xn+1:
P(X1=x1…Xn=xn∣Y1=y1…Yn+1=yn+1)
=i=1∏nP(Xi=xi∣X1=x1…Xi−1=xi−1,Y1=y1…Yn+1=yn+1)(2.5)
=i=1∏nP(Xi=xi∣Yi=yi)(2.6)
公式 2.4 是链式法则,公式 2.6 是我们的假设。即我们假设 Xi 只依赖于 Yi,条件独立于其他所有变量。
然后就可以推出公式 2.4 了。
模型生成序列对 y1…yn+1,x1…xn 的过程为:
初始化 i=1,y0=y−1=∗
按分布 q(yi∣yi−2,yi−1) 生成 yi
如果 yi=STOP,则返回 y1…yi,x1…xi−1;否则按分布 e(xi∣yi) 生成 xi,然后 i=i+1,返回步骤 2
参数估计
有一个训练集,包含 x1…xn 和其对应的 y1…yn。定义 c(u,v,s) 为标签序列 (u,v,s) 在训练集中出现的次数,c(u,v) 为 (u,v) 在训练集中出现的次数。定义 c(s⇝x) 为训练集中在 s 状态下观察结果为 x 的概率,如 c(N⇝dog) 为标注为 N 的 dog 出现的概率。
则极大似然估计为:
q(s∣u,v)=c(u,v)c(u,v,s)
e(x∣s)=c(s)c(s⇝x)
该模型的**参数估计(Parameters Estimation)**就是极大似然估计。现在平滑一下参数 q(s∣u,v):
q(s∣u,v)=λ1×qML(s∣u,v)+λ2×qML(s∣v)+λ3×qML(s)
其中 λ1≥0,λ2≥0,λ3≥0,且 λ1+λ2+λ3=1。
该方法的一个问题是,如果单词 x 在训练集中出现的频率很低甚至不出现,e(x∣s) 的值就会很不可靠甚至为 0。后面将讨论解决这个问题的方法。
维比特算法
现在回到找出 argmaxy1…yn+1p(x1…xn,y1…yn+1),即输入序列 x1…xn,找出概率最大的标签序列的问题。按照之前的定义:
p(x1…xn,y1…yn+1)=i=1∏n+1q(yi∣yi−2,yi−1)i=1∏ne(xi∣yi)
可以想到最暴力的方法是列举出所有可能的标签序列 y1…yn+1,用函数 p 对他们进行打分,然后选出分最高的序列即可。对于长度为 n 的输入句子,有 $ \mid \mathcal{K} \mid ^n$ 个可能的标签序列,所以时间复杂度太高,我们需要一种更高效的方法。
基本算法
定义
维比特算法(Viterbi Algorithm)是一种动态规划(Dynamic Programming)算法。给定输入序列 x1…xn,对任意 k∈{1…n},任意序列 y−1,y0,y1,…,yk(yi∈K,i=1…k,y0=y−1=∗),令:
r(y−1,y0,y1,…,yk)=i=1∏kq(yi∣yi−2,yi−1)i=1∏ke(xi∣yi)
也就是只考虑前 k 个元素:
p(x1…xn,y1…yn+1)=r(∗,∗,y1,…,yn)×q(yn+1∣yn−1,yn)=r(∗,∗,y1,…,yn)×q(STOP∣yn−1,yn)(2.7)
为了方便,用 Kk(k∈{−1,…,n})来表示第 k 个元素的所有可能标签:
K−1=K0={∗}
Kk=K for k∈{1…n}
然后对任意 k∈{1…n},u∈Kk−1,v∈Kk,令 S(k,u,v) 为所有序列 y−1,y0,y1,…,yk(yi∈Ki,i∈{−1…k})的集合,其中 yk−1=u,yk=v。也就是说 S(k,u,v) 是所有长度为 k 且以二元组 (u,v) 结尾的标签序列的集合。
令 π(k,u,v) 为长度为 k 且以二元组 (u,v) 结尾的标签序列的最大概率:
π(k,u,v)=⟨y0,y1,…,yk⟩∈S(k,u,v)maxr(y−1,y0,y1,…,yk)
动态规划
然后用动态规划的方法对所有 (k,u,v) 求出 π(k,u,v):
先令 π(0,∗,∗)=1。
命题 1:
对任意 k∈{1…n},u∈Kk−1,v∈Kk:
π(k,u,v)=w∈Kk−2max(π(k−1,w,u)×q(v∣w,u)×e(xk,v))(2.8)
公式 2.7 的正确性显而易见。这里是在枚举所有的 w 值,然后返回最大的 π(k,u,v)。
命题 2:
y1…yn+1maxp(x1…xn,y1…yn+1)=u∈Kn−1,v∈Knmax(π(n,u,v)×q(STOP∣u,v))(2.9)
公式 2.9 可由公式 2.7 推出。
下图展示了该算法的流程,输入为 x1…xn,输出为 maxy1…yn+1p(x1…xn,y1…yn+1):
该算法时间复杂度是 O(n∣K∣3)。
反向指针
上面的算法返回了 maxy1…yn+1p(x1…xn,y1…yn+1)(最大概率),然而我们希望算法能返回 argmaxy1…yn+1p(x1…xn,y1…yn+1)(概率最大的标签序列)。
所以要每一步都要存一个反向指针(backpointers)bp(k,u,v),记录下引出了当前这个概率最高的长度为 k 且以 (u,v) 结尾的序列的前一个状态 w,如下图所示:
优缺点
- 容易训练,只需要在训练集中统计出现次数
- 效果比较好(在命名实体识别任务上准确率高于 90%)
- 当单词很复杂时,对 e(word∣tag) 建模会很困难