1.1 基于统计方法的语言模型
语言模型通过对语料库(Corpus)中的语料进行统计或学习来获得预测语言符号概率的能力。通常,基于统计的语言模型通过直接统计语言符号在语料库中出现的频率来预测语言符号的概率。其中,n-grams是最具代表性的统计语言模型。n-grams语言模型基于马尔可夫假设和离散变量的极大似然估计给出语言符号的概率。本节首先给出n-grams语言模型的计算方法,然后讨论n-grams语言模型如何在马尔可夫假设的基础上应用离散变量极大似然估计给出语言符号出现的概率。
1.1.1 n-grams 语言模型
设包含 N 个元素的语言符号可以表示为 w1:N={w1,w2,w3,…,wN} 。 w1:N 可以代表文本,也可以代表音频序列等载有语义信息的序列。为了便于理解,本章令语言符号 w1:N 代表文本,其元素 wi∈w1:N 代表词, i=1,…,N 。在真实语言模型中, wi 可以是 Token 等其他形式。关于 Token 的介绍将在第三章中给出。
n-grams 语言模型中的 n-gram 指的是长度为 n 的词序列。n-grams 语言模型通过依次统计文本中的 n-gram 及其对应的 (n-1)-gram 在语料库中出现的相对频率来计算文本 w1:N 出现的概率。计算公式如下所示:
Pn−grams(w1:N)=i=n∏NC(wi−n+1:i−1)C(wi−n+1:i),(1.1) 其中, C(wi−n+1:i) 为词序列 {wi−n+1,…,wi} 在语料库中出现的次数, C(wi−n+1:i−1) 为词序列 {wi−n+1,…,wi−1} 在语料库中出现的次数。其中, n 为变量,当 n=1 时,称之为unigram,其不考虑文本的上下文关系。此时,分子 C(wi−n+1:i)=C(wi) , C(wi) 为词 wi 在语料库中出现的次数;分母 C(wi−n+1:i−1)=Ctotal , Ctotal 为语料库中包含的词的总数。当 n=2 时,称之为bigrams,其对前一个词进行考虑。此时,
语料库
脖子长是长颈鹿最醒目的特征之一。
脖子长使得长颈鹿看起来非常优雅,并为其在获取食物上带来便利。
有了长脖子的加持,长颈鹿可以观察到动物园里那些隐蔽的角落里发生的事情。
长颈鹿脖子和人类脖子一样,只有七节颈椎,也容易患颈椎病。
如同长颈鹿脖子由短变长的进化历程一样,语言模型也在不断进化。
图1.1:n-grams示例语料库。
分子 C(wi−n+1:i)=C(wi−1,wi) , C(wi−1,wi) 为词序列 {wi−1,wi} 在语料库中出现的次数;分母 C(wi−n+1:i−1)=C(wi−1) , C(wi−1) 为词 wi−1 在语料库中出现的次数。以此类推,当 n=3 时,称之为trigrams,其对前两个词进行考虑。当 n=4 时,称之为4-grams,其对前三个词进行考虑……
下面通过一个bigrams语言模型的例子来展示n-grams语言模型对文本出现概率进行计算的具体方式。假设语料库中包含5个句子,如图1.1所示。基于此语料库,应用bigrams对文本“长颈鹿脖子长”(其由{长颈鹿,脖子,长}三个词构成)出现的概率进行计算,如下式所示:
Pb i g r a m s(长 颈 鹿,脖 子,长)=C(长 颈 鹿)C(长 颈 鹿,脖 子)⋅C(脖 子)C(脖 子,长)。(1.2) 在此语料库中, C (长颈鹿) =5,C (脖子) =6,C (长颈鹿,脖子) =2,C (脖子,长) =2 ,故有:
Pbigrams(长 颈 鹿,脖 子,长)=52⋅62=152。(1.3) 在此例中,我们可以发现虽然“长颈鹿脖子长”并没有直接出现在语料库中,但是bigrams语言模型仍可以预测出“长颈鹿脖子长”出现的概率有 152 。由此可见,n-grams具备对未知文本的泛化能力。这也是其相较于传统基于规则的方法的
优势。但是,这种泛化能力会随着 n 的增大而逐渐减弱。应用 trigrams 对文本“长颈鹿脖子长”出现的概率进行计算,将出现以下“零概率”的情况:
Pt r i g r a m s(长 颈 鹿 , 脖 子 , 长)=C(长 颈 鹿 , 脖 子)C(长 颈 鹿 , 脖 子 , 长)=0。(1.4) 因此,在 n-grams 语言模型中, n 代表了拟合语料库的能力与对未知文本的泛化能力之间的权衡。当 n 过大时,语料库中难以找到与 n-gram 一模一样的词序列,可能出现大量“零概率”现象;在 n 过小时,n-gram 难以承载足够的语言信息,不足以反应语料库的特性。因此,在 n-grams 语言模型中, n 的值是影响性能的关键因素。上述的“零概率”现象可以通过平滑(Smoothing)技术进行改善,具体技术可参见文献 [11]。
本小节讲解了 n-grams 语言模型如何计算语言符号出现的概率,但没有分析 n-grams 语言模型的原理。下一小节将从 n 阶马尔可夫假设和离散型随机变量的极大似然估计的角度对 n-grams 语言模型背后的统计学原理进行阐述。
1.1.2 n-grams 的统计学原理
n-grams 语言模型是在 n 阶马尔可夫假设下,对语料库中出现的长度为 n 的词序列出现概率的极大似然估计。本节首先给出 n 阶马尔可夫假设的定义(见定义1.1)和离散型随机变量的极大似然估计的定义(见定义1.2),然后分析 n-grams 如何在马尔可夫假设的基础上应用离散变量极大似然估计给出语言符号出现的概率。
定义1.1 (n阶马尔可夫假设)
对序列 {w1,w2,w3,…,wN} ,当前状态 wN 出现的概率只与前 n 个状态 {wN−n,…,wN−1} 有关,即:
P(wN∣w1,w2,…,wN−1)≈P(wN∣wN−n,…,wN−1)。(1.5) 
定义1.2(离散型随机变量的极大似然估计)
给定离散型随机变量 X 的分布律为 P{X=x}=p(x;θ) ,设 X1,…,XN 为来自 X 的样本, x1,…,xN 为对应的观察值, θ 为待估计参数。在参数 θ 下,分布函数随机取到 x1,…,xN 的概率为:
p(x∣θ)=i=1∏Np(xi;θ)。(1.6) 构造似然函数为:
L(θ∣x)=p(x∣θ)=i=1∏Np(xi;θ)。(1.7) 离散型随机变量的极大似然估计旨在找到 θ 使得 L(θ∣x) 取最大值。

