0
点赞
收藏
分享

微信扫一扫

自然语言处理——语言模型(三)


引言

本文主要探讨了如何用困惑度来评估语言模型的好坏,以及统计语言模型中的几种平滑方法。

评估语言模型

评估语言模型就是判断语言模型的好坏。

一般使用**困惑度(perplexity)**来评估,它的公式为:

其中为平均对数似然。我们希望平均对数似然越大越好,也就是困惑度越小越好。

下面以一个例子来说明。给定一个样本“今天天气很好,适合出去运动”。

自然语言处理——语言模型(三)_语言模型_03


我们来计算这个训练好的Bigram的困惑度。

首先计算,然后我们希望给定“今天”的条件下后面接“天气”的概率越大越好,从语言模型可以得知

接下给定“天气”,看出现“很好”的概率

自然语言处理——语言模型(三)_评估语言模型_07


这样我们就计算出来针对这句话的每个单元的概率,即似然。我们希望似然越大越好。

那如何求平均对数似然呢,对每个概率取对数,然后求所有概率的平均即可。

统计语言模型的平滑方法


自然语言处理——语言模型(三)_平滑方法_08


我们要评估“今天/开始/训练营/课程”和“今天/没有/训练营/课程”这两句话的概率。

我们分别来计算上面每个单词的概率,首先统计语料库中单词总数,所以

同理可以计算出每个单词的概率。

下面看第二个句子“今天/没有/训练营/课程”的概率。

因为单词“没有”未出现在语料库中,导致它的概率为零,最终让整个句子的概率为零。
这个句子显然是合理的,但是其概率为零是不合理的。

为了解决这个问题,我们需要采用平滑的方法,

Add-1 Smoothing

加1平滑也称为拉普拉斯平滑,最早是法国数学家拉普拉斯提出来的。

假设没有平滑,我们要这样计算概率:

拉普拉斯平滑只是把每一项都增加了,因为词典中共有个单词,因此分母中需要增加

分母加的原因是保证条件概率之和为

这样假设遇到没有见过的组合“我们,是”,那么项至少也会是,整个式子的概率也不会是零。

Add-K Smoothing

加k平滑类似加1平滑,不过每一项增加的是(不一定是整数,可以是0.1,0.01)。

要如何选择合适的呢。

我们可以把训练好的语言模型用在验证集中,来计算困惑度。
把困惑度看成是一个关于的函数

我们需要最小化困惑度,也就是要最小化,从而可以找到

Interpolation

我们以一个例子来说明,表示在语料库中出现的次数。

自然语言处理——语言模型(三)_语言模型_33


假设有上面几个单词以及出现的次数,我们如何求

按照以前的方法来计算的话,它们两的概率都为零,从另一个角度来看,即认为"in the"后面出现"kitchen"和"arboretum"(植物园)的概率是一样的。从我们的经验来看,显然是不合理的。

虽然我们没有在训练集中看到这些词语,并不代表未来不会看到。

我们上面的模型是trigram,在trigram中,我们没有看到"in the kitchen"与"in the arboretum",那我们不妨退而求其次,我们看unigram模型,即单个单词出现的概率。

我们可以看到"kichen"出现了4次,而"arboretum"出现了0次,因此Interpolation认为

Interpolation的核心思想是:在计算Trigram的时候,为了更加合理,同时考虑Unigram,Bigram和Trigram出现的频次。

那我们如何公式化表示呢,我们要综合考虑这三个模型,但是显然不能同等对待,每个模型的重要程度肯定是不同的,因此需要增加一个权重。

其中

Good-Turning Smoothing

我们还是用一个例子来阐述,假设你在钓鱼,已经抓到了18只鱼,其中有:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼。

然后有三个问题:

自然语言处理——语言模型(三)_评估语言模型_39


对于第一个问题,最简单的方法就是计算之前我们钓到鲨鱼的概率是多少,就是

然后来看第二个问题,虽然18只鱼里包含了6种鱼了,但是钓到的下一条鱼一定是属于这6种里吗?显然是未必的,可能会是金鱼、八爪鱼…

下一条鱼是新鱼种的概率貌似是很难计算出来的,但是我们有一种方法可以近似地计算出来,假设下一条鱼是新鱼种,那么新鱼种的概率就是

我们从这个角度来思考一下,

自然语言处理——语言模型(三)_语言模型_42


假设我们钓到第15条鱼的时候,有可能后面钓到的鱼是之前没钓到过的鱼种,我们钓到第16条鱼的时候,是一条鲨鱼,是新鱼种。

第17条的时候也是新鱼种草鱼。所以近似的方法就是,我们目前为止钓到条的鱼来近似未来新鱼种的概率

对于第二个问题,一种简单的方法是用后面这3条鱼来估计未来钓到新鱼种的概率。也就是

那我们重新思考一下,下一条抓到鲨鱼的概率是多少,也就是问题3。

在问题1的时候,我们的答案是,这个概率的假设是所有这6种鱼加起来的概率是等于的,即使不存在新鱼种的。

而现在我们认为还存在未知的新鱼种,也就是说之前这6种鱼的概率是小于的,所以下一条鱼为鲨鱼的概率是小于

这就是Good-Turning Smoothing的思想。在细讲该算法之前,先要看一个定义。

是出现次的单词的个数。

看一个例子“Sam I am I am Sam I do not eat”。

  • Sam : 2次
  • I :3次
  • am :2次
  • do : 1次
  • not :1次
  • eat : 1次

我们计算下出现了次的单词,
同理,

下面就来看下Good-Turning Smoothing的算法。

自然语言处理——语言模型(三)_平滑方法_54


它分为两部分,第一部分处理没有出现过的单词,第二部分处理出现过的单词。

  • 在处理没有出现过的单词时,有两种方式。其中这种方式是我们回答第一个问题时的做法;另一种方式是用
  • 在处理出现过的单词时,也有两种方式。第一种方法是比较简单的方法;第二种是基于Good-Turning Smoothing的方法。

我们用这几种方法来对钓鱼的例子来计算新鱼种“飞鱼”的概率。已经抓到了18只鱼,其中有:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼。

  • 先看没有出现过的“飞鱼”:
  • 再看出现过的,假设是“草鱼”(代表草鱼出现的次数,这里是次):
  • ()

缺点:可能碰到出现次数为零的情况。


举报

相关推荐

0 条评论