Noisy Channel Model
下面这个是贝叶斯公式。因为source是给定的输入,所以它的概率是常数,分母就忽略了。
例如:一直输入的英文,求翻译之后的中文。
语言模型
LM:深度学习模型,判断语义性。
回忆一下联合概率公式
在语料库中先找后面这一句话,找到之后,看后面接的是什么。看是否出现,求概率。
缺点:当这这句话很长的时候,不好找
改进:马尔科夫假设
unigram bigram trigram
-
Uni-gram
-
只考虑单词本身,没有考虑到前后鼓阿西
-
Bi-gram
考虑到了前一个单词 -
N-gram
会考虑到前面更多的单词。
-
Uni-gram下求句子的概率
直接统计语料库中这个词出现的次数 / 总的单词数
举例:注意语料库不能重复,这里应该是17
一个句子首先还是先分词。
缺点:如果一个单词没有出现,那么这个句子的概率就是0,这是不应该的。
改进方法:增加平滑项,让其足够的小,但是不是0就好
-
Bi-gram下统计计算句子的概率
只考虑前面一个单词:先在语料库中找到所有的明天。然后看明天后面跟着的单词是什么即可。
基于Bi-求一个句子的出现概率。也有一定的问题,会出现0.
LM的评价
语言模型的评价:
- 语言模型评价指标:Perplexity
训练好的模型咋先计算x,x是 avg(Log(Likelihood))。。。所以perplexity越小越好
举例:假设基于Bi-模型,对于一句话来讲,先通求得Bi下的P,然后取Log,之后再求平均值。
带入perplexity求得模型好坏的指标。
实验结果:
平滑项
-
Add-one Smooothing
之前我们考虑的是MLE,最大似然估计,就是看一个单词出现之后两一个单词出现的次数。
现在我们在分母上加上V,在分子上加上1,这样就不会出现0项了。
V是语料库中单词的个数。
为什么加V,而不是2V,3V。因为V会是的概率为1.
V是语料库中不重复单词的个数。 -
Add-k-Smoothing
-
也就是坟墓上的V加上一个系数K,分子也加上K。模型调参的时候可以使用。
举例:
在在训练集上训练出一个语言模型,需要在验证机上验证好坏。
使用perplexity,也就是找到一个k,使得perplexity最小。
-
Interpolation
Tri-结果不理想
改进:在Tri-的基础之上,同时考虑Uni-和Bi-。
使用一个权重系数。
Q1:整个18占据了全部的概率空间
Q2:用只有1条鱼来推测新鱼种,因为1条鱼只存在一个,所以是新的。且18不再是整个概率空间。
Q3:会小于1/18
这个算法分为两部分:没有出现过得,和出现过的
然后一种情况下有两种计算方式:最大似然估计,GT算法(good turning)
注意:右下角分母要乘以N,就算的是总数。。左边的公式要乘以N分母上(公式没错,但是计算的时候要除以样本总数)
观察可以看到,GT算法的概率可能会比MLE小,因为GT算法有一部分概率空间分给了新的悟空,考虑了新的因素进来。
r:在我构建的词典库中单词出现的次数 0次,1次,2次…
Nr:单词数:出现0次的单词有多少
r*:使用GT算法算出来出现的概率
t:训练数据里面真实统计
观察:r*和t近似相近
缺点:
可能计算到后面出现缺少5次的单词没有,出现6次的单词有,但是出现4次的单词计算需要5次数据的支撑。这时候就要用回归模型来拟合5次的数据。然后继续用GT方法。
语言模行里面多用GT,但是在朴素贝叶斯里面用到的ADD-K方法会多一点。