基本概念
大规模语料库的出现为自然语言统计处理方法的实现提供了可能,一个句子
s
=
w
1
w
2
⋯
w
m
s = w_1w_2\cdots w_m
s=w1w2⋯wm的先验概率如下:
p
(
s
)
=
p
(
w
1
)
×
p
(
w
2
∣
w
1
)
×
p
(
w
3
∣
w
1
w
2
)
×
⋯
×
p
(
w
m
∣
w
1
⋯
w
m
−
1
)
=
∏
i
=
1
m
p
(
w
i
∣
w
1
⋯
w
i
−
1
)
\begin{aligned} p(s) &= p(w_1)\times p(w_2|w_1)\times p(w_3|w_1w_2)\times\cdots\times p(w_m|w_1\cdots w_{m - 1}) \\ &= \prod_{i = 1}^mp(w_i|w_1\cdots w_{i - 1}) \end{aligned}
p(s)=p(w1)×p(w2∣w1)×p(w3∣w1w2)×⋯×p(wm∣w1⋯wm−1)=i=1∏mp(wi∣w1⋯wi−1)
上面的式子就是语言模型,
w
i
w_i
wi可以是字、词、短语或词类等,称为统计基元,通常以词代之,
w
i
w_i
wi的概率由
w
1
,
⋯
,
w
i
−
1
w_1,\cdots,w_{i - 1}
w1,⋯,wi−1决定,这个称为
w
i
w_i
wi的历史,随着历史基元数量的增加,不同的历史基元数量按照指数级增长,如果共有
L
L
L个不同的基元,例如词汇表,那么对于第
i
i
i个统计基元有
L
i
−
1
L^{i - 1}
Li−1种不同的历史情况,为了解决这个问题,将
w
1
w
2
⋯
w
i
−
1
w_1w_2\cdots w_{i - 1}
w1w2⋯wi−1映射到等价类
S
(
w
1
w
2
⋯
w
i
−
1
)
S(w_1w_2\cdots w_{i - 1})
S(w1w2⋯wi−1),使等价类的数目远远小于原来不同历史基元的数目,有:
p
(
w
i
∣
w
1
,
⋯
,
w
i
−
1
)
=
p
(
w
i
∣
S
(
w
1
,
⋯
,
w
i
−
1
)
)
p(w_i|w_1,\cdots,w_{i - 1}) = p(w_i|S(w_1,\cdots,w_{i - 1}))
p(wi∣w1,⋯,wi−1)=p(wi∣S(w1,⋯,wi−1))
将两个历史映射到同一个等价类的条件是当且仅当这两个历史中的最近的
n
−
1
n - 1
n−1个基元相同,即对于
H
1
:
w
1
w
2
⋯
w
i
−
n
+
1
w
i
−
n
+
2
⋯
w
i
−
1
w
i
⋯
,
H
2
:
v
1
v
2
⋯
v
k
−
n
+
1
v
k
−
n
+
2
⋯
v
k
−
1
v
k
⋯
H_1:w_1w_2\cdots w_{i - n + 1}w_{i - n + 2}\cdots w_{i - 1}w_i\cdots,H_2:v_1v_2\cdots v_{k - n + 1}v_{k - n + 2}\cdots v_{k - 1}v_k\cdots
H1:w1w2⋯wi−n+1wi−n+2⋯wi−1wi⋯,H2:v1v2⋯vk−n+1vk−n+2⋯vk−1vk⋯,要使得
S
(
w
1
,
w
2
,
⋯
,
w
i
)
=
S
(
v
1
,
v
2
,
⋯
,
v
k
)
S(w_1,w_2,\cdots,w_i) = S(v_1,v_2,\cdots,v_k)
S(w1,w2,⋯,wi)=S(v1,v2,⋯,vk),需要满足:
H
1
:
(
w
i
−
n
+
1
,
⋯
,
w
i
)
=
H
2
:
(
v
k
−
n
+
1
,
⋯
,
v
k
)
H_1:(w_{i - n + 1},\cdots,w_i) = H_2:(v_{k - n + 1},\cdots,v_k)
H1:(wi−n+1,⋯,wi)=H2:(vk−n+1,⋯,vk)
上述的这种情况称为
n
n
n元文法/语法模型(n-gram model):
- n = 1:处于第 i i i位上的基元 w i w_i wi独立于历史,一元文法也被写为uni-gram,monogram
- n = 2:2-gram,bi-gram一阶马尔可夫链
- n = 3:3-gram,tri-gram二阶马尔科夫链
为了保证条件概率再
i
=
1
i = 1
i=1的时候有意义,同时为了保证句子内所有字符串的概率和为1,即
∑
s
p
(
s
)
=
1
\sum_sp(s) = 1
∑sp(s)=1,可以在句子首尾增加两个标志:
<
B
O
S
>
w
1
w
2
⋯
w
m
<
E
O
S
>
<BOS>w_1w_2\cdots w_m<EOS>
<BOS>w1w2⋯wm<EOS>,不失一般性,对于
n
>
2
n \gt 2
n>2的n-gram,
p
(
s
)
p(s)
p(s)可以分解为:
p
(
s
)
=
∏
i
=
1
m
+
1
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
p(s) = \prod_{i = 1}^{m + 1}p(w_i|w_{i - n + 1}^{i - 1})
p(s)=i=1∏m+1p(wi∣wi−n+1i−1)
其中
w
i
j
w_i^j
wij表示词序列
w
i
⋯
w
j
w_i\cdots w_j
wi⋯wj,
w
i
−
n
+
1
w_{i - n + 1}
wi−n+1从
w
0
w_0
w0开始,
w
0
w_0
w0表示
<
B
O
S
>
<BOS>
<BOS>,
w
m
+
1
w_{m + 1}
wm+1表示
<
E
O
S
>
<EOS>
<EOS>,例如基于2元文法,
<
B
O
S
>
J
o
h
n
r
e
a
d
a
b
o
o
k
<
E
O
S
>
<BOS>John\ read\ a\ book\ <EOS>
<BOS>John read a book <EOS>的概率表示:
p
(
J
o
h
n
r
e
a
d
a
b
o
o
k
)
=
p
(
J
o
h
n
∣
<
B
O
S
>
)
×
p
(
r
e
a
d
∣
J
o
h
n
)
×
p
(
a
∣
r
e
a
d
)
×
p
(
b
o
o
k
∣
a
)
×
p
(
<
E
O
S
>
∣
b
o
o
k
)
p(John\ read\ a\ book) = p(John|<BOS>) \times p(read|John) \times p(a|read) \times p(book|a) \times p(<EOS>|book)
p(John read a book)=p(John∣<BOS>)×p(read∣John)×p(a∣read)×p(book∣a)×p(<EOS>∣book)
应用1:音字转换问题
给定拼音串得到汉字串,根据下列推理
C
^
S
t
r
i
n
g
=
a
r
g
m
a
x
C
S
t
r
i
n
g
p
(
C
S
t
r
i
n
g
∣
P
i
n
y
i
n
)
=
a
r
g
m
a
x
C
S
t
r
i
n
g
p
(
P
i
n
y
i
n
∣
C
S
t
r
i
n
g
)
×
p
(
C
S
t
r
i
n
g
)
p
(
P
i
n
y
i
n
)
=
a
r
g
m
a
x
C
S
t
r
i
n
g
p
(
P
i
n
y
i
n
∣
C
S
t
r
i
n
g
)
×
p
(
C
S
t
r
i
n
g
)
=
a
r
g
m
a
x
C
S
t
r
i
n
g
p
(
C
S
t
r
i
n
g
)
\begin{aligned} \hat CString &= \mathop{arg\ max}\limits_{CString} p(CString|Pinyin) \\ &= \mathop{arg\ max}\limits_{CString} \frac{p(Pinyin|CString)\times p(CString)}{p(Pinyin)} \\ &= \mathop{arg\ max}\limits_{CString} p(Pinyin|CString)\times p(CString) \\ &= \mathop{arg\ max}\limits_{CString} p(CString) \end{aligned}
C^String=CStringarg maxp(CString∣Pinyin)=CStringarg maxp(Pinyin)p(Pinyin∣CString)×p(CString)=CStringarg maxp(Pinyin∣CString)×p(CString)=CStringarg maxp(CString)
也就是求所有可能的句子对应的概率
汉字分词问题
给定汉字串得到得到分词后的汉字串,例如(他|是|研究|生物|的)
S
^
e
g
=
a
r
g
m
a
x
S
e
g
p
(
S
e
g
∣
T
e
x
t
)
=
a
r
g
m
a
x
S
e
g
p
(
T
e
x
t
∣
S
e
g
)
×
p
(
S
e
g
)
p
(
T
e
x
t
)
=
a
r
g
m
a
x
S
e
g
p
(
T
e
x
t
∣
S
e
g
)
×
p
(
S
e
g
)
=
a
r
g
m
a
x
S
e
g
p
(
S
e
g
)
\begin{aligned} \hat Seg &= \mathop{arg\ max}\limits_{Seg} p(Seg|Text) \\ &= \mathop{arg\ max}\limits_{Seg} \frac{p(Text|Seg)\times p(Seg)}{p(Text)} \\ &= \mathop{arg\ max}\limits_{Seg} p(Text|Seg)\times p(Seg) \\ &= \mathop{arg\ max}\limits_{Seg} p(Seg) \end{aligned}
S^eg=Segarg maxp(Seg∣Text)=Segarg maxp(Text)p(Text∣Seg)×p(Seg)=Segarg maxp(Text∣Seg)×p(Seg)=Segarg maxp(Seg)
也就是求解不同分词情况下的概率,此时统计基元为词
参数估计
对于n-gram,参数
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
p(w_i|w_{i - n + 1}^{i - 1})
p(wi∣wi−n+1i−1)可由最大似然估计得到:
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
=
f
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
=
c
(
w
i
−
n
+
1
i
)
∑
w
i
c
(
w
i
−
n
+
1
i
)
p(w_i|w_{i - n + 1}^{i - 1}) = f(w_i|w_{i - n + 1}^{i - 1}) = \frac{c(w^i_{i - n + 1})}{\sum_{w_i}c(w^i_{i - n + 1})}
p(wi∣wi−n+1i−1)=f(wi∣wi−n+1i−1)=∑wic(wi−n+1i)c(wi−n+1i)
但是会出现由于数据匮乏(稀疏)(sparse data)引起零概率问题,需要数据平滑(data smoothing)
数据平滑
调整最大似然估计的概率值,使零概率增值,使非零概率下调,消除零概率,目的是使测试样本的语言模型困惑度越小越好,困惑度的定义如下:对于一个平滑的n-gram,其概率为
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
p(w_i|w_{i - n + 1}^{i - 1})
p(wi∣wi−n+1i−1),可以计算句子的概率
p
(
s
)
=
∏
i
=
1
m
+
1
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
p(s) = \prod_{i = 1}^{m + 1}p(w_i|w_{i - n + 1}^{i - 1})
p(s)=∏i=1m+1p(wi∣wi−n+1i−1),假设测试语料
T
T
T由
l
T
l_T
lT个句子构成
(
t
1
,
⋯
,
t
l
T
)
(t_1,\cdots,t_{l_T})
(t1,⋯,tlT),则整个测试集的概率为
p
(
T
)
=
∏
i
=
1
l
T
p
(
t
i
)
p(T) = \prod_{i = 1}^{l_T}p(t_i)
p(T)=∏i=1lTp(ti),模型
p
(
w
i
∣
w
i
−
n
+
1
i
−
1
)
p(w_i|w_{i - n + 1}^{i - 1})
p(wi∣wi−n+1i−1)对于测试语料的交叉熵:
H
p
(
T
)
=
−
1
W
T
log
2
p
(
T
)
H_p(T) = -\frac{1}{W_T}\log_2p(T)
Hp(T)=−WT1log2p(T)
其中
W
T
W_T
WT是测试样本
T
T
T的词数,模型
p
p
p的困惑度
P
P
p
(
T
)
PP_p(T)
PPp(T)定义为:
P
P
p
(
T
)
=
2
H
p
(
T
)
PP_p(T) = 2^{H_p(T)}
PPp(T)=2Hp(T)
加1法additive smoothing
每种情况出现的次数加1,以2-gram为例:
p
(
w
i
∣
w
i
−
1
)
=
1
+
c
(
w
i
−
1
w
i
)
∑
w
i
[
1
+
c
(
w
i
−
1
w
i
)
]
=
1
+
c
(
w
i
−
1
w
i
)
∣
V
∣
+
∑
w
i
c
(
w
i
−
1
w
i
)
\begin{aligned} p(w_i|w_{i - 1}) &= \frac{1 + c(w_{i - 1}w_i)}{\sum_{w_i}[1 + c(w_{i - 1}w_i)]} \\ &= \frac{1 + c(w_{i - 1}w_i)}{|V| + \sum_{w_i}c(w_{i - 1}w_i)} \end{aligned}
p(wi∣wi−1)=∑wi[1+c(wi−1wi)]1+c(wi−1wi)=∣V∣+∑wic(wi−1wi)1+c(wi−1wi)
V
V
V为词汇量,即全部可能的基元数
减值法/折扣法discounting
修改训练样本中事件的实际计数,使样本中实际出现的不同事件的概率之和小于1,剩余的概率量分配给未见概率
Good-Turing估计
假设
N
N
N 是原来训练样本数据的大小,
n
r
n_r
nr 是在样本 中正好出现
r
r
r 次的事件的数目(此处事件为 n-gram), 即出现
1
1
1 次的n-gram有
n
1
n_1
n1个,出现
2
2
2 次的 n-gram 有
n
2
n_2
n2个, …,出现
r
r
r 次的有
n
r
n_r
nr 个,那么
N
=
∑
r
=
1
∞
n
r
r
N = \sum_{r = 1}^\infty n_r r
N=∑r=1∞nrr,由于
N
=
∑
r
=
0
∞
n
r
r
∗
=
∑
r
=
0
∞
(
r
+
1
)
n
r
+
1
N = \sum_{r = 0}^\infty n_r r^* = \sum_{r = 0}^\infty (r + 1)n_{r + 1}
N=∑r=0∞nrr∗=∑r=0∞(r+1)nr+1,所以
r
∗
=
(
r
+
1
)
n
r
+
1
n
r
r^* = (r + 1)\frac{n_{r + 1}}{n_r}
r∗=(r+1)nrnr+1,那么Good-Turing估计在样本中出现
r
r
r次的时间的概率为:
p
r
=
r
∗
N
p_r = \frac{r^*}{N}
pr=Nr∗
实际应用中,一般直接用
n
r
+
1
n_{r + 1}
nr+1代替
E
(
n
r
+
1
)
E(n_{r + 1})
E(nr+1),
n
r
n_r
nr代替
E
(
n
r
)
E(n_r)
E(nr),这样原训练样本中所有时间的概率之和为:
∑
r
>
0
n
r
×
p
r
=
1
−
n
1
N
<
1
\sum_{r \gt 0}n_r\times p_r = 1 - \frac{n_1}{N} \lt 1
r>0∑nr×pr=1−Nn1<1
因此,有
n
1
N
\frac{n_1}{N}
Nn1的剩余的概率量可以均分给所有未见事件
r
=
0
r = 0
r=0,Good-Turing估计适用于大词汇集产生的符合多项式分布的大量的观察数据,计算步骤如下:
- 统计 n r n_r nr,计算 r ∗ r^* r∗
- 计算概率 p r p_r pr
- 得到 p 0 = n 1 N p_0 = \frac{n_1}{N} p0=Nn1
- 计算没有出现的情况的次数 n 0 = ∣ V T ∣ − ∑ r > 0 n r n_0 = |V_T| - \sum_{r \gt 0}n_r n0=∣VT∣−∑r>0nr
- 得到那些零概率的概率 p 0 n 0 \frac{p_0}{n_0} n0p0,例如在2-gram中就是那些在历史基元确定的情况下当前基元没有发生的那些情况
- 此时那些概率和不为0,最后一步为归一化
p ^ r = p r ∑ r p r \hat p_r = \frac{p_r}{\sum_rp_r} p^r=∑rprpr
Back-off后备/后退方法
当某一事件在样本中出现的频率大于阈值
K
K
K(通常取K为0或1)时,运用最大似然估计的减值法来估计其概率,否则使用低阶的,即(n-1)gram的概率替代n-gram概率,这种代替需要受归一化因子
α
\alpha
α的作用,也就是对于每个计数
r
>
0
r \gt 0
r>0的n元文法的出现次数减值,把因减值而节省下来的剩余概率根据低阶的(n-1)gram分配给未见事件,下面以二元文法为例,对于一个出现次数为
r
=
c
(
w
i
−
1
i
)
r = c(w^i_{i - 1})
r=c(wi−1i)的2元语法
w
i
−
1
i
w_{i - 1}^i
wi−1i,使用如下公式计算修正的概率:
p
k
a
t
z
(
w
i
∣
w
i
−
1
)
=
{
d
r
C
(
w
i
−
1
w
i
)
C
(
w
i
−
1
)
C
(
w
i
−
1
w
i
)
=
r
>
0
α
(
w
i
−
1
)
p
M
L
(
w
i
)
C
(
w
i
−
1
w
i
)
=
0
p_{katz}(w_i|w_{i - 1}) = \begin{cases} d_r\frac{C(w_{i - 1}w_i)}{C(w_{i - 1})} & C(w_{i - 1}w_i) = r \gt 0 \\ \alpha(w_{i - 1})p_{ML}(w_i) & C(w_{i - 1}w_i) = 0 \\ \end{cases}
pkatz(wi∣wi−1)={drC(wi−1)C(wi−1wi)α(wi−1)pML(wi)C(wi−1wi)=r>0C(wi−1wi)=0
其中
p
M
L
(
w
i
)
p_{ML}(w_i)
pML(wi)表示
w
i
w_i
wi的最大似然估计概率,这个公式的意思是所有具有非零计数
r
r
r的2元语法都根据折扣率
d
r
(
0
<
d
r
<
1
)
d_r(0 \lt d_r \lt 1)
dr(0<dr<1)被减值,折扣率近似等于
r
∗
r
\frac{r^*}{r}
rr∗,减值由Good-Turing估计方法预测,下面是
α
(
w
i
−
1
)
\alpha(w_{i - 1})
α(wi−1)的求法:
∑
w
i
:
r
=
0
α
(
w
i
−
1
)
p
M
L
(
w
i
)
+
∑
w
i
:
r
>
0
p
k
a
t
z
(
w
i
∣
w
i
−
1
)
=
1
α
(
w
i
−
1
)
=
1
−
∑
w
i
:
r
>
0
p
k
a
t
z
(
w
i
∣
w
i
−
1
)
∑
w
i
:
r
=
0
p
M
L
(
w
i
)
\sum_{w_{i:r = 0}}\alpha(w_{i - 1})p_{ML}(w_i) + \sum_{w_{i:r > 0}}p_{katz(w_i|w_{i - 1})} = 1 \\ \alpha(w_{i - 1}) = \frac{1 - \sum_{w_{i:r > 0}}p_{katz(w_i|w_{i - 1})}}{\sum_{w_{i:r = 0}}p_{ML}(w_i)}
wi:r=0∑α(wi−1)pML(wi)+wi:r>0∑pkatz(wi∣wi−1)=1α(wi−1)=∑wi:r=0pML(wi)1−∑wi:r>0pkatz(wi∣wi−1)
绝对减值法Absolute discounting
从每个计数
r
r
r中减去同样的量,剩余的概率量由未见事件平分,设
R
R
R为所有可能事件的数目(当事件为n-gram时,如果统计基元为词,且词汇集的大小为
L
L
L,则
R
=
L
n
R = L^n
R=Ln),那么,样本出现了
r
r
r次的事件的概率可以由如下公式估计:
p
r
=
{
r
−
b
N
r
>
0
b
(
R
−
n
0
)
N
n
0
r
=
0
p_r = \begin{cases} \frac{r - b}{N} & r \gt 0 \\ \frac{b(R - n_0)}{Nn_0} & r = 0 \\ \end{cases}
pr={Nr−bNn0b(R−n0)r>0r=0
其中
n
0
n_0
n0为样本中未出现的事件的数目,
b
b
b为减去的常量,
b
≤
1
,
b
(
R
−
n
0
)
/
N
b \leq 1,b(R - n_0)/N
b≤1,b(R−n0)/N是由于减值而产生的概率量,
N
N
N为样本中出现了
r
r
r次的事件总次数:
n
r
×
r
n_r \times r
nr×r,其中
b
b
b为自由参数,可以通过留存数据的方法求得
b
b
b的上限为:
b
≤
n
1
n
1
+
2
n
2
<
1
b \leq \frac{n_1}{n_1 + 2n_2} \lt 1
b≤n1+2n2n1<1
线性减值法
从每个计数
r
r
r中减去与该计数成正比的量,剩余概率量
α
\alpha
α被
n
0
n_0
n0个未见事件均分
p
r
=
{
(
1
−
α
)
r
N
r
>
0
α
n
0
r
=
0
p_r = \begin{cases} \frac{(1 - \alpha)r}{N} & r \gt 0 \\ \frac{\alpha}{n_0} & r = 0 \\ \end{cases}
pr={N(1−α)rn0αr>0r=0
自由参数
α
\alpha
α的优化值为
n
1
N
\frac{n_1}{N}
Nn1
四种减值法的比较
- Good-Turing 法:对非0事件按公式削减出现的次
数,节留出来的概率均分给0概率事件。 - Katz 后退法:对非0事件按Good-Turing法计算减
值,节留出来的概率按低阶分布分给0概率事件。 - 绝对减值法:对非0事件无条件削减某一固定的出
现次数值,节留出来的概率均分给0概率事件。 - 线性减值法:对非0事件根据出现次数按比例削减
次数值,节留出来的概率均分给0概率事件。
删除插值法Deleted interpolation
从低阶语法估计高阶语法,即当3-gram的值不能从训练数据中准确估计时,用2-gram来替代,同样,当2-gram的值不能从训练语料中准确估计时,可以用1-gram的值来代替,插值公式:
p
(
w
3
∣
w
1
w
2
)
=
λ
3
p
′
(
w
3
∣
w
1
w
2
)
+
λ
2
p
′
(
w
3
∣
w
2
)
+
λ
1
p
′
(
w
3
)
p(w_3|w_1w_2) = \lambda_3p'(w_3|w_1w_2) + \lambda_2p'(w_3|w_2) + \lambda_1p'(w_3)
p(w3∣w1w2)=λ3p′(w3∣w1w2)+λ2p′(w3∣w2)+λ1p′(w3)
其中
λ
1
+
λ
2
+
λ
3
=
1
\lambda_1 + \lambda_2 + \lambda_3 = 1
λ1+λ2+λ3=1,
λ
1
,
λ
2
,
λ
3
\lambda_1,\lambda_2,\lambda_3
λ1,λ2,λ3的确定:将训练语料分为两部分,即从原始语料中删除一部分作为留存数据,第一部分用于估计
p
′
(
w
3
∣
w
1
w
2
)
+
p
′
(
w
3
∣
w
2
)
+
p
′
(
w
3
)
p'(w_3|w_1w_2) + p'(w_3|w_2) + p'(w_3)
p′(w3∣w1w2)+p′(w3∣w2)+p′(w3),第二部分用于计算
λ
1
,
λ
2
,
λ
3
\lambda_1,\lambda_2,\lambda_3
λ1,λ2,λ3,使得语言模型对留存数据的困惑度最小