欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【自然语言处理基础技能(NLP)】语言模型基础

程序员文章站 2023-12-24 13:26:09
...

1. 引言:朴素贝叶斯的局限性

我们知道朴素贝叶斯的局限性来源于其条件独立假设,它将文本看成是词袋子模型,不考虑词语之间的顺序信息,就会把“武松打死了老虎”与“老虎打死了武松”认作是一个意思。那么有没有一种方法提高其对词语顺序的识别能力呢?有,就是这里要提到的N-gram语言模型。

2. N-gram语言模型是啥?

2.1从假设性独立到联合概率链规则

【自然语言处理基础技能(NLP)】语言模型基础

2.2 从联合概率链规则到n-gram语言模型

上面的联合概率链规则公式考虑到词和词之间的依赖关系,但是比较复杂,在实际生活中几乎没办法使用,于是我们就想了很多办法去近似这个公式,比如我们要讲到的语言模型n-gram就是它的一个简化。

如果我们考虑一个词语对上一个词语的依赖关系,公式就简化了如下形式,我们把它叫做二元语法(bigram,2-gram):

【自然语言处理基础技能(NLP)】语言模型基础

如果把依赖词长度再拉长一点,考虑一个词对前两个词的依赖关系,就叫做三元语法(trigram,3-gram),公式如下:

【自然语言处理基础技能(NLP)】语言模型基础

如果我们再考虑长一点,考虑n个词语之间的关系,恩恩,这就是n-gram的由来。歪果仁果然取名字简单粗暴又好记…

其实以上几个简化后的公式,就是著名的马尔科夫假设(Markov Assumption):下一个词的出现仅依赖于它前面的一个或几个词。这相对于联合概率链规则,其实是一个有点粗糙的简化,不过很好地体现了就近思路,离得较远和关系比较弱的词语就被简化和省略了。实际应用中,这些简化后的n-gram语法比独立性假设还是强很多的。

2.3 怎样选择依赖词的个数"n"?

【自然语言处理基础技能(NLP)】语言模型基础

3. N-gram实际应用举例

说了这么N-gram语言模型的背景知识,咱们再来看看N-gram语言模型在自然语言处理中有哪些常见应用。 PS:此部分以原理介绍为多,具体的技术实现细节请参考文中链接或者google。

3.1 词性标注

词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以统一给“爱”分配为动词准确率也还足够高。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细:

需要比较以下各概率的大小,选择概率最大的词性即可:

【自然语言处理基础技能(NLP)】语言模型基础

但这种方法没有考虑上下文的信息。而一般来说,形容词后面接名词居多,而不接动词,副词后面才接动词,而不接名词。 考虑到词性会受前面一两个词的词性的影响,可以引入2-gram模型提升匹配的精确度。 我们匹配以下这句话(已被空格分好词)中“爱”的词性:

"闷骚的 李雷 很 爱 韩梅梅"

将公式进行以下改造,比较各概率的大小,选择概率最大的词性:

【自然语言处理基础技能(NLP)】语言模型基础

计算这个概率需要对语料库进行统计。但前提是你得先判断好“很”的词性,因为采用2-gram模型,进而就需要提前判断“李雷”的词性,需要判断“闷骚的”词性。但是“闷骚的”作为第一个词语,已经找不比它更靠前的词语了。这时就可以考虑用之前最简单粗暴的方法判断“闷骚的”的词性,统一判断为形容词即可。

PS:词性标注是自然语言处理中的一项基础性工作,有其细节实现远比我们介绍地更加丰富。感兴趣的同学可以看看这篇文章https://superangevil.wordpress.com/2009/10/20/nltk5/

3.2 垃圾邮件识别

【自然语言处理基础技能(NLP)】语言模型基础

3.3 中文分词

【自然语言处理基础技能(NLP)】语言模型基础

3.4机器翻译与语音识别

【自然语言处理基础技能(NLP)】语言模型基础

4. 平滑技术

现在我们可以比较专门探讨平滑技术了。为了解决零概率问题呢,我们需要给 “未出现的n-gram条件概率分布一个非零估计值,相应得需要降低已出现n-gram条件概率分布,且经数据平滑后一定保证概率和为1”。这就是平滑技术的基本思想。

4.1 拉普拉斯平滑

【自然语言处理基础技能(NLP)】语言模型基础

4.2 古德图灵(Good Turing)平滑

【自然语言处理基础技能(NLP)】语言模型基础

http://faculty.cs.byu.edu/~ringger/CS479/papers/Gale-SimpleGoodTuring.pdf

4.3 组合估计平滑

不管是拉普拉斯平滑,还是古德图灵平滑技术,对于未出现的n元组都一视同仁,而这难免存在不合理。 因为哪怕是未发生的事件,相互之间真实的概率也会存在差别。

另一方面,一个n元组可能未出现,但是其(n-1)元组或者(n-2)元组是出现过的,这些信息如果不利用就直接浪费掉了。在没有足够的数据对高元n-gram模型进行概率估计时,低元n-gram模型通常可以提供有用的信息。 因此可以利用利用低元n-gram模型的信息对高元n-gram模型进行估计:

如果低元n-gram模型的概率本来就很低,那么就给高元n-gram模型一个较低的估计值;
如果低元n-gram模型有一个中等的概率,那么就给高元n-gram模型一个较高的估计值。
常用的组合估计算法有线性差值法和Katz回退法。具体公式比较复杂,这里就不列了。感兴趣的同学可参考 Christopher D. Manning 的《统计自然语言处理基础》

【自然语言处理基础技能(NLP)】语言模型基础

5. 从N-gram谈回贝叶斯方法

【自然语言处理基础技能(NLP)】语言模型基础

相关标签: 自然语言处理

上一篇:

下一篇: