计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关的特性建立数学模型。这个数学模型也就是统计语言模型(Statistical Language Model)。
用数学的方法描述语言规律
一个句子是否合理,就看它的可能性大小如何。更普遍而严格的描述是:
假定S表示某一个有意义的句子,由一连串特定顺序排列的词W1,W2,...,Wn组成, 这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,也就是数学上所说的S的概率P(S)。显然,这个文本是无法统计的。因此,需要有个模型来估算。既然S=W1,W2,...,Wn,那么不妨把P(S)展开表示:
P(S)=P(W1,W2,...,Wn) (1.1)
利用条件概率公式,S这个序列出现的概率等于每一个词出现的条件概率相乘,于是P(W1,W2,...,Wn)可展开为:
P(W1,W2,...,Wn)
=P(W1)*P(W2 l W1)*P(W3 l W1,W2)*...*P(Wn l W1,W2,...,Wn-1) (1.2)
其中P(W1)表示第一个词W1出现的概率;P(W2 l W1)是在已知第一个词的前提下,第二个词出现的概率;依次类推。不难看出,词Wn的出现概率取决于它前面的所有词。
从计算上来看,P(W1),P(W2 l W1)也还不太麻烦,可后面的词的概率就非常难算了。到了最后一个词Wn,条件概率P(Wn l W1,W2,...,Wn-1)的可能性太多,无法估算。
马尔可夫(Andrey Markov)提出一种方法,每当遇到这种情况时,就假设任意一个词Wi出现的概率只同它前面的词Wi-1有关,于是问题就变得很简单了。这种假设在数学上称为马尔可夫假设。现在,S出现的概率就变得简单了:
P(S) = P(W1)*P(W2 l W1)*P(W3 l W2)*...*P(Wi l Wi-1)*...*P(Wn l Wn-1) (1.3)
公式 (1.3)对应的统计语言模型是二元模型(Bigram Model)。
接下来的问题就是如何估计条件概率P(Wi l Wi-1)。根据它的定义:
(1.4)
估计联合概率P(Wi-1,Wi)和边缘概率P(Wi-1),只要数一数Wi-1,Wi这对次在统计的文本中前后相邻出现了多少次#(Wi-1,Wi),以及Wi本身在同样的文本中出现了多少次#(Wi-1),然后用两个数分别除以文本的大小#,即可得到这些词或者二元组的相对频度:
(1.5)
(@代表上述文本大小,即@=#) (1.6)
根据大数定理,只要统计量足够,相对频度就等于概率,即
(1.7)
(1.8)
而P(Wi l Wi-1)就是这两个数的比值,再考虑到上面的两个概率有相同的分母,可以约掉,因此
(1.9)
到这里,我们发现用简单的数学模型也能够解决复杂的问题。
延伸阅读:
高阶语言模型问题:现实生活中,更普遍的问题是某个词和前面若干个词有关。如何选取语言模型就显得十分重要了。
N元模型(N-Gram Model):假设文本中的每个词Wi和前面N-1个词有关,而与更前面的词无关,当前词Wi的概率只取决于前面N-1个词
。因此,
(1.10)
N元模型被称为N-1阶马尔可夫假设。而N=1的一元模型实际上是一个上下文无关的模型,也就是假定当前词出现的概率与前面的无关。而在实际应用最多的是N=3的三元模型。
由于N元模型的大小(或者说是空间复杂度)几乎是N的指数函数
。lVl是一种语言词典的词汇量,一般在几万到几十万个。因此,N不能很大。当N从1到2,再从2到3时,模型的效果上升显著。当N继续增加时,效果的提升就不是很显著了,而资源的消耗却增加的非常快。