在上述两个定义的基础上,对 n -grams的统计原理进行讨论。设文本 w1:N 出现的概率为 P(w1:N) 。根据条件概率的链式法则, P(w1:N) 可由下式进行计算。
P(w1:N)=P(w1)P(w2∣w1)P(w3∣w1:2)….P(wN∣w1:N−1)=∏i=1NP(wi∣w1:i−1)。(1.8) 根据 n 阶马尔可夫假设,n-grams语言模型令 P(wi∣wi−n:i−1) 近似 P(wi∣w1:i−1) 。然后,根据离散型随机变量的极大似然估计,令 C(wi−n:i−1)C(wi−n:i) 近似 P(wi∣wi−n:i−1) 。从而,得到n-grams语言模型的输出 Pn−grams(w1:N) 是对 P(wi∣w1:i−1) 的近似。即,
Pn−grams(w1:N)≈P(w1:N)。(1.9) 下面,以bigrams为例,介绍 C(wi−n:i−1)C(wi−n:i) 与极大似然估计间的关系。假设语料库中共涵盖 M 个不同的单词, {wi,wj} 出现的概率为 P(wi,wj) ,对应出现的频率为 C(wi,wj) ,则其出现的似然函数为:
L(θ)=i=1∏Mj=1∏MP(wi,wj)C(wi,wj),(1.10) 其中, θ={P(wi,wj)}i,j=1M 。根据条件概率公式 P(wi,wj)=P(wj∣wi)P(wi) ,有
L(θ)=i=1∏Mj=1∏MP(wj∣wi)C(wi,wj)P(wi)C(wi,wj)。(1.11) 其对应的对数似然函数为:
Llog(θ)=i=1∑Mj=1∑MC(wi,wj)logP(wj∣wi)+i=1∑Mj=1∑MC(wi,wj)logP(wi)。(1.12) 因为 ∑j=1MP(wj∣wi)=1 ,所以最大化对数似然函数可建模为如下的约束优化问题:
maxLlog(θ)s.t.∑j=1MP(wj∣wi)=1f o ri∈[1,M]。(1.13) 其拉格朗日对偶为:
L(λ,Llog)=Llog(θ)+i=1∑Mλi(j=1∑MP(wj∣wi)−1)。(1.14) 对其求关于 P(wj∣wi) 的偏导, 可得:
∂P(wj∣wi)∂L(λ,Llog)=i=1∑MP(wj∣wi)C(wi,wj)+i=1∑Mλi。(1.15) 当导数为0时,有:
P(wj∣wi)=−λiC(wi,wj)。(1.16) 因 ∑j=1MP(wj∣wi)=1 , λi 可取值为 −∑j=1MC(wi,wj) , 即
P(wj∣wi)=∑j=1MC(wi,wj)C(wi,wj)=C(wi)C(wi,wj)。(1.17) 上述分析表明bigram语言模型中的 C(wi)C(wi,wj) 是对语料库中的长度为2的词序列的 P(wj∣wi) 的极大似然估计。该结论可扩展到 n>2 的其他n-grams语言模型中。
n-grams 语言模型通过统计词序列在语料库中出现的频率来预测语言符号的概率。其对未知序列有一定的泛化性,但也容易陷入“零概率”的困境。随着神经网络的发展,基于各类神经网络的语言模型不断被提出,泛化能力越来越强。基于神
经网络的语言模型不再通过显性的计算公式对语言符号的概率进行计算,而是利用语料库中的样本对神经网络模型进行训练。本章接下来将分别介绍两类最具代表性的基于神经网络的语言模型:基于 RNN 的语言模型和基于 Transformer 的语言模型。