语言模型概率的平滑方法

1.常用Smoothing 方法

语言模型概率的平滑方法

2. Add-one smoothing

add-one smoothing 也叫拉普拉斯平滑
假设:不使用任何平滑方法,则语言模型的概率计算公式如下(MLE可以不用去管它)
语言模型概率的平滑方法
Add-one smoothing之后(主要为了防止 分母或分子 为0 的情况
语言模型概率的平滑方法
C: 表示出现次数
V: 表示词典库的大小
分母为什么要加 V,而不是 2V, 3V,4V…呢? 先看一个例子
语言模型概率的平滑方法
计算过程:
语言模型概率的平滑方法
所以:分母里面加 V,主要是为了保证计算出来的 P(wi|wi-1) 仍然是一个概率,概率和为1

3. Add-k smoothing

公式:
语言模型概率的平滑方法
当 K = 1时,就是 Add-1 smoothing, 例子
语言模型概率的平滑方法
那到底 K 取何值,才能使语言模型概率计算效果最好呢?这个需要借助语言模型评估指标: Perplexity, 不同的 K ,perplexity也是不同的,所以只要选取在验证集中使 perplexity值最小的 K 就行了
语言模型概率的平滑方法

4.Interpolation

问题:之前方法有什么问题?例子:我们在训练集中,统计了以下单词的词频,C 表示出现的次数。现在要计算 p ( kitchen | in the ) = ? 和 p (arboretum | in the ) = ?
很明显,因为 “ in the kitchen” 出现次数为0, " in the arboretum " 在 语料库中 没有出现,所以这两个 p 的值都是 0
语言模型概率的平滑方法
也就是说 出现 “in the kitchen" 的概率和出现 " in the arboretum" 的概率是相同的(都是0),想想这样真的合理吗?就是说现在我们的训练数据里面没有“in the kitchen" 和" in the arboretum" ,那并不代表我再多收集一点数据,它们就不会出现?
所以:它们的概率等于 0 本身就有问题。再者,arboretum 是个不常见的单词,凭感觉就知道 C(kitchen) 会大于 C(arboretum),那么我们再多收集一点数据时,我们就有理由认为 “in the kitchen" 出现的次数 会大于 " in the arboretum" 。从这个角度考虑,如何修改公式呢?
核心思路:p ( kitchen | in the ) 和 p (arboretum | in the ) 都是 3-gram的形式,我们可以考虑利用 unigram 和 bigram
语言模型概率的平滑方法
考虑不同的情况:当然会想到利用 加权和 来表示啦!
语言模型概率的平滑方法

5.Good-Turning Smoothing

  1. 先来做个小测验
    语言模型概率的平滑方法
    (1) 对于Q1, 我们肯定会认为 p (鲨鱼) = 1/ 18, 因为在 18 条鱼里面只有一条鲨鱼(这就是mle的思想,即不考虑未来情况,看到的就认为是全部)
    (2) 对于Q2,我们已经有了 6 种鱼,第 19 条鱼可能是 金鱼,也可能是鲱鱼等等,那如何计算它们的概率呢?
    一种简单的近似方法就是用,只有一条的鱼种 如鲨鱼,草鱼和鳗鱼 去预测 新鱼种,所以概率 = 3/18
    (3) 对于Q3, 之前我们预测 p (鲨鱼) = 1 / 18, 这个结果是假设整个池塘里面只有 6 种鱼,它们占据了整个概率空间(概率空间大小为1)。而在 Q2 中,我们为这个池塘开辟了一条新鱼种,所以之前6种鱼所占的概率空间 是小于1的 ,因此这个 p(鲨鱼) < 1/18
  2. 计算类似Q2,Q3问题之前,先定义一个变量 Nc, 表示 出现 c 次的单词有多少种?
    语言模型概率的平滑方法
    语言模型概率的平滑方法
  3. 具体算法过程
    语言模型概率的平滑方法

算法分成两个部分:一个是没出现的单词怎么处理,另一个是出现的单词如何处理。
P_mle估计:就是不考虑未来的数据,根据现有的数据计算概率,看到的就是全部。
P_GT估计:就是用Good-Turning_Smoothing 方法
N: 现有语料库的大小
计算如下:
语言模型概率的平滑方法