番外.2.词性标注by Viterbi
Posted oldmao_2001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了番外.2.词性标注by Viterbi相关的知识,希望对你有一定的参考价值。
重新再复习一下NLP,把一些内容以番外的内容记录一下。本节使用维比特算法来实现了一个英文单词词性标注的模型。
公式输入请参考: 在线Latex公式
数据格式说明
数据是一个txt文件,里面包含很多句子,然后按单词(包括标点符号)进行了分词,然后每个词后面对应该词的词性。一个词在不同的语句中词性可能是不一样的。
贴一部分:
Still/RB
,/,
massive/JJ
internal/JJ
debt/NN
has/VBZ
forced/VBN
the/DT
government/NN
to/TO
borrow/VB
massively/RB
on/IN
the/DT
domestic/JJ
market/NN
and/CC
to/TO
offer/VB
inflation-adjusted/JJ
returns/NNS
of/IN
2/CD
%/NN
to/TO
3/CD
%/NN
a/DT
month/NN
just/RB
to/TO
get/VB
investors/NNS
to/TO
hold/VB
on/RP
to/TO
its/PRP$
paper/NN
./.
关于词性不多深入,大概就是有:
NN名词
VB动词
IN介词
模型公式推导
目标描述
假设有一句话
S
S
S可以表示为多个单词
w
w
w的序列
S
=
w
1
w
2
w
3
⋯
S=w_1w_2w_3\\cdots
S=w1w2w3⋯
每个单词在句子中都有对应的词性
z
z
z:
w
1
→
z
1
,
w
2
→
z
2
,
w
3
→
z
3
⋯
w_1\\rightarrow z_1,w_2\\rightarrow z_2,w_3\\rightarrow z_3\\cdots
w1→z1,w2→z2,w3→z3⋯
得到一个词性标注序列
Z
Z
Z:
Z
=
z
1
,
z
2
,
z
3
⋯
Z=z_1,z_2,z_3\\cdots
Z=z1,z2,z3⋯
对于有T个单词的句子,上面序列长度为T
我们的目标是构建一个模型,通过对语料库的训练,可以对新的一个句子
S
′
S'
S′:
S
′
=
w
1
′
w
2
′
w
3
′
⋯
S'=w'_1w'_2w'_3\\cdots
S′=w1′w2′w3′⋯
进行词性标注预测:
Z
′
=
z
1
′
z
2
′
z
3
′
⋯
Z'=z'_1z'_2z'_3\\cdots
Z′=z1′z2′z3′⋯
Noisy Channel Model
根据前面的
Noisy Channel Model的内容,我们可以写出模型就是要使得在给定序列
S
S
S的条件下,词性序列
Z
Z
Z出现概率最大化:
P
(
Z
∣
S
)
=
P
(
S
∣
Z
)
⋅
P
(
Z
)
P(Z|S)= P(S|Z)\\cdot P(Z)
P(Z∣S)=P(S∣Z)⋅P(Z)
其中
P
(
S
∣
Z
)
P(S|Z)
P(S∣Z)是翻译模型(translation model),
P
(
Z
)
P(Z)
P(Z)是语言模型(language model),展开(这里使用约等于是前面部分有独立性条件假设约束进行简化。后面部分按bigram来展开):
P
(
w
1
w
2
⋯
w
N
∣
z
1
z
2
⋯
z
N
)
⋅
P
(
z
1
z
2
⋯
z
N
)
≈
∏
i
=
1
T
P
(
w
i
∣
z
i
)
⋅
P
(
z
1
)
P
(
z
2
∣
z
1
)
P
(
z
3
∣
z
2
)
⋯
P
(
z
n
∣
z
n
−
1
)
P(w_1w_2\\cdots w_N|z_1z_2\\cdots z_N)\\cdot P(z_1z_2\\cdots z_N)\\\\ \\approx\\prod_{i=1}^TP(w_i|z_i)\\cdot P(z_1)P(z_2|z_1)P(z_3|z_2)\\cdots P(z_n|z_{n-1})
P(w1w2⋯wN∣z1z2⋯zN)⋅P(z1z2⋯zN)≈i=1∏TP(wi∣zi)⋅P(z1)P(z2∣z1)P(z3∣z2)⋯P(zn∣zn−1)
目标函数就是:
Z
^
=
a
r
g
max
P
(
Z
∣
S
)
=
a
r
g
max
∏
i
=
1
T
P
(
w
i
∣
z
i
)
⋅
P
(
z
1
)
∏
j
=
2
T
P
(
z
j
∣
z
j
−
1
)
=
a
r
g
max
log
(
∏
i
=
1
T
P
(
w
i
∣
z
i
)
⋅
P
(
z
1
)
∏
j
=
2
T
P
(
z
j
∣
z
j
−
1
)
)
=
a
r
g
max
∑
i
=
1
T
P
(
w
i
∣
z
i
)
+
log
P
(
z
1
)
+
∑
j
=
2
T
P
(
z
j
∣
z
j
−
1
)
(1)
\\begin{aligned} \\hat Z &=arg\\max P(Z|S) \\\\ &=arg\\max \\prod_{i=1}^TP(w_i|z_i)\\cdot P(z_1)\\prod_{j=2}^TP(z_j|z_{j-1}) \\\\ &= arg\\max\\log\\left(\\prod_{i=1}^TP(w_i|z_i)\\cdot P(z_1)\\prod_{j=2}^TP(z_j|z_{j-1}) \\right)\\\\ &=arg\\max\\sum_{i=1}^TP(w_i|z_i)+\\log P(z_1)+\\sum_{j=2}^TP(z_j|z_{j-1}) \\end{aligned}\\tag{1}
Z^=argmaxP(Z∣S)=argmaxi=1∏TP(wi∣zi)⋅P(z1)HanLP中人名识别分析