说到统计语言模型,我们不得不提到它的提出者贾里尼克,他的出发点很简单:一个句子是否合理,就看它的可能性大小如何。那么,我们引用网络中最常见的一种定义。
统计语言模型(Statistical Language Model)即是用来描述词、语句乃至于整个文档这些不同的语法单元的概率分布的模型,能够用于衡量某句话或者词序列是否符合所处语言环境下人们日常的行文说话方式。常见的公式描述如下:
P(S)=P(w1,w2,...,wn)
由于网上有许多关于统计语言模型的博客都提到过相关内容,这里就不详细地描述。总之,计算一个序列的概率,会依赖于前面的序列,也就是条件概率的连乘,
比如,我们想计算这个句子的概率:我今天坐飞机去北京
首先,我们会先对这个句子进行分词,具体网上有许多分词工具,我这里使用的是结巴分词,分成了【我,今天,坐,飞机,去,北京】。
这个句子的P=P(我)*P(今天|我)*P(坐|我,今天)*...*P(北京|我,今天,坐,飞机,去)
关键问题在于,我们怎么去求这些词出现的条件概率。其实,数学美就美在这里,根据大数定理,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。我们把从训练集中拿一个词作为一个随机事件,那么就可以将句子条件概率用事件出现的频率来表示。
比如:P(今天|我)=count(我,今天)/count(我)
count代表频数,也就是出现的次数。
至此,我们发现好像确实如此,但是,有一个问题就是,理论上可行但是实际上是否可行?统计一个或者二个相连的词共现次数,还能接受,但是要从文本中找多个相连的词,那么运算量会异常大。于是,马尔科夫猜想就出来了。
也就是说某个词只和之前几个有关,并不统计一个词之前的所有词序列,那么这样我们统计时就会减少许多麻烦。常用的N-gram有二元、三元、四元,再大就基本上没见过了。因为太大也容易造成数据稀疏,而且数据量也特别大。比如三元,从词袋中随机挑选三个词构成序列,有可能这个序列在训练集中不存在,正是这种大量的不存在,导致了我们所谓的数据稀疏,事实也确实如此。
最后,我想说明的是,统计语言模型是基于统计学的,而模型则是将现实问题抽象化为数学形式来表示,这是根本所在。