统计语言模型与NLP算法设计

什么是语言模型呢?

简单的说,统计语言模型是用来计算句子中某种语言模式出现概率的统计模型。一般自然语言的统计单位是句子,所以也可以看做句子的概率模型。假设W=(w1,w2,....,wn)为一个句子,这个句子有n个词,也就是n个词汇按顺序构成的字符序列,这里表示为W1n,利用贝叶斯公式进行链式分解,w1,w1,....wn的联合概率为: 

                       统计语言模型与NLP算法设计_第1张图片

我们需要设法计算 这些语言模型的参数,得到这些参数,我们即可得到P(W1n).

为了表示方便,将上述式子表示为语言模型的形式。考虑一个长度为n的句子,位置为k的词出现的概率与其前面的所有的词都相关,也就是说它与前面k-1个词都相关,其k元语言模型可以表示为

                                           统计语言模型与NLP算法设计_第2张图片式(1)

利用贝叶斯公式得到:

                                                统计语言模型与NLP算法设计_第3张图片式(2)

假设有一个能够容纳所有语言现象的语料库,即统计样本足够大时,上述表达式就变成表达形式:

                                        统计语言模型与NLP算法设计_第4张图片

其中,Count表示在语料中出现的次数。

下面来计算一下这个概率,考虑一个给定长度为n的句子就需要计算n个参数,不妨假设语料库对应词典D的大小(词汇量)为T。那么,如果考虑长度为n的任意句子理论上就有T的n次方中可能。而每种可能都要计算n个参数,那么总共就需要 个参数。而这些概率计算好之后,还得保存下来。因此,储存这些信息也需要很大的内存开销。当然这是纯粹数学上的估算,实际情况并不是这样的,这涉及语言中的模式问题,假设我们认为某几个汉字成词的可能性仅仅与它前面的一个词有关,而与它前面的两个词和所有后面的词无关(即马尔科夫性),那么当前词与其前面的词就构成一种二元的语言模型(2-gram)

这个概念扩展到n元,即可以得出如下定义:

如果一种语言现象出现的概率与它n-1个词相关,而与其前面n个词和后面的词都无关,那么这就是一个n-gram语言模型。将这个模型形式化后,式(1)式(2)就变成

                                   统计语言模型与NLP算法设计_第5张图片

以n=2为例,就有:

                                        统计语言模型与NLP算法设计_第6张图片

n-gram语言模型中n的大小的选取,需要同时考虑计算复杂度和模型效果两个因素。考虑汉语中词典大小D=300000个词汇。模型参数数量与n的关系如下表所示。

                       统计语言模型与NLP算法设计_第7张图片

模型参数的量级是模型长度n的指数函数。显然n不能取得太大,实际应用中最多的是采用n=3的三元模型。

 

你可能感兴趣的:(NLP)