文章目录
- Language Model Introduction
- LM 的目标
- Chain Rule for Language Model
- Markov Assumption
- LM计算实例(based 1st order)
- Language Model
- Language Model: Unigram
- Language Model: Bigram
- Language Model: N-gram
- 估计语言模型的概率
- Unigram:Estimating Probability
- Bigram:Estimating Probability
- N-gram:Estimating Probability
- 评估语言模型Evaluation of Language Model
- Perplexity(困惑度)
- 平滑处理Smoothing
- 问题引入
- Add-one Smoothing(Laplace Smoothing)
- Add-K Smoothing
- Interpolation
- Good-Turning Smoothing
- 引例
- 说明
- 缺点及解决
公式输入请参考:
上一节的Noisy Channel Model里面有一个非常重要的部分,就是
,这个是LM,下面就来看这个模型。
Language Model Introduction
语言模型用来判断:是否一句话从语法上通顺
比较:
今天是周日VS今天周日是
全民Al是趋势VS趋势全民Al是
LM是如何判断上面的句子是否符合语法的呢?
如果我们有一个pretrained的LM,对于上面两个例子,就该有:
LM 的目标
Compute the probability of a sentence or sequence of words.是句子s中的单词
Chain Rule for Language Model
Chain Rule推导在第一节有,这里不重复了,根据Chain Rule,公式(1)可以写为:
根据这个公式,下面看一个例子:
那么再来看里面的每一项是如何计算,假如我们有一个文档,文档中有两句这个话:
今天是春节我们都休息。
今天是春节我们都放假。
由于“今天是春节我们都”这句话后面有两个词,一个是“休息”,一个是“放假”,那么我们说:
从上面的计算我们可以看到,有很多项的概率计算的结果很容易是0(只要文档中没有出现过的都是0),那么我们把这个现象称为sparse,下面我们看如何解决这个问题。
Markov Assumption
马尔科夫假设就是用来近似的计算上面的概率的。
1st order Markov Assumption
只关注最近的一个词
2nd order Markov Assumption
3rd order Markov Assumption
抽象为具体的公式:
1st order Markov Assumption:
2nd order Markov Assumption:
3rd order Markov Assumption:
LM计算实例(based 1st order)
假如已知:
比较:今天是周日VS今天周日是 两句话的概率
可以看到:
根据刚才的Markov Assumption,我们可以有不同的LM,下面具体来看。
Language Model
Language Model: Unigram
公式:
下面看例子:
同样的
可以看到虽然单词位置不一样了,但是计算出来的句子概率都一样,但是上面的句子明显语法要好得多。Unigram的缺点就是不考虑单词的位置。
Language Model: Bigram
基于1st order Markov Assumption
同样是上面两句话:
当然还可以有Trigram,以此类推后:
Language Model: N-gram
当N>2的时候,也把这个模型称为:higher order LM
最常用还是N=2
如果N=3,就相当于2nd order Markov Assumption。
下面来看看如何来估计模型的概率
估计语言模型的概率
Unigram:Estimating Probability
先看看公式:
这里面的每个单词概率怎么求?
用一个单词在文档出现的次数,除以文档中单词的总数。
看例子:
语料库如下:
那么下面这句话的概率计算如下图所示:结果是
再看另外一句话:
由于“没有”这个词没有在语料库中出现,导致整句话的概率为0,这个明显不合理的。
解决方案就是在没有出现过的词语分子上加一个很小的值(这个值也叫:平滑项)。
Bigram:Estimating Probability
先看公式:
那么里面的每一项:如何计算?看例子:
看例子:
语料库如下:
注意,第一今天的概率用的是unigram的算法来计算。
这里也有某项为0,整个句子的概率也为0的情况。同样可以用平滑项来优化。
N-gram:Estimating Probability
N=3,用同样的语料库:
其中:
评估语言模型Evaluation of Language Model
Q:训练出来的语言模型效果好还是坏?
理想情况下
1.假设有两个语言模型A,B;
2.选定一个特定的任务。比如:拼写纠错;
3.把两个模型A,B都应用在此任务中;
4.最后比较准确率,从而判断A,B的表现。
注意:以上的评估是理想状态,要想完成以上的评估,需要很长的时间或者很多精力。我们希望能找到一种方法,不用执行特定的任务,就能直接判定模型的好坏。这个就是:
Perplexity(困惑度)
公式:
Perplexity通常用于无监督学习的模型的评估。x是在训练集中计算出来的 ,我们希望x越大越好。
一般,我们是把LM放到语料库中,就可以得到x:
Perplexity是越小越好。下看例子如何计算Perplexity:
假设训练好的Bigram
p(天气|今天)=0.01
p(今天)=0.002
p(很好|天气)=0.1
p(适合|很好)=0.01
p(出去|适合)=0.02
p(运动|出去)=0.1
针对语料库,计算出对应的likelihood:
再把计算出来的likelihood分别取对数log,然后求平均:
然后把x带入困惑度公式即可。
当然,除了困惑度,还有召回率,精确率等指标用于不同场景。
Training 38 millon words, test 1.5 million words, WSJ(by Dan Jurafsky)
n-gram,n越大越容易过拟合。
这里直接给出的是困惑度的公式,没有给这个公式怎么来的,具体看word2vec的论文带读:深度之眼Paper带读笔记NLP.2:word2vec.baseline.1
平滑处理Smoothing
问题引入
在Estimating Probability这节中,我们需要对等于0的概率进行处理,如果不处理就会出现两个明显不同的语句概率都为0的情况,无法分辨语法的好坏。
语料库
今天 上午 的 天气 很好
我 很 想 出去 运动
但 今天 上午 有 课程
训练营 明天 才 开始
使用Bigram计算:
由于画圈的两项都没有在语料库中出现,所以这两项的值为0,导致这两句话的概率都为0,但是我们看到下面的那句话明显要比上面那句话语法要好。
因此我们要引入平滑项。
Add-one Smoothing(Laplace Smoothing)
没有加平滑项之前:
这里的分子很容易等于0,因此我们给分子加上1,即便词语没有出现在语料库中,整个项也不会等于0了。
加平滑项之后:
V代表语料库中的单词数量
这里为什么分母要加上V呢?而不是别的数,或者不是2V,3V呢?看例子来理解:
语料库
今天 上午 的 天气 很好
我 很 想 出去 运动
但 今天 上午 有 课程
训练营 明天 才 开始
这里V=17
用公式2来计算概率:
“今天”出现两次,两次后面都接的“上午”,所以分子分母都有2,然后再分别加1和V:
对于语料库中的其他所有的词都没有出现在“今天”后面,所以分子是0,分母还是2
这些词一共有16个,所以整个概率就是:
所有可能性加起来要等于1,这是为什么要在分母加V的理由。
Add-K Smoothing
和Add-one Smoothing非常像,只是把1改为k
当k=1时,就和Add-one Smoothing一样了。
同样的语料库,我们来看看k=3的情况:
那么不同的k应该如何选择?
方法1:分别把代入,然后比较
方法2:把k看做参数,得到一个函数,来进行优化。那么我们可以用之前的困惑度来评出k的最优值。
Interpolation
先看例子,假如说我们从语料库从得到下面词语的出现次数:
C(in the kitchen)=0
C(the kitchen)=3
C(kitchen)=4
C(arboretum)=0
然后分别计算下面两个东西的条件概率,发现由于C(in the kitchen)=0,下面第一个是为0,由于C(arboretum)=0,所以第二个也是0。
p(kitchen | in the)=0
p(arboretum | in the)=0
按理来说第一个短语的概率要比第二个要高才对。
改进的核心思路:
在计算Trigram概率时同时考虑Unigram,Bigram,Trigram出现的频次。
Good-Turning Smoothing
引例
假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼……
Q1:下一个钓到的鱼是鲨鱼的概率是多少?
之前总共18只鱼,只有一条是鲨鱼,所以下一条是鲨鱼的概率是1/18。
Q2:下一条鱼是新鱼种(之前没有出现过)的概率是多少?
之前总共18只鱼,其中包含新鱼种(各一条的)有三次,所以可以估算再次钓到新鱼种的概率是3/18
Q3:既然如此,重新想一下,下一条抓到的鱼为鲨鱼的概率是多少?
问题1没有考虑新鱼种,所以下一条是鲨鱼的概率是1/18,但是考虑新鱼种后,我们要吧概率分一些给新的鱼种,所以在这个条件下下一条是鲨鱼的概率是明显要小于1/18才对。下面来看Good-Turning Smoothing是怎么计算这个考虑新物种的概率。
说明
记为出现c次的单词的个数(有多少个单词出现了c次)
例:Sam I am I am Sam I do not eat
Sam:2次
I:3次
am:2次
do:1次
not:1次
eat:1次
那么在这个句子里面
对于没有出现过的单词 | 对于出现过的单词 | |
MLE概率 | ||
Good-Turning概率 |
有的地方用这个:搞不懂。。。。
先用鱼来算一下:
假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼……
根据上面的钓鱼例子,我们大概可以推断一般情况下(不是绝对):
下面看词的例子:
Adjusted count是GT算法估计出来概率
下一个单词是没有出现过的单词的概率(就是):
下一个是出现过一次的单词:
以此类推,可以看到计算结果和Test count的结果很接近。
缺点及解决
可以看到这个方法在计算出现c频次的单词个数概率的计算要依赖c+1频次的单词出现次数。
假如在文章中出现100次的单词个数概率要先得到出现101次的单词个数,如果101刚好缺失就无法计算了。这个时候我们观察上面的表可以看到,随着频次增加,单词出现的个数是下降的,所以我们可以用曲线拟合一下,估计一下缺失值。