1.1 N-Gram模型

小冰:哦,原来如此!我记得你曾说过,语言模型的雏形N-Gram很早就诞生了。

咖哥:的确如此。20世纪40年代,人工智能这个概念刚刚诞生,彼时的计算机科学家们正为了让计算机理解和生成自然语言而努力。信息论的奠基人香农(Shannon)提出了一种衡量信息量的方法,叫作“香农熵”。他认为,要衡量一句话的信息量,就要了解其中每个单词出现的概率。

小冰:还“彼时”,文绉绉的……

咖哥:嘿!认真听重点。受到香农熵的启发,研究自然语言处理的科学家们发现,要让计算机理解自然语言,就必须让它学会对语言中的词序列进行概率估计。这样,计算机才能判断哪些语句是符合自然语言规律的,哪些是不合逻辑的(见下图)。这就为语言模型的诞生奠定了理论基础。

第一个句子出现的概率更高,因此更符合自然语言规律

随后,在20世纪50年代,研究者开始尝试用统计方法来预测文本中的词序列概率,这种为了预测词汇出现的概率而使用的统计方法就是自然语言处理中的概率模型。概率模型的基本思想是,给定一个词序列,计算下一个词出现的概率。然而,由于词序列可能非常长,计算整个序列的联合概率[1]会变得非常复杂。这时,N-Gram模型就派上了用场。


[1] 联合概率是指多个随机变量同时满足特定条件的概率,例如p (x,y)表示随机变量x取这个值,同时y取那个值的概率。

在N-Gram模型中,我们通过将文本分割成连续的N个词的组合(即N-Gram),来近似地描述词序列的联合概率。我们假设一个词出现的概率仅依赖于它前面的N-1个词。换句话说,我们利用有限的上下文信息(N-1个词)来近似地预测下一个词的概率。

下面就是一个以词为“Gram”(元素)的N-Gram模型图示。其中Unigram中N值为1,可以称之为一元组。以此类推,Bigram中N值为2,是二元组,Trigram是三元组。

以词为元素的N-Gram模型

咖哥发言

N-Gram 的概念并不是由某个具体的人提出的,早在20世纪初,人工智能这门学科确立之前,它就在许多语言学家、数学家和密码学家的研究中发展起来了。

当时,哈佛大学的乔治·金斯利·齐普夫(George Kingsley Zipf)发表了关于词频和排名的经验规律,即齐普夫定律。这个定律描述了一个有趣的现象:在任何给定的语料库中,一个词出现的频率与其排名成反比。这个发现激发了人们对词频率分布研究的兴趣。

20世纪30年代至40年代,数学家、语言学家和密码学家们为了解密敌对国家的加密通信,开始研究概率论和信息论在语言处理中的应用。这个时期,香农提出了“熵”的概念,用于衡量信息的不确定性。这为后来N-Gram模型的发展奠定了基础。

第二次世界大战期间,英国的密码学家阿兰·图灵为了解开恩尼格玛(Enigma)密码机的秘密,也使用了统计方法,这些方法后来演变成了N-Gram模型的雏形。在战后的几十年里,研究者们持续探索着基于统计的自然语言处理方法,N-Gram模型成了这一领域的基石。

综上所述,N-Gram模型的发展是多学科交叉研究和应用的结果,很多学者为其发展做出了重要贡献。虽然没有一个具体的“大师”发明了N-Gram模型,但我们可以从它的发展历史中看到,许多人的智慧和努力共同推动了自然语言处理技术的进步。

具体来说,N-Gram模型的构建过程如下。

(1)将给定的文本分割成连续的N个词的组合(N-Gram)。

比如,在Bigram模型(2-Gram模型,即二元模型)中,我们将文本分割成多个由相邻的两个词构成的组合,称它们为“二元组”(2-Gram)。

把“我爱吃肉”这句话分割成二元组

(2)统计每个N-Gram在文本中出现的次数,也就是词频。

比如,二元组“我爱”在语料库中出现了3次(如下页图所示),即这个二元组的词频为3。

二元组“我爱”在语料库中出现了3次

(3)为了得到一个词在给定上下文中出现的概率,我们可以利用条件概率公式计算。具体来讲,就是计算给定前N-1个词时,下一个词出现的概率。这个概率可以通过计算某个N-Gram出现的次数与前N-1个词(前缀)出现的次数之比得到。

比如,二元组“我爱”在语料库中出现了3次,而二元组的前缀“我”在语料库中出现了10次,则给定“我”,下一个词为“爱”的概率为30%(如下图所示)。

给定“我”,下一个词为“爱”的概率为30%

(4)可以使用这些概率来预测文本中下一个词出现的可能性。多次迭代这个过程,甚至可以生成整个句子,也可以算出每个句子在语料库中出现的概率。

比如,从一个字“我”,生成“爱”,再继续生成“吃”,直到“我爱吃肉”这个句子。计算“我爱”“爱吃”“吃肉”出现的概率,然后乘以各自的条件概率,就可以得到这个句子在语料库中出现的概率了。如右图所示。

哪一个词更可能出现在“爱”后面

咖哥:小冰,听懂了吗?

小冰:懂了。N-Gram模型是一种简化的概率模型,它通过计算N个词的联合概率来预测下一个词,可以说是最早的语言模型,当然,也是一种统计方法。

咖哥:那你说说N-Gram里面的“N”代表什么,“Gram”又代表什么?