语言模型

语言模型

语言模型在自然语言处理当中是用于计算一个句子的概率,如果一个句子表达的清晰度强那么概率值高,如“武松打死了老虎”与“老虎了死武松打”前者概率值就高于后者,前者出现概率更高。

联合概率链规则

在一句话当中每个词之间相互依赖概率统计公式为
语言模型
但在现实情况中由于计算量过大所以我们一般不会计算所有词组之间的相互依赖关系。
如在垃圾邮件分类问题中我们可以只考虑每个句子当中词的前后之间的依赖关系,我们可以把它叫做二元语法(2-gram)。
如“我司可办理正规发票保真增值税发票点数优惠”
语言模型
马尔科夫假设(Markov Assumption):下一个词的出现仅依赖于它前面的一个或几个词。这相对于联合概率链规则,其实是一个有点粗糙的简化,不过很好地体现了就近思路,离得较远和关系比较弱的词语就被简化和省略了。
从上面的例子我们可以看出这种方式可以看出计算量大大简化而且对结果影响较小。

  • 经验上,trigram用的最多。尽管如此,原则上,能用bigram解决,绝不使用trigram。n取≥4的情况较少,一般取3.
  • 当n更大时:对下一个词出现的约束信息更多,具有更大的辨别力;
  • 当n更小时:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性、实用性。

N-gram语言模型应用

词性标注
词性标注是一个典型的多分类问题。常见的词性包括名词、动词、形容词、副词等。而一个词可能属于多种词性。如“爱”,可能是动词,可能是形容词,也可能是名词。但是一般来说,“爱”作为动词还是比较常见的。所以可以统一给“爱”分配为“动词”。这种最简单粗暴的思想非常好实现,如果准确率要求不高则也比较常用。它只需要基于词性标注语料库做一个统计就够了,连贝叶斯方法、最大似然法都不要用。词性标注语料库一般是由专业人员搜集好了的,长下面这个样子。其中斜线后面的字母表示一种词性,词性越多说明语料库分得越细:
语言模型
需要比较以下各概率的大小,选择概率最大的词性即可:
语言模型
但这种方法没有考虑上下文的信息。而一般来说,形容词后面接名词居多,而不接动词,副词后面才接动词,而不接名词。 考虑到词性会受前面一两个词的词性的影响,可以引入2-gram模型提升匹配的精确度。 我们匹配以下这句话(已被空格分好词)中“爱”的词性:
“闷骚的 李雷 很 爱 韩梅梅”
将公式进行以下改造,比较各概率的大小,选择概率最大的词性:
语言模型
计算这个概率需要对语料库进行统计。但前提是你得先判断好“很”的词性,因为采用2-gram模型,进而就需要提前判断“李雷”的词性,需要判断“闷骚的”词性。但是“闷骚的”作为第一个词语,已经找不比它更靠前的词语了。这时就可以考虑用之前最简单粗暴的方法判断“闷骚的”的词性,统一判断为形容词即可。

N-gram分类器

