NLP第五篇-语言模型

重点来了,语言模型的重要性就不用说了,这篇主要介绍n元语法模型、数据平滑技术、贝叶斯网络、马尔可夫模型、隐马尔可夫模型、最大熵模型、最大熵马尔可夫模型和条件随机场,这一章信息量很大啊....

我们上一章说做统计自然语言处理需要使用非常大的语料库,通过这些语料库我们可以获得语言使用的普遍规律,然后我们可以使用机器学习方法自动的获得语言知识,然后再来一个新的句子我们就可以去分析它了,所以这一章要说的内容就是这些语言模型,利用这些语言模型在大规模的语料库中去发现使用语言的普遍规律,算是和上一章紧密相连了

n 阶马尔柯夫链语言模型(n元文法)

一个语言模型通常构建为字符串s的概率分布p(s),这里p(s)试图反映的是字符串s作为一个句子出现的频率,对于一个由l个基元(“基元”可以为字、词或短语等,为了表述方便,以后我们只用“词”来通指)构成的句子s=w 1 w 2 …w l ,其概率计算公式可以表示为:(其实就是条件概率嘛)

NLP第五篇-语言模型_第1张图片

我来举个简单的例子说明一下,比如一句话“祝圣诞快乐”,我们简单的进行一下词的切分,把这句话分成“祝”“圣诞”“快乐”三个基元,那么产生“圣诞”这个词的概率取决于前面的“祝”这个词的概率,产品“快乐”这个词的概率取决于前面“祝”和“快乐”两个词的概率,这也符合我们正常的交流场景,也就是一句话是有前后文的关系的,但是这就存在一个问题,随着历史基元的增多(句子很长了),比如一个句子被切分成了k个基元,词汇表里有j个词汇,那么每一个基元处都有j个选择,所有一个句子有k的j次方个路径(非常庞大了),假定j取3000吧(不算大啊,我们汉语里经常使用的字是6763个,如果是词汇的话大概10几万个....),然后k取个3,那么就是这个参数就是3的3000次方个,大家听说过指数爆炸吧,这个计算量太大了,而且我们经常用的一个句子大概是22个词汇,这个爆炸量就更大了,所以我们希望这个公式可以计算,那么我们就需要稍作更改,减少历史基元的个数,只看钱n-1个,其他不看了,只看当前位置前面的一个词,这样的就算我们日常使用的n元语法了

如果n=1,那就是一阶马尔科夫链,也就是出现于第i位的词独立于历史,至于自己有关,这就是我们之前说的朴素贝叶斯嘛

如果n=2,那就是二阶马尔科夫链,即出现在第i位的词只与它前面第一个历史词有关

如果n=3,那就是三阶马尔科夫链(这个是俄国人发明的吗?,怎么听起来像俄罗斯名字)

做汉语分析的时候一般四元语法效果最好,评估模型的时候我们用困惑度来计算,我们前面说过这个

数据平滑

上面的模型我们可以基于大规模统计语料库来计算概率,但是问题出在我们往往没有可以覆盖所有语言现象的语料库,我们在实际试验中总会碰到说有一个词在我们的语料库中没有,那这个不存在的词的概率就只能等于零了,由于公式是前后相乘,一个等于零,整个公式都等于零了,这种问题我们叫做数据匮乏(稀疏),解决这个问题的方法就叫做数据平滑方法

数据平滑的方法有那么几种,那么我们怎么知道我们用完这些方法后我们得到的结果比较好呢?用困惑度呗,困惑度最小了基本就ok了

数据平滑的方法可以分为三类,大部分资料都是没有对这几种方法进行分类的,我看到MIT的NLP课程中把这几种方法分成了三类(这个是MIT的课堂ppt地址:http://people.csail.mit.edu/regina/6864/lec2-2.pdf):

1.Discounting:

Add-One Smoothing(加一法)

Good-Turing Discounting(图灵法)

Katz Smoothing

2.Interpolation:

Linear Interpolation(插值法)

3.Back-off:

Kneser-Ney Smoothing

在这里我就不全部介绍了,只介绍我觉得还不错的

加一法

每一种情况出现的次数加1,原来是0,现在硬加1词,原来是4次 的,加一次变成5次,这个比较简单直接就不多说了

Good-Turing Discounting(图灵法)

这个方法也不难,只是效果不太好,所以就不做过多介绍了,感兴趣的同学可以查资料看一下

Back-off (后备/后退)方法

S. M. Katz 1987年提出,所以又称 Katz 后退法

基本思想:当某一事件在样本中出现的频率大于K (通常取 K 为0 或1)时,运用最大似然估计减值来估计其概率,否则,使用低阶的,即 (n-1)gram 的概率替代 n-gram 概率。而这种替代必须受归一化因子α的作用

意思是如果k=0,然后相对频率大于k,就是说出现的概率大于0,这样的话我们用减值法来估算概率,如果相对频率小于k,就是这个基元在训练语料中没有出现过,那就用这个后退法来估算概率,也就是用它第一阶的n-gram来估算概率,比如我们本来用的四元语法(比较适合汉语),就是说必须四个词连续出现概率才大于0,四个词连续出现他的约束是非常强的,很容易出现说概率等于0的情况,所以如果概率等于0的情况,就用4元语法来做,如果还等于0,那就用2元语法,2个词的约束很明显小于三个词

NLP第五篇-语言模型_第2张图片

END

你可能感兴趣的:(NLP第五篇-语言模型)