公式输入请参考:
在线Latex公式
Language Model Introduction
语言模型用来判断:是否一句话从语法上通顺 比较: 今天是周日VS今天周日是 全民Al是趋势VS趋势全民Al是 LM是如何判断上面的句子是否符合语法的呢? 如果我们有一个pretrained的LM,对于上面两个例子,就该有:
p
L
M
(
今
天
是
周
日
)
>
p
L
M
(
今
天
周
日
是
)
p_{LM}(今天是周日)>p_{LM}(今天周日是)
p L M ( 今 天 是 周 日 ) > p L M ( 今 天 周 日 是 )
p
L
M
(
全
民
A
I
是
趋
势
)
>
p
L
M
(
趋
势
全
民
A
I
是
)
p_{LM}(全民AI是趋势)>p_{LM}(趋势全民AI是)
p L M ( 全 民 A I 是 趋 势 ) > p L M ( 趋 势 全 民 A I 是 )
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 ( w 1 , w 2 , w 3 , w 4 , w 5 ⋯ w n ) ( 1 )
w
1
,
w
2
,
w
3
,
w
4
w_1, w_2,w_3,w_4
w 1 , w 2 , w 3 , w 4 是句子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 ( 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
(
休
息
∣
今
天
,
是
,
春
节
,
我
们
,
都
)
=
1
2
p(休息|今天,是,春节,我们,都)=\cfrac{1}{2}
p ( 休 息 ∣ 今 天 , 是 , 春 节 , 我 们 , 都 ) = 2 1
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 ( 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 ) 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 ( 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 ) 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 ( 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 )
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 . 0 1 p ( 今 天 ) = 0 . 0 0 2 p ( 周 日 ∣ 是 ) = 0 . 0 0 1 p ( 周 日 I 今 天 ) = 0 . 0 0 0 1 p ( 周 日 ) = 0 . 0 2 p ( 是 ∣ 周 日 ) = 0 . 0 0 0 2 比较:今天是周日VS今天周日是 两句话的概率 可以看到:
p
(
今
天
是
周
日
)
>
p
(
今
天
周
日
是
)
p(今天是周日)>p(今天周日是)
p ( 今 天 是 周 日 ) > p ( 今 天 周 日 是 ) 根据刚才的Markov Assumption,我们可以有不同的LM,下面具体来看。
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 ( 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
(
今
天
,
是
,
春
节
,
我
们
,
都
,
休
息
)
=
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 ( 休 息 ) 可以看到虽然单词位置不一样了,但是计算出来的句子概率都一样,但是上面的句子明显语法要好得多。
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 ( 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 ) 同样是上面两句话: 当然还可以有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 ( 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
(
w
n
)
p(w_n)
p ( w n ) 怎么求? 用一个单词在文档出现的次数,除以文档中单词的总数。 看例子: 语料库如下: 那么下面这句话的概率计算如下图所示:结果是
2
1
9
4
\cfrac{2}{19^4}
1 9 4 2 再看另外一句话: 由于“没有”这个词没有在语料库中出现,导致整句话的概率为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 ( 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
(
w
n
∣
w
n
−
1
)
p(w_n|w_{n-1})
p ( w n ∣ w n − 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}(课程|今天,上午,有)
p L M ( 今 天 上 午 有 课 程 ) = p L M ( 今 天 ) p L M ( 上 午 ∣ 今 天 ) p L M ( 有 ∣ 今 天 , 上 午 ) p L M ( 课 程 ∣ 今 天 , 上 午 , 有 ) 其中:
p
L
M
(
有
∣
今
天
,
上
午
)
=
1
/
2
p_{LM}(有|今天,上午)=1/2
p L M ( 有 ∣ 今 天 , 上 午 ) = 1 / 2
p
L
M
(
课
程
∣
今
天
,
上
午
,
有
)
=
1
p_{LM}(课程|今天,上午,有)=1
p L M ( 课 程 ∣ 今 天 , 上 午 , 有 ) = 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}
P e r p l e x i t y = 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
=
l
o
g
0.002
+
l
o
g
0.01
+
l
o
g
0.1
+
l
o
g
0.01
+
l
o
g
0.02
l
o
g
0.1
6
x=\cfrac{log0.002+log0.01+log0.1+log0.01+log0.02log0.1}{6}
x = 6 l o g 0 . 0 0 2 + l o g 0 . 0 1 + l o g 0 . 1 + l o g 0 . 0 1 + l o g 0 . 0 2 l o g 0 . 1 然后把x带入困惑度公式即可。 当然,除了困惑度,还有召回率,精确率等指标用于不同场景。 Training 38 millon words, test 1.5 million words, WSJ(by Dan Jurafsky) n-gram,n越大越容易过拟合。
平滑处理Smoothing
问题引入
在Estimating Probability这节中,我们需要对等于0的概率进行处理,如果不处理就会出现两个明显不同的语句概率都为0的情况,无法分辨语法的好坏。
语料库 今天 上午 的 天气 很好 我 很 想 出去 运动 但 今天 上午 有 课程 训练营 明天 才 开始
由于画圈的两项都没有在语料库中出现,所以这两项的值为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
P M L E ( w i ∣ w i − 1 ) = c ( w i ) c ( w i − 1 , w i ) ( 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}
P A d d − 1 ( w i ∣ w i − 1 ) = c ( w i ) + V c ( w i − 1 , w i ) + 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
1 9 3 + 1 6 个 1 9 1 , ⋯ , 1 9 1 = 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}
P A d d − k ( w i ∣ w i − 1 ) = c ( w i ) + k V c ( w i − 1 , w i ) + 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 , . . . , 1 0 0 代入,然后比较 方法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
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
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
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
N c 记为出现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
N 3 = 1 , N 2 = 2 , N 1 = 3 对于没有出现过的单词: 观察原来的数据给出的概率:
P
M
L
E
=
0
P_{MLE}=0
P M L E = 0 Good-Turning Smoothing则为:
P
G
T
=
N
1
N
P_{GT}=\cfrac{N_1}{N}
P G T = N N 1 对于出现过的单词: 观察原来的数据给出的概率:
P
M
L
E
=
c
N
P_{MLE}=\cfrac{c}{N}
P M L E = N c Good-Turning Smoothing则为:
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}
P G T = N c ( c + 1 ) N c + 1 ∗ N 1 有的地方用这个:
P
G
T
=
(
c
+
1
)
N
c
+
1
N
c
P_{GT}=\cfrac{(c+1)N_{c+1}}{N_c}
P G T = N c ( c + 1 ) N c + 1 搞不懂。。。。 先用鱼来算一下: 假设你在钓鱼,已经抓到了18只鱼: 10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼…… 下面看词的例子: 下一个是没有出现过的单词:
0.00015
=
N
1
N
=
1132844
7514941065
0.00015=\cfrac{N_1}{N}=\cfrac{1132844}{7514941065}
0 . 0 0 0 1 5 = N N 1 = 7 5 1 4 9 4 1 0 6 5 1 1 3 2 8 4 4 下一个是出现过一次的单词:
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
P G T = N c ( c + 1 ) N c + 1 = 1 1 3 2 8 4 4 ( 1 + 1 ) 2 6 3 6 1 1 = 0 . 4 6 5 3 9 以此类推,可以看到计算结果和test的结果很接近。
缺点及解决
可以看到这个方法在计算出现c频次的单词个数概率的计算要依赖c+1频次的单词出现次数。 假如在文章中出现100次的单词个数概率要先得到出现101次的单词个数,如果101刚好缺失就无法计算了。这个时候我们观察上面的表可以看到,随着频次增加,单词出现的个数是下降的,所以我们可以用曲线拟合一下,估计一下缺失值。