文章目录
公式输入请参考: 在线Latex公式
上一节的Noisy Channel Model里面有一个非常重要的部分,就是 p ( t e x t ) p(text) p(text),这个是LM,下面就来看这个模型。
Language Model Introduction
语言模型用来判断:是否一句话从语法上通顺
比较:
今天是周日VS今天周日是
全民Al是趋势VS趋势全民Al是
LM是如何判断上面的句子是否符合语法的呢?
如果我们有一个pretrained的LM,对于上面两个例子,就该有:
p
L
M
(
今
天
是
周
日
)
>
p
L
M
(
今
天
周
日
是
)
p_{LM}(今天是周日)>p_{LM}(今天周日是)
pLM(今天是周日)>pLM(今天周日是)
p
L
M
(
全
民
A
I
是
趋
势
)
>
p
L
M
(
趋
势
全
民
A
I
是
)
p_{LM}(全民AI是趋势)>p_{LM}(趋势全民AI是)
pLM(全民AI是趋势)>pLM(趋势全民AI是)
LM 的目标
Compute the probability of a sentence or sequence of words.
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
(1)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)\tag1
p(s)=p(w1,w2,w3,w4,w5⋯wn)(1)
w
1
,
w
2
,
w
3
,
w
4
w_1, w_2,w_3,w_4
w1,w2,w3,w4是句子s中的单词
Chain Rule for Language Model
Chain Rule推导在第一节有,这里不重复了,根据Chain Rule,公式(1)可以写为:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
1
w
2
)
p
(
w
4
∣
w
1
w
2
w
3
)
p
(
w
5
∣
w
1
w
2
w
3
w
4
)
⋯
p
(
w
n
∣
w
1
w
2
w
3
w
4
⋯
w
n
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_1w_2)p(w_4|w_1w_2w_3)p(w_5|w_1w_2w_3w_4)\cdots p(w_n|w_1w_2w_3w_4\cdots w_{n-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w1w2)p(w4∣w1w2w3)p(w5∣w1w2w3w4)⋯p(wn∣w1w2w3w4⋯wn−1)
根据这个公式,下面看一个例子:

那么再来看里面的每一项是如何计算,假如我们有一个文档,文档中有两句这个话:
今天是春节我们都休息。
今天是春节我们都放假。
由于“今天是春节我们都”这句话后面有两个词,一个是“休息”,一个是“放假”,那么我们说:
p
(
休
息
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
1
2
p(休息|今天,是,春节,我们,都)=\cfrac{1}{2}
p(休息∣今天,是,春节,我们,都)=21
p
(
运
动
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
0
p(运动|今天,是,春节,我们,都)=0
p(运动∣今天,是,春节,我们,都)=0
从上面的计算我们可以看到,有很多项的概率计算的结果很容易是0(只要文档中没有出现过的都是0),那么我们把这个现象称为sparse,下面我们看如何解决这个问题。
Markov Assumption
马尔科夫假设就是用来近似的计算上面的概率的。
1st order Markov Assumption
p
(
休
息
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
p
(
休
息
∣
都
)
p(休息|今天,是,春节,我们,都)=p(休息|都)
p(休息∣今天,是,春节,我们,都)=p(休息∣都)
只关注最近的一个词
2nd order Markov Assumption
p
(
休
息
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
p
(
休
息
∣
我
们
,
都
)
p(休息|今天,是,春节,我们,都)=p(休息|我们,都)
p(休息∣今天,是,春节,我们,都)=p(休息∣我们,都)
3rd order Markov Assumption
p
(
休
息
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
p
(
休
息
∣
春
节
,
我
们
,
都
)
p(休息|今天,是,春节,我们,都)=p(休息|春节,我们,都)
p(休息∣今天,是,春节,我们,都)=p(休息∣春节,我们,都)
抽象为具体的公式:
1st order Markov Assumption:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
2
)
p
(
w
4
∣
w
3
)
p
(
w
5
∣
w
4
)
⋯
p
(
w
n
∣
w
n
−
1
)
=
p
(
w
1
)
∏
i
=
2
n
(
w
i
∣
w
i
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_2)p(w_4|w_3)p(w_5|w_4)\cdots p(w_n|w_{n-1})\\ =p(w_1)\prod_{i=2}^n(w_i|w_{i-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w2)p(w4∣w3)p(w5∣w4)⋯p(wn∣wn−1)=p(w1)i=2∏n(wi∣wi−1)
2nd order Markov Assumption:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
1
w
2
)
p
(
w
4
∣
w
2
w
3
)
p
(
w
5
∣
w
3
w
4
)
⋯
p
(
w
n
∣
w
n
−
1
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
∏
i
=
3
n
(
w
i
∣
w
i
−
2
w
i
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_1w_2)p(w_4|w_2w_3)p(w_5|w_3w_4)\cdots p(w_n|w_{n-1})\\ =p(w_1)p(w_2|w_1)\prod_{i=3}^n(w_i|w_{i-2}w_{i-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w1w2)p(w4∣w2w3)p(w5∣w3w4)⋯p(wn∣wn−1)=p(w1)p(w2∣w1)i=3∏n(wi∣wi−2wi−1)
3rd order Markov Assumption:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
1
w
2
)
p
(
w
4
∣
w
1
w
2
w
3
)
p
(
w
5
∣
w
2
w
3
w
4
)
⋯
p
(
w
n
∣
w
n
−
3
w
n
−
2
w
n
−
1
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
1
w
2
)
∏
i
=
4
n
(
w
i
∣
w
i
−
3
w
i
−
2
w
i
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_1w_2)p(w_4|w_1w_2w_3)p(w_5|w_2w_3w_4)\cdots p(w_n|w_{n-3}w_{n-2}w_{n-1})\\ =p(w_1)p(w_2|w_1)p(w_3|w_1w_2)\prod_{i=4}^n(w_i|w_{i-3}w_{i-2}w_{i-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w1w2)p(w4∣w1w2w3)p(w5∣w2w3w4)⋯p(wn∣wn−3wn−2wn−1)=p(w1)p(w2∣w1)p(w3∣w1w2)i=4∏n(wi∣wi−3wi−2wi−1)
LM计算实例(based 1st order)
假如已知:
p
(
是
∣
今
天
)
=
0.01
p
(
今
天
)
=
0.002
p
(
周
日
∣
是
)
=
0.001
p
(
周
日
I
今
天
)
=
0.0001
p
(
周
日
)
=
0.02
p
(
是
∣
周
日
)
=
0.0002
p(是|今天)=0.01\\ p(今天)=0.002\\ p(周日|是)=0.001\\ p(周日I今天)=0.0001\\ p(周日)=0.02\\ p(是|周日)=0.0002
p(是∣今天)=0.01p(今天)=0.002p(周日∣是)=0.001p(周日I今天)=0.0001p(周日)=0.02p(是∣周日)=0.0002
比较:今天是周日VS今天周日是 两句话的概率


可以看到:
p
(
今
天
是
周
日
)
>
p
(
今
天
周
日
是
)
p(今天是周日)>p(今天周日是)
p(今天是周日)>p(今天周日是)
根据刚才的Markov Assumption,我们可以有不同的LM,下面具体来看。
Language Model
Language Model: Unigram
公式:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
)
p
(
w
3
)
p
(
w
4
)
p
(
w
5
)
⋯
p
(
w
n
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2)p(w_3)p(w_4)p(w_5)\cdots p(w_n)
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2)p(w3)p(w4)p(w5)⋯p(wn)
下面看例子:
p
(
今
天
,
是
,
春
节
,
我
们
,
都
,
休
息
)
=
p
(
今
天
)
p
(
是
)
p
(
春
节
)
p
(
我
们
)
p
(
都
)
p
(
休
息
)
p(今天,是,春节,我们,都,休息)=p(今天)p(是)p(春节)p(我们)p(都)p(休息)
p(今天,是,春节,我们,都,休息)=p(今天)p(是)p(春节)p(我们)p(都)p(休息)
同样的
p
(
今
天
,
春
节
,
是
,
都
,
我
们
,
休
息
)
=
p
(
今
天
)
p
(
春
节
)
p
(
是
)
p
(
都
)
p
(
我
们
)
p
(
休
息
)
p(今天,春节,是,都,我们,休息)=p(今天)p(春节)p(是)p(都)p(我们)p(休息)
p(今天,春节,是,都,我们,休息)=p(今天)p(春节)p(是)p(都)p(我们)p(休息)
可以看到虽然单词位置不一样了,但是计算出来的句子概率都一样,但是上面的句子明显语法要好得多。Unigram的缺点就是不考虑单词的位置。
Language Model: Bigram
基于1st order Markov Assumption
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
2
)
p
(
w
4
∣
w
3
)
p
(
w
5
∣
w
4
)
⋯
p
(
w
n
∣
w
n
−
1
)
=
p
(
w
1
)
∏
i
=
2
n
(
w
i
∣
w
i
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_2)p(w_4|w_3)p(w_5|w_4)\cdots p(w_n|w_{n-1})\\ =p(w_1)\prod_{i=2}^n(w_i|w_{i-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w2)p(w4∣w3)p(w5∣w4)⋯p(wn∣wn−1)=p(w1)i=2∏n(wi∣wi−1)
同样是上面两句话:

当然还可以有Trigram,以此类推后:
Language Model: N-gram
当N>2的时候,也把这个模型称为:higher order LM
最常用还是N=2
如果N=3,就相当于2nd order Markov Assumption。
下面来看看如何来估计模型的概率
估计语言模型的概率
Unigram:Estimating Probability
先看看公式:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
)
p
(
w
3
)
p
(
w
4
)
p
(
w
5
)
⋯
p
(
w
n
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2)p(w_3)p(w_4)p(w_5)\cdots p(w_n)
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2)p(w3)p(w4)p(w5)⋯p(wn)
这里面的每个单词概率
p
(
w
n
)
p(w_n)
p(wn)怎么求?
用一个单词在文档出现的次数,除以文档中单词的总数。
看例子:
语料库如下:

那么下面这句话的概率计算如下图所示:结果是
2
1
9
4
\cfrac{2}{19^4}
1942

再看另外一句话:

由于“没有”这个词没有在语料库中出现,导致整句话的概率为0,这个明显不合理的。
解决方案就是在没有出现过的词语分子上加一个很小的值(这个值也叫:平滑项)。
Bigram:Estimating Probability
先看公式:
p
(
s
)
=
p
(
w
1
,
w
2
,
w
3
,
w
4
,
w
5
⋯
w
n
)
=
p
(
w
1
)
p
(
w
2
∣
w
1
)
p
(
w
3
∣
w
2
)
p
(
w
4
∣
w
3
)
p
(
w
5
∣
w
4
)
⋯
p
(
w
n
∣
w
n
−
1
)
=
p
(
w
1
)
∏
i
=
2
n
(
w
i
∣
w
i
−
1
)
p(s)=p(w_1, w_2,w_3,w_4, w_5\cdots w_n)=p(w_1)p(w2|w_1)p(w_3|w_2)p(w_4|w_3)p(w_5|w_4)\cdots p(w_n|w_{n-1})\\ =p(w_1)\prod_{i=2}^n(w_i|w_{i-1})
p(s)=p(w1,w2,w3,w4,w5⋯wn)=p(w1)p(w2∣w1)p(w3∣w2)p(w4∣w3)p(w5∣w4)⋯p(wn∣wn−1)=p(w1)i=2∏n(wi∣wi−1)
那么里面的每一项:
p
(
w
n
∣
w
n
−
1
)
p(w_n|w_{n-1})
p(wn∣wn−1)如何计算?看例子:


看例子:
语料库如下:

注意,第一今天的概率用的是unigram的算法来计算。


这里也有某项为0,整个句子的概率也为0的情况。同样可以用平滑项来优化。
N-gram:Estimating Probability
N=3,用同样的语料库:
p
L
M
(
今
天
上
午
有
课
程
)
=
p
L
M
(
今
天
)
p
L
M
(
上
午
∣
今
天
)
p
L
M
(
有
∣
今
天
,
上
午
)
p
L
M
(
课
程
∣
今
天
,
上
午
,
有
)
p_{LM}(今天上午有课程)=p_{LM}(今天)p_{LM}(上午|今天)p_{LM}(有|今天,上午)p_{LM}(课程|今天,上午,有)
pLM(今天上午有课程)=pLM(今天)pLM(上午∣今天)pLM(有∣今天,上午)pLM(课程∣今天,上午,有)
其中:
p
L
M
(
有
∣
今
天
,
上
午
)
=
1
/
2
p_{LM}(有|今天,上午)=1/2
pLM(有∣今天,上午)=1/2
p
L
M
(
课
程
∣
今
天
,
上
午
,
有
)
=
1
p_{LM}(课程|今天,上午,有)=1
pLM(课程∣今天,上午,有)=1
评估语言模型Evaluation of Language Model
Q:训练出来的语言模型效果好还是坏?
理想情况下
1.假设有两个语言模型A,B;
2.选定一个特定的任务。比如:拼写纠错;
3.把两个模型A,B都应用在此任务中;
4.最后比较准确率,从而判断A,B的表现。
注意:以上的评估是理想状态,要想完成以上的评估,需要很长的时间或者很多精力。我们希望能找到一种方法,不用执行特定的任务,就能直接判定模型的好坏。这个就是:
Perplexity(困惑度)
公式:
P
e
r
p
l
e
x
i
t
y
=
2
−
(
x
)
x:average log likelihood
Perplexity=2^{-(x)} \text{ x:average log likelihood}
Perplexity=2−(x) x:average log likelihood
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
=
log
0.002
+
log
0.01
+
log
0.1
+
log
0.01
+
log
0.02
+
log
0.1
6
x=\cfrac{\log0.002+\log0.01+\log0.1+\log0.01+\log0.02+\log0.1}{6}
x=6log0.002+log0.01+log0.1+log0.01+log0.02+log0.1
然后把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)
没有加平滑项之前:
P
M
L
E
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
c
(
w
i
)
(2)
P_{MLE}(w_i|w_{i-1})=\cfrac{c(w_{i-1},w_i)}{c(w_i)}\tag2
PMLE(wi∣wi−1)=c(wi)c(wi−1,wi)(2)
这里的分子很容易等于0,因此我们给分子加上1,即便词语没有出现在语料库中,整个项也不会等于0了。
加平滑项之后:
P
A
d
d
−
1
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
+
1
c
(
w
i
)
+
V
P_{Add-1}(w_i|w_{i-1})=\cfrac{c(w_{i-1},w_i)+1}{c(w_i)+V}
PAdd−1(wi∣wi−1)=c(wi)+Vc(wi−1,wi)+1
V代表语料库中的单词数量
这里为什么分母要加上V呢?而不是别的数,或者不是2V,3V呢?看例子来理解:
语料库
今天 上午 的 天气 很好
我 很 想 出去 运动
但 今天 上午 有 课程
训练营 明天 才 开始
这里V=17
用公式2来计算概率:
“今天”出现两次,两次后面都接的“上午”,所以分子分母都有2,然后再分别加1和V:

对于语料库中的其他所有的词都没有出现在“今天”后面,所以分子是0,分母还是2

这些词一共有16个,所以整个概率就是:
3
19
+
1
19
,
⋯
,
1
19
16
个
=
1
\cfrac{3}{19}+\underset{16个}{\cfrac{1}{19},\cdots,\cfrac{1}{19}}=1
193+16个191,⋯,191=1
所有可能性加起来要等于1,这是为什么要在分母加V的理由。
Add-K Smoothing
和Add-one Smoothing非常像,只是把1改为k
P
A
d
d
−
k
(
w
i
∣
w
i
−
1
)
=
c
(
w
i
−
1
,
w
i
)
+
k
c
(
w
i
)
+
k
V
P_{Add-k}(w_i|w_{i-1})=\cfrac{c(w_{i-1},w_i)+k}{c(w_i)+kV}
PAdd−k(wi∣wi−1)=c(wi)+kVc(wi−1,wi)+k
当k=1时,就和Add-one Smoothing一样了。
同样的语料库,我们来看看k=3的情况:

那么不同的k应该如何选择?
方法1:分别把
k
=
1
,
2
,
3
,
4
,
5
,
6
,
.
.
.
,
100
k=1,2,3,4,5,6,...,100
k=1,2,3,4,5,6,...,100代入,然后比较
方法2:把k看做参数,得到一个函数
f
(
k
)
f(k)
f(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出现的频次。
p
(
w
n
∣
w
n
−
1
,
w
n
−
2
)
=
λ
1
p
(
w
n
∣
w
n
−
1
,
w
n
−
2
)
+
λ
2
p
(
w
n
∣
w
n
−
1
)
λ
3
p
(
w
n
)
λ
1
+
λ
2
+
λ
3
=
1
\begin{aligned} p(w_n|w_{n-1},w_{n-2}) &=\lambda_1p(w_n|w_{n-1},w_{n-2}) \\ &+\lambda_2p(w_n|w_{n-1}) \\ &\lambda_3p(w_n)\\ \lambda_1+\lambda_2+\lambda_3=1 \end{aligned}
p(wn∣wn−1,wn−2)λ1+λ2+λ3=1=λ1p(wn∣wn−1,wn−2)+λ2p(wn∣wn−1)λ3p(wn)
Good-Turning Smoothing
https://blog.csdn.net/lt326030434/article/details/87893601
引例
假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼……
Q1:下一个钓到的鱼是鲨鱼的概率是多少?
之前总共18只鱼,只有一条是鲨鱼,所以下一条是鲨鱼的概率是1/18。
Q2:下一条鱼是新鱼种(之前没有出现过)的概率是多少?
之前总共18只鱼,其中包含新鱼种(各一条的)有三次,所以可以估算再次钓到新鱼种的概率是3/18
Q3:既然如此,重新想一下,下一条抓到的鱼为鲨鱼的概率是多少?
问题1没有考虑新鱼种,所以下一条是鲨鱼的概率是1/18,但是考虑新鱼种后,我们要吧概率分一些给新的鱼种,所以在这个条件下下一条是鲨鱼的概率是明显要小于1/18才对。下面来看Good-Turning Smoothing是怎么计算这个考虑新物种的概率。
说明
N
c
N_c
Nc记为出现c次的单词的个数(有多少个单词出现了c次)
例:Sam I am I am Sam I do not eat
Sam:2次
I:3次
am:2次
do:1次
not:1次
eat:1次
那么在这个句子里面
N
3
=
1
,
N
2
=
2
,
N
1
=
3
N_3=1,N_2=2,N_1=3
N3=1,N2=2,N1=3
| 对于没有出现过的单词 | 对于出现过的单词 | |
|---|---|---|
| MLE概率 | P M L E = 0 P_{MLE}=0 PMLE=0 | P M L E = c N P_{MLE}=\cfrac{c}{N} PMLE=Nc |
| Good-Turning概率 | P G T = N 1 N P_{GT}=\cfrac{N_1}{N} PGT=NN1 | P G T = ( c + 1 ) N c + 1 N c ∗ 1 N P_{GT}=\cfrac{(c+1)N_{c+1}}{N_c}*\cfrac{1}{N} PGT=Nc(c+1)Nc+1∗N1 |
有的地方用这个:
P
G
T
=
(
c
+
1
)
N
c
+
1
N
c
P_{GT}=\cfrac{(c+1)N_{c+1}}{N_c}
PGT=Nc(c+1)Nc+1搞不懂。。。。
先用鱼来算一下:
假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼……


根据上面的钓鱼例子,我们大概可以推断一般情况下(不是绝对):
P
G
T
<
P
M
L
E
P_{GT}<P_{MLE}
PGT<PMLE
下面看词的例子:

Adjusted count是GT算法估计出来概率
下一个单词是没有出现过的单词的概率(就是
P
(
新
词
)
=
N
1
N
P(新词)=\cfrac{N_1}{N}
P(新词)=NN1):
0.00015
=
N
1
N
=
1132844
7514941065
0.00015=\cfrac{N_1}{N}=\cfrac{1132844}{7514941065}
0.00015=NN1=75149410651132844
下一个是出现过一次的单词:
P
G
T
=
(
c
+
1
)
N
c
+
1
N
c
=
(
1
+
1
)
263611
1132844
=
0.46539
P_{GT}=\cfrac{(c+1)N_{c+1}}{N_c}=\cfrac{(1+1)263611}{1132844}=0.46539
PGT=Nc(c+1)Nc+1=1132844(1+1)263611=0.46539
以此类推,可以看到计算结果和Test count的结果很接近。
缺点及解决
可以看到这个方法在计算出现c频次的单词个数概率的计算要依赖c+1频次的单词出现次数。
假如在文章中出现100次的单词个数概率要先得到出现101次的单词个数,如果101刚好缺失就无法计算了。这个时候我们观察上面的表可以看到,随着频次增加,单词出现的个数是下降的,所以我们可以用曲线拟合一下,估计一下缺失值。

本文深入探讨了语言模型的基础概念,包括Unigram、Bigram和N-gram模型,以及它们在评估句子语法正确性和概率计算中的作用。文章还介绍了如何通过平滑处理如Add-One Smoothing和Good-Turning Smoothing解决稀疏数据问题,并讨论了困惑度作为评价模型质量的指标。
2635

被折叠的 条评论
为什么被折叠?



