自然语言处理4-5:语言模型之平滑操作

为什么需要平滑操作

假设有一个预料集

我 喜欢 喝 奶茶
我 喜欢 吃 巧克力
我 喜欢 健身
天啦撸,一起同过窗 要出 第三季 了

这个时候要计算“我喜欢喝咖啡”的概率

假设我们用bi-gram模型来计算,也就是说

      P(我喜欢喝咖啡) = P(我)P(喜欢|我)P(喝|喜欢)P(咖啡|喝) = (3/16) * (1)  * (1/3) * (0) = 0

但是我们都容易感觉出来,“我喜欢喝咖啡”是符合语言习惯的句子,也就是说,虽然现在的语料库中没有这个句子,但是将来也有可能出现,但是我们算出的这个句子出现的概率是0,这不符合常识。因为语料库中没有出现“喝”后面接“咖啡”,只能说明这个句子未来出现的概率比较小,但是不排除它会出现,毕竟“我喜欢喝”这个前缀的概率该是很大的,“喝 咖啡”没有出现,只能说明“喝”后面接“咖啡”的概率很小,但是就将这个句子的概率定为0是不科学的。那么,该如何做才能使得没出现的搭配也能有一个小的概率呢?

Add-one smoothing

直接给公式:

$$P(w _{i}| w_{i-1}) = \frac{C(w_{i-1}, w_{i}) + 1}{C(w_{i-1})+v} $$

这里的v是词典库的大小,注意,是词典库的大小,不是训练的预料集分词之后的词语个数。例如,对于上面那个预料集,分词之后有16个单词,但是词典库的大小是12个。所以v是12哦。

分母加1可以理解,为了让那些出现频次为0的$C(w_{i-1}, w_{i})$算出来的概率不为0,从而避免了因为它使得整个句子的概率为0了。

可是为什么分子要加v呢,笨蛋,为了使得$\sum_{w_{i}}^{}  \frac{C(w_{i-1}, w_{i}) + 1}{C(w_{i-1})+v} $为1啊,物理意义就是,词典库中有v个词汇,$w_{i-1}$后面接的单词在这v个词汇之中的概率要为1,也就是加起来为1。

 

add-k Smoothing

没啥好说的,上公式:

$$P(w _{i}| w_{i-1}) = \frac{C(w_{i-1}, w_{i}) + k}{C(w_{i-1})+kv} $$

只是由加1变成了加k而已啦。add-one smoothing和add-k smoothing都是拉普拉斯平滑

 

interpolation

但是其实上面介绍的两个平滑还是会有一个问题没有解决

下面举一个例子

假设我们有语料库

in the bathroom
the kitchen
kithcen
arboretum

如果通过add-one smoothing,我们计算P(kitchen|in the)和P(arboretum|in the)的值是一样的,因为他们的频次都是0,所以值都是(0+1)/(1+ 7) = 1/8。但是我们直观感觉,in the kitchen 肯定要比in the arboretum的概率要大得多,那么这种感觉是怎么来的呢?因为kitchen和the kitchen出现的次数大于arboretum和the arboretum啊笨蛋。所以我们计算tri-gram模型的概率的时候,如果能够考虑bi-gram和unigram的概率,那么就能避免上述情况了。

公式也很简单,如下:

$$P^{'} (w_{n}|w_{n-1},w_{n-2}) = \lambda _{1}P (w_{n}|w_{n-1},w_{n-2})  +\lambda _{2}P (w_{n}|w_{n-1})+\lambda _{3}P (w_{n})$$

其中$\lambda _{1},\lambda _{2},\lambda _{3}$是可以变化的参数,且满足$\lambda _{1} + \lambda _{2} + \lambda _{3} = 1$

 good-turning smoothing

老规矩,先说为什么需要发明这个算法,请看下图哦

 

 Q1:总共18条鱼,有一条鲨鱼,好简单,不就是1/18吗

Q2:对哈,还有可能出现新鱼种,但是这个该怎么算呢,又不知道新鱼种的比例之类的,没关系,对于前面18个已经钓到的鱼来说,鲨鱼,草鱼,鳗鱼都只是钓到了一次,所以是不是可以认为是新鱼种呢,所以概率就是1/6

Q3:咦,既然新鱼种也占了一部分,那确实不能再用1/18表示接下来钓到鲨鱼的概率了呢,那么怎么表示呢,就是如下的公式:

如果对一个语料库进行统计之后,要预测接下来出现某个单词的概率

对于没有出现的单词:

$$P = \frac{N_1}{N} $$

对于出现c次的单词:

$$P = \frac{(c+1)N_{C+1}}{N_C*N} $$

这里的$N_c$指的是在预料集中出现频次为c的单词的个数

实践证明,good-turning算法得出的概率和实际情况很符合,如下图所示:第一列r是出现频次,第二列Nr是相应频次的单词个数,第三列是根据good-turning算法算出的下一次会出现的概率,第四列是在测试集中对相应频次的单词的个数的统计结果,与第三列很相似啊,兄嘚!!!!太激动了,仿佛是我发的论文一样。靠,原来不是我发的

 

posted @ 2020-09-23 20:50  地球上最后一个直男  阅读(898)  评论(0编辑  收藏  举报