1. 隐马尔可夫(HMM)
1.1 词性标注(part-of-speech tagging,POS tagging)
李老师的课程由词性标注问题引出隐马尔可夫模型。
词性标注指的是在一串的字词中标注每一个所属的词性,是输入是序列,输出也是序列的结构化学习问题。
这里就有一个问题,同样的单词可能有不同的词性。
比如在下面的例子中,第一个“saw”是动词,第二个“saw”是名词
1.2 隐马尔可夫模型(Hidden Markov Model,HMM)
利用隐马尔可夫模型完成词性标注有两步:
第一步是基于语法生成一个合法的词性序列(generate a POS sequence based on the grammar)
就是用一个普通的马尔可夫链表示一个句子中相邻词的词性转移关系。
第二步是在第一步生成的词性序列的基础上,基于字典生成一个句子序列。(gengerate a sentence based on the POS sequence;based on a dictionary)
将其一般化,可将第一步的概率称为转移概率(transition probability),第二步的概率称为输出概率(emission probability)。
根据训练数据可以计算这两个概率
具体计算方法:
使用条件概率公式
count(s)为s出现的次数
count(
s
→
s
′
s \rightarrow s'
s→s′)为词性序列中,词性s后接词性
s
′
s'
s′的次数。
count(
s
→
t
s \rightarrow t
s→t)为word t被标记为词性s的次数。
问题是,关于词性的信息我们并不知道。
如果遍历所有情况找联合概率最大值,其时间复杂度较高。
假设每个单词有三种词性,路径就有27条。
这个问题可以使用维特比算法解决。
现在回到HMM的三个基本问题。
具体推导参见 李航:《统计学习方法》
推导注解:一站式解决:隐马尔可夫模型(HMM)全过程推导及实现
词性标注任务中的学习与问题2略有区别,因为训练数据中不仅有句子序列,也有对词做的词性标注,不需要使用EM算法。
假定我们已经训练好了一个隐马尔可夫模型了(训练好的意思,也就是单词到词性的发射概率,词性与词性的转移概率都已经在训练数据中学习得到了)。现在对一个新的句子序列进行词性标注,就是要解决问题3。
最后老师谈到了HMM的缺点:会“脑补”
什么意思呢?
假设现在有9条
N
→
V
→
c
N \rightarrow V \rightarrow c
N→V→c的数据,9条
P
→
V
→
a
P \rightarrow V \rightarrow a
P→V→a的数据以及1条
N
→
D
→
a
N \rightarrow D \rightarrow a
N→D→a的数据。现在计算上一个词性为N, 下一个输出词为a的概率。
P(a|V)P(V|N) = 1/2 x 9/10 = 9/20
P(a|D)P(D|N) = 1 x 1/10 = 1/10
尽管数据中已经有
N
→
D
→
a
N \rightarrow D \rightarrow a
N→D→a,但HMM会认为从没出现的
N
→
V
→
a
N \rightarrow V \rightarrow a
N→V→a概率更大。
2. 条件随机场(CRF)
2.1 基本问题引入
还是用x代表词,y代表词性。
对HMM中的联合概率表达式取对数。
(
x
,
y
)
(x,y)
(x,y)是训练集中一个标注好词性的词序列。
其中
∑
l
=
1
L
l
o
g
P
(
x
l
∣
y
l
)
\sum_{l=1}^LlogP(x_l|y_l)
∑l=1LlogP(xl∣yl)可以表示为下式:
具体举例说明,很容易理解,就是给定词性求输出词项的条件概率连乘的次数取对数的结果。
同理,对联合概率式子中其余的部分也做相同的操作。
l
o
g
P
(
x
,
y
)
logP(x,y)
logP(x,y)就可以写成两个向量的内积,故
P
(
x
,
y
)
=
e
x
p
(
w
⋅
ϕ
(
x
,
y
)
)
P(x,y) = exp(w\cdot\phi(x,y))
P(x,y)=exp(w⋅ϕ(x,y))
向量长度:词性tags数量 x 词项数(Part1) + 词性tags数量 x 词性tags数量 + 2 x 词性tags数量
CRF和HMM不同的地方,可以自己定义
ϕ
(
x
,
y
)
\phi(x,y)
ϕ(x,y)。
2.2 CRF的训练
用MLE准则最大化后验概率,使用gradient ascent优化参数。
前文中已经给出了联合概率的定义,将后验概率转换为联合概率相减。
使用的是梯度上升更新参数。
注:
w
s
,
s
′
=
l
o
g
P
(
s
′
∣
s
)
w_{s,s'} = logP(s'|s)
ws,s′=logP(s′∣s)
w
s
,
t
=
l
o
g
P
(
t
∣
s
)
w_{s,t} = logP(t|s)
ws,t=logP(t∣s)
省略数学推导,推出导数表达式。
使用类似SGD的方式更新参数。
总结:
2.3 CRF和HMM对比
在HMM中,条件概率是根据训练数据计算得到的,而在CRF中,
w
s
,
t
=
l
o
g
P
(
t
∣
s
)
w_{s,t} = logP(t|s)
ws,t=logP(t∣s)是可以被调整优化的参数。
CRF在训练中,会增大符合训练数据的
P
(
x
,
y
)
P(x,y)
P(x,y),减少没有实际出现的
P
(
x
,
y
′
)
P(x,y')
P(x,y′)。
之前在HMM中举到的例子,如果使用CRF,就可能得到不同的结果。
2.4 CRF训练时求偏导的过程
3.扩展
以前的网课中老师有讲到“结构化学习”的概念。
参考博客
可以把HMM/CRF与RNN,LSTM组合使用。