本文档翻译自
srilm手册
ngram-discount.7.html
NAME
ngram-discount – 这里主要说明
srilm中实现的平滑算法
NOTATION
a_z 代表以
a为起始词,以
z为结束词的
ngram,其中
_代表
0个或多个词
p(a_z) 前
n-1个词为
a_的情况下,第
n个词为
z的条件概率
a_ n元
a_z的前
n-1个词构成的前缀
_z n元
a_z的后
n-1个词构成的后缀
c(a_z) n元
a_z在训练语料中出现的次数
n(*_z) 符合
*_z这一模式的独立
n元数目,“
*_z”中‘
*’代表通配符
n1,n[1] 出现次数为
1的
ngram数目
DESCRIPTION
Ngram语言模型主要用于估计前
n-1词为
a_的情况下,第
n个词为
z的概率,即概率
Pr(z|a_),为简单起见,一般使用
P(a_z)表示。估算概率最直接的方式就是分别在训练集中统计
c(a_z)和
c(a_),然后求如下公式,即得到相关概率运算结果:
(
1)
p(a_z) = c(a_z)/c(a_)
如上的概率估算方法又称为最大似然估计方法。该方法比较直观易懂,但存在一个不足点就是对于语料中不存在的
n元,其概率估算结果将为
0。为了避免该情况的发生,可以通过将观察到的
ngram一部分概率分布出去,并将这部分概率值分配到未观察到的
ngram上。这种概率重新分配方式即为通常所说的平滑
(smoothing)或折扣
(discounting)。
大部分平滑算法都可以使用如下公式来表示
(
2)
p(a_z) = (c(a_z) > 0) ? f(a_z) : bow(a_) p(_z)
若
ngram a_z在训练集中发生了,则直接使用概率
f(a_z),该概率值一般都小于最大似然估计概率值结果,这样留下的一部分概率值可用于训练语料中未覆盖到的
n元
a_*。不同的平滑算法区别主要在于采用何种折扣方法对最大似然估计结果进行折扣。
应用公式(
2)计算概率
p(a_z)时,若
ngram a_z在训练语料中没有出现,则直接使用低阶概率分布
p(_z)
,若历史
a_在训练语料中没有出现,即
c(a_) = 0,这时可以直接使用
p(_z)作为当前
ngram的概率值,即
bow(a_) = 1;否则需要将
bow(a_)乘到
p(_z)上,以保证概率分布的归一性,即:
Sum_z p(a_z) = 1
假设
Z为词典中所有词构成的集合,
Z0为词典中所有满足条件
c(a_z) = 0的词构成的集合,
Z1为词典中所有满足条件
c(a_z) > 0的词构成的集合。在
f(a_z)计算好的情况下,
bow(a_)可以通过如下方式估算得到:
(3) Sum_Z p(a_z) = 1
Sum_Z1 f(a_z) + Sum_Z0 bow(a_) p(_z) = 1
bow(a_) = (1 - Sum_Z1 f(a_z)) / Sum_Z0 p(_z)
= (1 - Sum_Z1 f(a_z)) / (1 - Sum_Z1 p(_z))
= (1 - Sum_Z1 f(a_z)) / (1 - Sum_Z1 f(_z))
上式中分母
Sum_Z0 p(_z)代表在历史“
_”条件下,所有满足条件
c(a_z) = 0的词概率之和,而
Z1为词典中所有满足条件
c(a_z) > 0的词构成的集合,因此存在