语言模型(Language Model)是描述自然语言内在规律的数学模型。构造语言模型是计算语言学的核心。在实践中,语言模型广泛地用于语言识别、手写体文字识别、机器翻译、键盘输入、信息检索等研究领域。
语言模型可分为传统的文法型语言模型和基于统计的语言模型。文法型语言模型是人工编制的语言学文法,文法规则来源于语言学家掌握的语言学知识和领域知识,但这种语言模型不能处理大规模真实文本。为满足这一需求,基于统计的语言模型应运而生。这种语言模型通常是概率模型,计算机借助于统计语言模型的概率参数,可以估计出自然语言中每个句子出现的可能性,而不是简单的判断该句子是否符合文法。常用统计语言模型,包括了N元文法模型(N-gram Model)、隐马尔科夫模型(Hidden Markov Model,简称HMM)、最大熵模型(Maximum Entropy Model)。
1、统计语言模型基本原理
一个基于统计的计算语言模型以概率分布的形式描述了任意语句(字符串)s属于某种语言集合的可能性。例如:p(他/认真/学习)=0.02,p(他/认真/读书)=0.03,p(他/认真/坏)=0,等等。这里并不要求语句s在语法上是完备的,该模型需对任意的语句s都给出一个概率值。
假定词是一个句子的最小的结构单位,并假设一个语句s由词w1,w2,...,wn组成,那么,不失一般性,p(s)可由公式1计算:
例如,对于二元模型而言,p(wi|w1w2...wi-1)=p(wi|wi-1),(1<=i<=n),那么上面的公式1就简化成公式2:
为保证公式1和公式2的完备性,必须引进一个起始词w0,并且假定p(w1|w0)=p(w1)。公式1和公式2满足:
概率p(wi|wi-1)可以使用许多方法估算,一种被广泛采用的方法是最大相似度估计(Maximum Likelihood Estimation,简称MLE),使用如下公式3进行估算。
公式3中,count(wi-1 wi)为词对wi-1 wi在训练语料库中出现的次数。用于估算基于统计的计算语言模型中的概率分布的训练语料库文本称为训练数据。根据训练数据估算p(wi|wi-1)这类概率分布的过程称为训练。
值得注意的是,大量的低频词,无论训练数据的规模如何扩大,其出现频度仍旧很低甚至根本不出现。如果采用MLE估算它们的概率分布,将出现大量的p(wi|wi-1)=0,从而导致p(s)=0的情况,这种情况大大消弱了该模型的描述能力。数据平滑技术(Data Smoothing)能够解决这一类问题,它通过调整p(wi|wi-1)这类概率分布的取值的方法,从而避免p(s)=0这类情况的出现,达到使p(s)的计算更加精确的目的。
2、主要的统计语言模型
根据对上下文空间不同的划分方法,可以分为五大类:
(1)上下文无关模型
该模型仅仅考虑当前词本身的概率,不考虑该词所对应的上下文环境。这是一种最简单,易于实现,但没有多大实际应用价值的统计语言模型。
p(wi=w|c) = p(wi=w) = Nw/N
其中c是词的上下文,这个模型无需估计任何词的概率,不需要任何训练数据。根据训练文本中词出现的频度估算出词的概率,不考虑词的上下文。它是N-gram模型中当N=1的特殊情形,所以也被称为Unigram Model(一元文法统计模型)。实际应用中,被应用到一些商用语音识别系统中。
(2)N-gram模型
这是一种依赖于上下文环境的词的概率分布的统计计算语言模型。
以N=2为例(称为Bigram语言模型)。当我们看到一个句子片段“他正在认真”时,下一个词可以是“学习、工作、思考”等等,而不能是“美丽、我、中国”等等。即,自然语言中,存在着后一个词的出现条件地依赖于前一个词的出现的现象。Bigram就是把一个词的上下文定义为该词的前一个词,尽管这个定义仅仅包含了上下文的极少一部分,却对下一个词的出现具有较强的约束力。语料库学者发现,许多词的前面词的出现对于该词的出现具有很强的预测能力,英语这类有严格语序的语言更是如此。汉语的语序较英语灵活,但此约束关系依然存在。
假定,在一个语句中第i个词出现的概率,条件依赖于它前面的N-1个词,即将一个词的上下文定义为该词前面出现的N-1个词,这样的语言模型叫做N-gram模型(N元文法统计模型)。公式如下:
N-gram模型中,需要计算系统词表中词的每一个N-1元组的概率,共有|V|^(N-1)(这里是指数)个元组,有|V|^(N-1)个不同的概率分布。对于每一个分布,又必须估算N个参数,共需估算出|V|^N个参数。如|V|=10000,N=3,就必须计算出10^12个参数。由于参数空间随着N的增大呈指数上升,因此,N一般取2或3。
N-gram模型的优点在于它包含了前N-1个词所能提供的全部信息,这些信息对当前词出现具有很强的约束力。缺点在于需要相当规模的训练文本来确定模型的参数。当N较大时,模型的参数空间过大。
Trigram在十几年前首次使用,直到现在仍是实际应用中表现最佳的语言模型,并且成为许多其它语言模型的重要组成部分。
(3)N-pos模型
N-gram模型主要缺点需要大规模的文本训练,同时假定第i个词出现概率条件依赖它前N-1个词。但实际上,许多词出现的概率是条件依赖于它前面词的语法功能。N-pos模型,将词按照其语法功能进行分类,由这些词类决定下一个词出现的概率。这样的词类成为词性(Part-of-Speech,简称为POS)。公式如下:
G={g1,g2,...,gt},为词类的集合。该模型有|G|^(N-1)个不同的概率分布,共需估算出|G|^(N-1)*|V|个参数。这样,其参数空间较同样规模的N-gram模型减小很多。
如果假设一个词的词类出现的概率条件依赖于前N-1个词的词类,而该词本身的概率依赖于该词所属的词类。公式就变成:
这样并没有改变上下文的定义,但只需估算出|G|^N+|G|*|V|个参数。参数空间进一步减小了。
但自然语言中,广泛存在着一词多义的现象,即词类可能会相交。这样一个词出现的概率应该是它作为多个词类(如名词、动词)的概率之和。公式变成:
N-pos模型中,如果整个模型只有一个词类,就退化成Unigram模型;如果每个词都有一个各不相同的词类,那么就等价于N-gram模型。
N-pos模型有点在于它需要训练数据比N-gram模型少得多,并且模型的参数空间也要小得多。缺点在于词的概率分布依赖于词性而非词本身,显然按照词类划分词的概率分布不如词本身的划分精细。因此,实际应用中(如语言识别)中,这类语言模型一般难以达到N-gram模型的精度。
(4)基于决策树的语言模型
前三种模型,建模所需估算的概率分布式固定的,与训练数据无关。没有考虑相近的概率分布,例如英语中(动词,冠词)和(介词,冠词)的概率分布情况相近。构造统计决策树,包括所有的概率分布以及根据当前上下文查询其分布的机制。决策树算法都需要预先定义一个关于上下文信息的问题集合一个评价问题优劣的函数。举例说明吧,训练语料库中出现一个词wi,它的前一个词为wi-1,这样一个数据点(wi-1,wi)=(今天,是)。在关于上下文信息的问题集中都是这样的提问:“它前一个词的词性是gj(词性标号)吗?”,通过回答提问进入下一级子节点,直到叶节点为止。
Unigram、N-gram、N-pos等等,归根结底,都可以以统计决策树的形式表示出来。因此,统计决策树模型是一种更加通用的语言模型。优点:分布数不是预先固定好的,而是根据训练预料库中的实际情况确定。缺点:构造统计决策树的时空消耗非常大。
(4)动态、自适应、基于缓存的语言模型
前面的模型概率分布都是预先从训练语料库中估算好的,属于静态语言模型。但在自然语言中,经常出现这样现象:某些在文本中通常很少出现的词,在某一局部文本中突然大量地出现。能够根据词在局部文本中出现的情况动态地调整语言模型中的概率分布数据的语言模型成为动态、自适应或者基于缓存的语言模型。这种混合模型可以有效地避免数据稀疏的问题。
SLM广泛使用于语音识别和统计机器翻译领域,利用概率统计理论研究语言。
规则方法:词、句、篇章的生成比如满足某些规则,不满足该规则就不应存在。
统计方法:任何语言片断都有存在的可能,只是可能性大小不同
对于一个文档片段d=w1w2…wn,统计语言模型是指概率P(w1w2…wn)求解,根据Bayes公式,有:
P(w1w2...wn) = P(w1)P(w2...wn|w1) = P(w1) {P(w2|w1) * P(w3|w2w1) * ... P(wn|wn-1...w1)}
其中P(wn|wn-1...w1)中的P(wn-1...w1)为历史,按照历史可分为下列模型:
1. 无历史,一元模型
2. 最近一个历史,二元模型(Bigram)
3. 最近N-1个历史,N元模型(N-gram)
类似于打扑克中的出牌策略,只根据当前牌出牌,则为一元模型,根据上一轮牌出牌,为二元模型,...
不同模型的例子:
一元模型(unigram):P(w1w2w3w4) = P(w1)P(w2)P(w3)P(w4)
二元模型(bigram ):P(w1w2w3w4) = P(w1)P(w2|w1 )P(w3|w2)P(w4|w3 )
三元模型(trigram):P(w1w2w3w4) = P(w1)P(w2|w1)P(w3|w1w2)P(w4|w2w3)
对于n-gram,n越大,则模型越复杂估计的参数(即估计的概率)也越多。当然,当数据量足够大的情况下,模型阶数越高越对片段概率的计算也越准确。
SLM的一个应用例子
拼音输入法(以下例子中将字看成语言单位):
输入zhong guo ke xue yuan,到底是:种过科雪园?重果可薛原?还是中国科学院?……
一种利用SLM的解决思路:计算P(种过科雪园) P(重果可薛原)P(中国科学院),看谁大!(为简单起见,这里计算没有考虑拼音,实际上是计算P(种过科雪园| zhong guo ke xue yuan) )
一元模型(Unigram):
P(种过科雪园)=P(种) P(过) P(科) P(雪) P(园)
P(重果可薛原)=P(重) P(果) P(可) P(薛) P(原)
P(中国科学院)=P(中) P(国) P(科) P(学) P(院)
训练:在训练语料库中估计以上各P(X)的值
二元模型(Bigram): P(中国科学院)=P(中)P(国|中)P(科|国)P(学|科)P(院|学),等价于一阶马尔科夫链(Markov Chain)
三元模型(Trigram):P(中国科学院)= P(中)P(国|中)P(科|中国)P(学|国科) P(院|科学)
根据语料,估计所使用模型的参数,然后在搜索空间中搜索概率最大的语言片段。
理论上说,在数据充足的情况下,利用更多的历史(高阶)的模型更准确,但是总计算量也越大。数据规模总是有限的,即用于训练模型参数的语料存在稀疏性(Data Sparseness,即某参数在训练语料中没有出现)
问题。如二元模型中,在训练语料中恰巧没有出现“国科组合”。
数据稀疏性导致零概率问题,上述稀疏性情况下,如果直接计算,那么P(中国科学院)=0,但是在训练集上不出现的事件并不代表在新的语料上不出现。
SLM的一个重要工作就是进行平滑(Smoothing):重新分配概率,即使没出现的事件也会赋予一个概率。