Ngram折扣平滑算法

本文详细介绍了N-gram语言模型的平滑算法,包括最大似然估计、回退平滑、插值平滑,特别是Ney的绝对折扣、Kneser-Ney折扣算法,以及Witten-Bell和Ristad的自然折扣算法。平滑的主要目的是避免未在训练数据中出现的ngram概率为0,提高模型的泛化能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文档翻译自 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_           na_z的前 n-1个词构成的前缀
_z           na_z的后 n-1个词构成的后缀
c(a_z)   na_z在训练语料中出现的次数
n(*_z)   符合 *_z这一模式的独立 n元数目,“ *_z”中‘ *’代表通配符
n1,n[1]  出现次数为 1ngram数目
 
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),该概率值一般都小于最大似然估计概率值结果,这样留下的一部分概率值可用于训练语料中未覆盖到的 na_*。不同的平滑算法区别主要在于采用何种折扣方法对最大似然估计结果进行折扣。
 
应用公式( 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的词构成的集合,因此存在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值