1、N-gram存在的问题
N-gram作为统计语言模型的重要部分,是学习统计自然语言的重要基石,了解N-gram十分重要。N-gram会因为数据稀疏而导致效果变差,也就是某些n元组在训练样本中未出现,则其样本概率为0,这是一个很差的概率估计,会导致模型估计效果变差,可以通过数据平滑来解决数据稀疏问题。
2、平滑算法
2.1 加法平滑
2.1.1 Laplace平滑
通过给每个n元组都加1,实现将一小部分概率转移到未知事件上,公式如下:
P
L
a
p
(
w
1
,
.
.
.
,
w
n
)
=
C
(
w
1
,
.
.
.
,
w
n
)
+
1
N
+
B
P_{Lap}(w_1,...,w_n)=\frac{C(w_1,...,w_n)+1}{N+B}
PLap(w1,...,wn)=N+BC(w1,...,wn)+1
其中,
N
N
N为总样本数,
B
B
B为
n
n
n元组的总数。这样做其实是假设每个
n
n
n元组都存在相同的先验概率。但是对于一个大词表的稀疏数据集,Laplace平滑就会将太多的概率转移到了未知事件上。
2.1.2 Lidstone平滑
针对Laplace平滑存在的过估计问题,Lidstone不加1,而加一个通常较小的正值
λ
\lambda
λ:
P
L
i
d
(
w
1
,
.
.
.
,
w
n
)
=
C
(
w
1
,
.
.
.
,
w
n
)
+
λ
N
+
B
λ
P_{Lid}(w_1,...,w_n)=\frac{C(w_1,...,w_n)+\lambda}{N+B\lambda}
PLid(w1,...,wn)=N+BλC(w1,...,wn)+λ
它可以看作是在MLE估计和统一的先验概率之间的线性插值,这样可以解决太多的概率空间被转移到未知时间上的缺点。但是这种方法依然存在着两个缺点:1)需要预先猜测一个合适的
λ
\lambda
λ;2)使用Lidstone法则的折扣总是在MLE频率上给出一个线性的概率估计,但是这和低频情况下的经验分布不能很好地吻合。
2.2 Good-Turing估计
Good-Turing估计是很多平滑技术的核心,于1953年古德(I.J.Good)引用图灵(Turing)的方法而提出来的。其基本思想是:利用频率的类别信息来平滑频率。对于任何出现
r
r
r 次的
n
n
n元组,都假设它出现了
r
∗
r^*
r∗ 次。
r
∗
=
(
r
+
1
)
n
r
+
1
n
r
r^∗=(r+1)\frac{n_{r+1}}{n_r}
r∗=(r+1)nrnr+1
其中,
n
r
n_r
nr是训练语料中正好出现
r
r
r次的
n
n
n元组的个数,也就是说,发生
r
r
r次的
n
n
n元组的调整由发生
r
r
r次的
n
n
n元组与发生
r
+
1
r+1
r+1次的
n
n
n元组两个类别共同决定。假设m-gram的
w
1
m
w_1^m
w1m出现了
c
(
w
1
m
)
c(w_1^m)
c(w1m)次,Good_Turing给出其出现的概率为:
P
G
T
(
w
1
m
)
=
c
∗
(
w
1
m
)
N
P_{GT}(w_1^m)=\frac{c^*(w_1^m)}{N}
PGT(w1m)=Nc∗(w1m)
那么对于
c
=
0
c=0
c=0(训练样本中未出现)的样本有:
p
0
=
1
−
∑
c
>
0
N
c
∗
p
c
=
1
−
1
N
∑
c
>
0
N
c
∗
c
∗
=
N
1
N
p0=1-\sum\limits_{c>0}N_c*p_c=1-\frac{1}{N}\sum\limits_{c>0}N_c*c^*=\frac{N_1}{N}
p0=1−c>0∑Nc∗pc=1−N1c>0∑Nc∗c∗=NN1
因此仍然有
N
1
N
\frac{N_1}{N}
NN1的概率余量分配给未出现的元组。
2.3 Katz回退
n-gram允许回退(back off)到越来越短的历史上,它的思路就是如果一个n-gram的条件概率为0,则用(n-1)-gram的条件概率取代,如果(n-1)-gram的条件概率依然为0,继续回退,直到1-gram概率,如果1-gram依然为0,就直接忽略掉该词。
2.4 线性插值
unigram的插值:
P
(
w
t
)
=
λ
P
M
L
(
w
t
)
+
(
1
−
λ
)
1
N
P
M
L
(
w
t
)
=
c
(
w
t
)
N
P(w_t)=\lambda P_{ML}(w_t)+(1-\lambda)\frac{1}{N}\\ P_{ML}(w_t)=\frac{c(w_t)}{N}
P(wt)=λPML(wt)+(1−λ)N1PML(wt)=Nc(wt)
bigram的插值:
P
(
w
t
∣
w
t
−
1
)
=
λ
P
M
L
(
w
t
∣
w
t
−
1
)
+
(
1
−
λ
)
P
(
w
t
)
P
M
L
(
w
t
∣
w
t
−
1
)
=
c
(
w
t
−
1
,
w
t
)
∑
w
t
c
(
w
t
−
1
,
w
t
)
P(w_t|w_{t-1})=\lambda P_{ML}(w_t|w_{t-1})+(1-\lambda)P(w_t)\\ P_{ML}(w_t|w_{t-1})=\frac{c(w_{t-1},w_t)}{\sum_{w_t}c(w_{t-1},w_t)}
P(wt∣wt−1)=λPML(wt∣wt−1)+(1−λ)P(wt)PML(wt∣wt−1)=∑wtc(wt−1,wt)c(wt−1,wt)