语言模型(统计语言模型)

内容纲要

追溯历史

nlp的全程是nature language process,又叫自然语言处理,囊括了分词,词性标注,文法解析,情感分析等多个领域.自然语言相关技术,概念最早始于第一代人工智能时期,到目前为止,已经经历了三代,他们分别是[1]:

1.符号主意(1956-1976):用符号表达的方式来研究智能和推理过程。主要是基于规则的产生式系统(自然语言领域的编译器)。这个时期的主要产出为自然语言的基本方法和基于语法规则模型的专家系统。

2.链接主义(1976-2006):核心是统计语言模型和神经元网络。目前人工智能的热潮实际上是连接主义的胜利。这个时期的主要产出为语言模型和神经网络的基础方法,例如BP网络。

3.基于大数据的深度学习(2006-今):其核心仍然是链接主义,只不过随着计算能力和数据量的显著提升,模型可以做到非常复杂。这个时期的主要产出为 lstm,attention,bert等模型.

从历史大潮里面来看,实际上只有两种阶段:符号主义和链接主义。今天的主角语言模型诞生于两次浪潮衔接的时期。语言模型要解决什么问题:一句话总结,判断出现的语句是否合理。

语言模型

说到统计语言模型,我们不得不提到它的提出者贾里尼克(1932-2010),他的出发点很简单:把判断一个句子是否合理转化为衡量它的可能性大小。从严格的概念上来说统计语言模型(Statistical Language Model)即是用来描述词、语句乃至于整个文档这些不同的语法单元的概率分布的模型,能够用于衡量某句话或者词序列是否符合所处语言环境下人们日常的行文说话方式。

语言模型基本定义

假定S表示某个有意义的句子,由一串特定顺序排列的词w1,w2,w3,..,wn组成,n是句子的长度。想知道S在文本中(语料库)出现的可能性p(s):

p(s)=p(w_1,w_2,w_3,..,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)..p(w_n|w_1,w_2,..,w_{n-1})

也就是说,一个句子出现的概率,是根据句子中所有词出现的联合概率的结果。
可是这样的方法存在两个致命的缺陷:

  1. 參数空间过大:条件概率p(wn|w1,w2,..,wn-1)的可能性太多,无法估算,不可能有用;
  2. 数据稀疏严重:对于非常多词对的组合,在语料库中都没有出现(没有出现,结果为0)。最后的结果是,我们的模型仅仅能算可怜兮兮的几个句子,而大部分的句子算得的概率是0。

为了解决上述两个缺陷,数学家们想除了解决问题的方法:

马尔科夫假设(ngram简化)

为了解决参数空间过大的问题提出的马尔科夫假设指出:随意一个词出现的概率只是他前面出现的有限的一个或者几个词相关,可以成为ngram。如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram(这时的Ngram模型的 N=2),如果依赖前面两个词,那么就称之为trigram(此时的Ngram模型N=3),以此类推:

  • bigram:
    p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)..p(w_n|w_1,w_2,..,w_{n−1})≈p(w_1)p(w_2|w_1)p(w_3|w_2)..P(w_n|w_{n−1})
  • trigram:
    p(s)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)..p(w_n|w_1,w_2,..,w_{n−1})≈p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)..p(w_n|w_{n-2},w_{n−1})

一般来说,N元模型就是假设当前词的出现概率只与它前面的N-1个词有关。而这些概率参数都是可以通过大规模语料库来计算,高于四元的用的非常少,由于训练它须要更庞大的语料,并且数据稀疏严重,时间复杂度高,精度却提高的不多。

大数定理

以bigram为例子,当我们拿到P(Wn|Wn-2,Wn-1)我们怎么去求这Wn出现的条件概率。我们可以根据大数定理[2],在试验不变的条件下,随机事件的频率近似于它的概率。我们把从训练集中拿一个词作为一个随机事件,那么就可以将句子条件概率用事件出现的频率来表示。

\displaystyle p(w_i|w_{i−1})=\frac{p(w_i,w_{i-1})}{p(w_{i-1})}=\frac{count(x_{i-1},x_i)}{count(x_{i-1})}

count代表频数,也就是出现的次数,我们使用语料库中Wi−1,Wi同时出现的概率比上Wi-1同时出现的概率,其结果是Wi出现的条件概率。
至此,我们发现好像确实如此,但是,有一个问题就是,如果某些词组合的概率为0,那么一个具体整体出现的概率就会变化为0,那么这么统计就没有任何意义,因此在自然语言处理中,一个非常重要的方法就出现了平滑

平滑

对语言而言,由于数据稀疏的存在( n元语法模型中,在统计结果中出现了零概率事件反映语言的规律性,即这种现象本来就不该出现,但更多的时候是由于语言模型的训练文本T的规模以及其分布存在着一定的局限性和片面性。),极大似然法不是一种很好的参数估计办法。这时的解决办法,我们称之为“平滑技术”。
数据平滑的目的有两个:

  1. 使全部的Ngram概率之和为1。
  2. 使全部的Ngram概率都不为0。

其主要策略是把在训练样本中出现过的事件的概率适当减小,然后把减小得到的概率密度分配给训练语料中没有出现过的事件。最简单而且最实用的平滑方式是Laplace平滑方法,其利用分母分子同时增加一个常数,保证所有的ngram的概率都不为0,且,全部的ngram的和未1。一般而言,每个实例(分子)的出现次数都加1(或者其他数值),从而所有实例出现次数都不会为0,为了保证所有实例的概率总和为1,将分母增加实例的种类数;即:

\displaystyle p(w_i|w_{i−1}) = \frac{p(w_i,w_{i-1})}{p(w_{i-1})}= \frac{count(x_{i-1},x_i)+a}{\sum{(count(x_{i-1},x_i)+a)}}

马尔可夫假设,大数定理(概率向词频转化)和数据平滑,构成统计自然语言的模型的基础。其余的应用都是在这些基础的上面延伸开来。下一次,将介绍基于语言模型的分词,纠错等具体应用。

参考资料:
1.人工智能的发展与未来挑战[高文] http://www.cheyun.com/content/14902
2.数学之美[吴军]:https://book.douban.com/subject/26163454/

发表评论

邮箱地址不会被公开。 必填项已用*标注