NLP学习笔记14-语言模型(下)

一 序

   本文属于贪心NLP 学习笔记系列。今天开始,明显的数学概念多了起来。

二 unigram

不考虑单词之间的顺序,依赖于马尔科夫假设。

假设w1,w2,...wn是相互独立的:一个事件的发生与否,不会影响另外一个事件的发生。

而P(w1)、P(w2).....P(wn)的计算方法如下:统计语料库中某个单词出现的次数,再除以语料库的总词数。

缺点: 单词相互独立,所以语义上不通顺的跟通顺的概率一样,不能很好的区分。

三 bigram(基于1st order markov assumption)

考虑单词之间(前面的单词)的顺序

而P(w1)、P(w2/w1).....P(wn/wn-1)的计算方法如下:统计语料库里面某个单词后目标单词的概率

四 N-gram

 

一般情况下,不会考虑N太多,bigram是最多使用的。

只要出现语料库没有的单词,就会出现概率为0的case。

五  语言模型的评估

  

但是,这种方法一方面难以操作,另一方面可能非常耗时,可能跑一个evaluation需要大量时间,费时难操作。有没有不经过上面的情况,直接评估语言模型呢?

可以给定一个句子,让语言模型类似填坑的方式预测单词,以此来评估语言模型。

Perplexity 困惑度

困惑度是交叉熵的指数形式,网上会搜到很多观念与困惑度的学术型回答,主要推导公式。

老师先给了通俗解释:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好

这个在文本处理尤其是无监督学习很常用。

这里x= average log likelihood,都是术语,老师没有解释。还不太没明白。Perplexity= 2^{-x}, X 越大,Perplexity越小。

计算规则: 现根据训练好的模型,去查询likelhood,再计算log,求平均得出x,代入公式Perplexity= 2^{-x},计算

六 n-gram 语言模型中的平滑技术

我们知道自然语言处理中的一大痛点就是出现未登录词(OOV)的问题,即测试集中出现了训练集中未出现过的词,导致语言模型计算出的概率为零。

优化方法:smoothing 平滑

我们之前的概率计算,可以认为是最大似然估计(maximum likelihood estimation, MLE)。

样本太多,无法得出分布的参数值,可以采样小样本后,利用极大似然估计获取假设中分布的参数值。

这个也还没理解,老师说以后再展开讲。

就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!

网上的例子:

假如有一个罐子,里面有黑白两种颜色的球,数目多少不知,两种颜色的比例也不知。我 们想知道罐中白球和黑球的比例,但我们不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球 再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。假如在前面的一百次重复记录中,有七十次是白球,请问罐中白球所占的比例最有可能是多少?

70%,怎么推导的还不知偶。就是直觉了

这里的v是词典库的大小(不是所有单词出现多少次),分子加1可以理解,为了让那些出现频次为0的𝐶(𝑤𝑖−1,𝑤𝑖)算出来的概率不为0,从而避免了因为它使得整个句子的概率为0了。

老师的给的思考题,是分母+v么不是100v?

为了使得∑𝑤𝑖𝐶(𝑤𝑖−1,𝑤𝑖)+1/𝐶(𝑤𝑖−1)+𝑣为1啊,物理意义就是,词典库中有v个词汇,𝑤𝑖−1后面接的单词在这v个词汇之中的概率要为1,也就是加起来为1。

add-k Smoothing

上面add-1,就是k=1的特例,本质上都是拉普拉斯平滑。

那么K到底怎么选呢?除了1个个尝试外,也可以采用优化的办法,利用困惑度是f(k)最小,求K

Interpolation

 但是其实上面介绍的两个平滑还是会有一个问题没有解决,老师举了个例子:假设有如下的语料库

in the bathroom =0
the kitchen =3
kithcen =4
arboretum =0

我们计算P(kitchen|in the)和P(arboretum|in the)的值是一样的,因为他们的频次都是0,通过上面的add-one 平滑。得出的都是值一样(1/6)。

但是这样是有问题的,因为我们直观感觉,(现在不出现不代表未来不出现)arboretum不再出现了,kithen还会出现,in the kitchen 肯定要比in the arboretum的概率要大得多,

换句话说,就是我们现在计算tri-gram模型的概率的时候,如果考虑到bi-gram和unigram的概率,那么就能避免上述情况了。公式如下:

 

𝑃′(𝑤𝑛|𝑤𝑛−1,𝑤𝑛−2)=𝜆1𝑃(𝑤𝑛|𝑤𝑛−1,𝑤𝑛−2)+𝜆2𝑃(𝑤𝑛|𝑤𝑛−1)+𝜆3𝑃(𝑤𝑛)

使用3个规则,分配不同的权重(加权平均)。且满足𝜆1+𝜆2+𝜆3=1

good-turning smoothing

假设你在钓鱼,已经抓到了18只鱼:
10条鲤鱼,3条黑鱼,2条刀鱼,1条鲨鱼,1条草鱼,1条鳗鱼…
Q1:下一个钓到的鱼是鲨鱼的概率是多少?
Q2:下一条鱼是新鱼种(之前没有出现过)的概率是多少?
Q3:既然如此,重新想一下,下一条抓到鱼为鲨鱼的概率是多少?

1. Q1:总共18条鱼,有一条鲨鱼, 那先假设为1/18.(基于假设不会有新鱼种)

2 可以用最大似然法,对于前面18个已经钓到的鱼来说,鲨鱼,草鱼,鳗鱼都只是钓到了一次,

  我们会假设未出现过的鱼种的概率与出现一次的鱼种的概率相同,可以认为是新鱼种,就是3/18=1/6.

3. 既然新鱼种也占了一部分,那确实不能再用1/18表示接下来钓到鲨鱼的概率了,应该是<1/18. 剩余的概率空间留给新鱼种。

那么到底给新鱼种及鲨鱼赋予多少概率空间呢?就是good-turning 的核心思路。

 

   对于没有出现的单词: 𝑃=𝑁1/𝑁

  对于出现c次的单词: P= \frac{ (c+1) N_{c+1}}{ ^{N_{c}*N}}

N_{c} 的含义,出现c次单词的个数。例如:N_{3} = 有多少单词出现了3次。

通常P_{GT}<P_{MLE}

实践证明,good-turning算法得出的概率和实际情况很符合,如下图所示:第一列r是出现频次,第二列Nr是相应频次的单词个数,第三列是根据good-turning算法算出的下一次会出现的概率,第四列是在测试集中对相应频次的单词的个数的统计结果,第三列与第四列很相近。

缺点:

从上图中也可以看出,当单词出现次数慢慢增大时,r值并不是连续性的,但是每一个Pr的计算都依赖于r+1的count值。

简单的解决方案是,我们可以通过线性回归之类的方法(机器学习的拟合),平滑的推断出7、9等不存在的r值的对应的count值,然后再带入上式进行计算。

总结: 再构建语言模型时会经常采用这种方法,但是在朴素贝叶斯里面,还是会常用到add-one的平滑。

**************************************

补充一个语言模型在文本纠错的应用

怎么过滤?

case1 :单词本身错误

case2 : 词本身没错,语法上错误

 也是需要语言模型判断(根据提前设定的阈值),如果有训练数据,可以按照二分类问题解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值