N-gram分类器是结合贝叶斯方法和语言模型的分类器。这里用Y1,Y2分别表示这垃圾邮件和正常邮件,用X表示被判断的邮件的句子。根据贝叶斯公式有:
语言模型
比较i=1和2时两个概率值的大小即可得到X所属的分类。对于句子(“我”,“司”,“可”,“办理”,“正规发票”,“保真”,“增值税”,“发票”,“点数”,“优惠”)用字母X代表,每一个词语用字母xi表示。X就可以写成一个xi组成的向量,xi就是这向量中某个维度的特征。对P(X|Yi) 套用2-gram模型。 则上式化简为:
语言模型
公式中的条件概率也比较好求,举个例子:
语言模型
剩下的就需要在语料库中间做一个的统计就是了。因为这种方法考虑到了词语前面的一个词语的信息,同时也考虑到了部分语序信息,因此区分效果会比单纯用朴素贝叶斯方法更好。
多提几句,N-gram方法在实际应用中有一些tricks需要注意:

  • 3-gram方法的公式与上面类似。此处省略。从区分度来看,3-gram方法更好些。
  • 句子开头的词,比如本例中的“我”,因为要考虑其本身作为开头的特征,可以考虑在其前面再添加一个句子起始符号如“<>”“
  • 这样统计和预测起来都比较方便。
  • 一般地,如果采用N-gram模型,可以在文本开头加入n-1个虚拟的开始符号,这样在所有情况下预测下一个词的可依赖词数都是一致的。
  • 与朴素贝叶斯方法一样,N-gram模型也会发生零概率问题,也需要平滑技术。 一会儿会讨论到。 中文分词
    中文分词也可以理解成一个多分类的问题。 这里用X表示被分词的句子“我司可办理正规发票”, 用Yi表示该句子的一个分词方案。 咱们继续套用贝叶斯公式:
    语言模型
    比较这些概率的大小,找出使得P(Yi|X) 最大的Yi即可得到X 所属的分类(分词方案)了。
    Yi作为分词方案,其实就是个词串,比如(“我司”,“可”,“办理”,“正规发票”)或者(“我”,“司可办”,“理正规”,“发票”),也就是一个向量了。
    而上面贝叶斯公式中P(X|Yi) 项的意思就是在分类方案 Yi 的前提下,其对应句子为X 的概率。而无论分词方案是(“我司”,“可”,“办理”,“正规发票”)还是(“我”,“司可办”,“理正规”,“发票”),或者其他什么方案,其对应的句子都是“我司可办理正规发票”。也就是说任意假想的一种分词方式之下生成的句子总是唯一的(只需把分词之间的分界符号扔掉剩下的内容都一样)。于是可以将P(X|Yi) 看作是恒等于1的。这样贝叶斯公式又进一步化简成为:
    语言模型
    也就是说我们只要取最大化的P(Yi) 就成了。而Yi就是一个词串,也就是一个向量,可以直接套用我们上面的N-gram语言模型。这里采用2-gram。于是有:
    语言模型

平滑技术

我们简单探讨一下平滑技术。为了解决零概率问题呢,我们需要给 “未出现的n-gram条件概率分布一个非零估计值,相应得需要降低已出现n-gram条件概率分布,且经数据平滑后一定保证概率和为1”。这就是平滑技术的基本思想。
最简单的平滑技术是拉普拉斯平滑,是最古老的一种平滑方法,又称加一平滑法,其保证每个n-gram在训练语料中至少出现1次。以计算概率(“优惠”|“发票”,“点数”)P(“优惠”|“发票”,“点数”) 为例,公式如下:
语言模型
在所有不重复的三元组的个数远大于(“发票”,“点数”)出现的次数时,即训练语料库中绝大部分n-gram都是未出现的情况(一般都是如此),拉普拉斯平滑有“喧宾夺主”的现象,效果不佳。

模型的训练

语言模型中所有的条件概率称为模型的参数,通过对语料的统计,得到这些参数的过程称为模型的训练。

零概率问题

当出现的次数 (−1,)=0,在计算过程中会导致所有的数据等于0,在数理统计中,我们之所以敢用对采样数据进行观察的结果来预测概率,是因为有大数定理(Law of Large Number)在背后做支持,它的要求是有足够的观察值。但是在估计语言模型的概率时,很多人恰恰忘了这个道理,因此训练出来的语言模型“不管用”,然后回过头来怀疑这个方法是否有效。

平滑方法

古德-图灵估计
古德-图灵估计的原理是:对于没看见的事件,我们不能认为它发生的概率就是零,因此我们从概率的总量(Probability Mass)中,分配一个很小的比例给这些没有看见的事件。这样一来,看见了的事件的概率总和就小于 1了。因此,需要将所有看见了的事件概率调小一点,并且按照“越是不可信的统计折扣越多”的方法进行。
卡茨退避法
语言模型
线性插值
语言模型