语言模型导论:从统计方法到深度学习
语言模型导论:从统计方法到深度学习
引言:从符号到语义
人类语言的复杂性一直是人工智能领域最具挑战性的研究课题之一。自20世纪50年代图灵提出“机器能思考吗”这一深刻问题以来,如何让计算机理解和生成人类语言便成为计算机科学和人工智能研究的中心议题。在漫长的探索历程中,语言模型作为连接人类语言与机器计算的关键桥梁,经历了从基于规则的专家系统到统计学习方法,再到深度学习范式的深刻变革。这条演进之路不仅反映了我们对语言本质认识的不断深化,更展示了人工智能技术从模仿到理解、从计算到认知的艰难攀登。
语言模型的核心目标是为自然语言序列建立概率模型,其本质是捕捉语言的内在规律和统计特性。一个有效的语言模型应当能够准确评估一个给定句子在特定语言中出现的可能性,同时也能在给定前文的条件下,预测下一个词或字符的概率分布。这种能力看似简单,实则涉及对语法规则、语义关系、语用习惯乃至世界知识的综合把握。正因如此,语言模型的研究不仅具有重要的技术价值,更具有深远的科学意义——它迫使我们直面语言理解的本质问题:什么使得一个句子“合理”或“流畅”?语言的规律是否可以完全通过数学方法来刻画?
本书作为对语言智能深度技术的一次系统梳理,将从语言模型这一基础概念出发,沿着技术演进的脉络,逐步深入到注意力机制、Transformer架构乃至大语言模型的最新发展。本章作为全书的开篇,将首先回溯语言模型发展的历史源流,从最朴素的N-gram模型讲起,经由隐马尔可夫模型、神经语言模型,最终引出循环神经网络在序列建模中的关键作用。我们将看到,每一次技术范式的转换都源于对先前方法局限性的深刻洞察,而深度学习革命的发生也绝非偶然——它是计算能力、数据规模和算法创新共同作用的必然结果。
统计语言模型的诞生:N-gram模型
马尔可夫假设与N-gram的数学基础
要理解现代语言模型的发展脉络,我们首先需要回到语言模型研究的历史起点。1948年,克劳德·香农(Claude Shannon)在其开创性论文《通信的数学理论》中,首次将概率论引入语言研究,提出了利用N-gram统计来建模语言的思想。香农的核心洞见在于:自然语言虽然看似变幻莫测,但其内在规律可以通过大量文本的统计分析来捕捉。这一思想奠定了统计语言模型的基础,也为后来半个多世纪的NLP研究指明了方向。
形式化地给定一个词序列$w_1, w_2, ..., w_n$,语言模型的核心任务是计算该序列的联合概率$P(w_1, w_2, ..., w_n)$。根据概率论的链式法则,我们有:
$$P(w_1, w_2, ..., w_n) = P(w_1) \cdot P(w_2|w_1) \cdot P(w_3|w_1, w_2) \cdot ... \cdot P(w_n|w_1, w_2, ..., w_{n-1})$$
直接计算这个联合概率面临一个根本性困难:条件概率$P(w_t|w_1, ..., w_{t-1})$的参数空间随历史长度的增加而指数增长。对于任意一个有$V$个词的词表,历史状态的数量可达$|V|^{t-1}$,这在实践中是完全不可计算的。
马尔可夫假设(Markov Assumption)为这一困境提供了务实的解决方案。该假设认为,词的分布仅与最近的若干个词相关,而与更早的历史无关。用数学语言表达,即对于$N-1$阶马尔可夫模型:
$$P(w_t|w_1, ..., w_{t-1}) \approx P(w_t|w_{t-N+1}, ..., w_{t-1})$$
基于这一假设,我们可以将联合概率近似为:
$$P(w_1, ..., w_n) \approx \prod_{t=1}^{n} P(w_t|w_{t-N+1}^{t-1})$$
其中,$w_{t-N+1}^{t-1}$表示从第$t-N+1$个词到第$t-1$个词的上下文窗口。当$N=2$时,我们得到Bigram模型,它仅考虑前一个词的影响;当$N=3$时,我们得到Trigram模型,考虑前两个词的影响。更高阶的N-gram模型可以捕获更丰富的上下文信息,但同时也面临数据稀疏性更加严重的问题。
N-gram模型的参数估计与平滑技术
在N-gram模型中,我们需要估计的核心参数是条件概率$P(w_t|w_{t-N+1}^{t-1})$。最大似然估计(Maximum Likelihood Estimation, MLE)是最直观的方法,它通过统计语料库中相应词序列的出现频率来计算参数:
$$P(w_t|w_{t-N+1}^{t-1}) = \frac{C(w_{t-N+1}^{t-1}, w_t)}{C(w_{t-N+1}^{t-1})}$$
其中,$C(\cdot)$表示词序列在训练语料中的出现次数。然而,这种看似简单的方法面临严峻的数据稀疏问题。语言中存在大量低频或从未出现的词组合——根据齐普夫定律(Zipf's Law),词的频率分布极度不均衡,少数高频词占据了大部分出现次数,而绝大多数词组合可能是独一无二的。
平滑技术(Smoothing)是解决数据稀疏问题的主要方法,其核心思想是将部分概率质量从高频事件重新分配给低频或未观察到的事件。最简单的拉普拉斯平滑(Laplace Smoothing)将每个计数加1:
$$P(w_t|w_{t-N+1}^{t-1}) = \frac{C(w_{t-N+1}^{t-1}, w_t) + 1}{C(w_{t-N+1}^{t-1}) + |V|}$$
然而,拉普拉斯平滑对于文本建模往往表现不佳,因为它过于均匀地分配概率质量,忽略了语言的实际频率分布。更精细的平滑方法包括:
加法平滑(Add-k smoothing):将常数$k$设为小于1的值,以减少对低频事件的过度惩罚。
古德-图灵估计(Good-Turing Estimation):利用未观测事件的概率来估计出现一次的词的概率,再将这部分概率质量重新分配给其他未观测事件。
Katz平滑:结合高阶和低阶模型,使用回退机制将概率质量从高阶模型回退到低阶模型。
Kneser-Ney平滑:当前最有效的平滑方法之一,它根据上下文的多样性来调整回退概率,而不是简单地根据词频。
平滑技术的选择对N-gram模型的性能有显著影响。在实际应用中,Kneser-Ney平滑及其变体通常是文本处理任务的首选方法。
N-gram模型的局限性与历史贡献
尽管N-gram模型在语言建模历史上具有重要地位,它也存在若干根本性局限。首先是数据稀疏性问题的持续困扰:无论使用何种平滑技术,高阶N-gram模型始终难以可靠地估计长距离依赖关系,因为真正有意义的长距离依赖在语料库中可能几乎不会出现。其次,N-gram模型本质上是一种词级别的统计,无法捕获词的深层语义信息——例如,“狗咬人”和“人咬狗”在N-gram统计中可能具有完全不同的概率分布,尽管它们在语义结构上有着密切的关系。
此外,N-gram模型缺乏对语言泛化能力的支持。如果模型在训练语料中从未见过“苹果公司发布了新款手机”这样的句子,它就无法将“苹果公司”的概念与“手机”这一领域知识联系起来,也无法理解“发布”这一动作与“手机”这一宾语的搭配合理性。这种缺乏语义理解能力的局限性,注定了N-gram模型只能作为语言建模的起点,而非终点。
然而,我们不应低估N-gram模型的历史贡献。正是这些朴素的统计方法揭示了语言的某些可预测规律,证明了语言并非完全不可捉摸的混沌系统。它们为后续研究提供了重要的基线(baseline)和评估基准,也培养了利用大规模语料库进行语言研究的范式。更重要的是,N-gram模型所面临的问题——数据稀疏、语义缺失、长距离依赖——直接指引了后来者的研究方向。
隐马尔可夫模型:序列标注的概率图模型
隐马尔可夫模型的基本框架
在统计语言处理的发展历程中,隐马尔可夫模型(Hidden Markov Model, HMM)占据着另一个里程碑式的地位。HMM最早由Baum和Petrie在1960年代提出,最初应用于语音识别领域,后来成为自然语言处理中序列标注任务的核心工具。HMM的核心思想是将观察到的序列(如词序列)与潜在的隐藏状态序列联系起来,通过学习状态之间的转移概率和状态到观察的发射概率来建模语言现象。
一个HMM由以下五个要素组成$(\lambda = (A, B, \pi))$:
1. 状态集合$Q = \{q_1, q_2, ..., q_N\}$:表示潜在的、不可直接观察的状态。 2. 观测集合$O = \{o_1, o_2, ..., o_M\}$:表示可观察的输出符号。 3. 状态转移概率矩阵$A = [a_{ij}]$:其中$a_{ij} = P(q_t = j | q_{t-1} = i)$,表示从状态$i$转移到状态$j$的概率。 4. 观测概率矩阵$B = [b_j(k)]$:其中$b_j(k) = P(o_t = o_k | q_t = j)$,表示在状态$j$下观测到符号$o_k$的概率。 5. 初始状态概率$\pi = [\pi_i]$:其中$\pi_i = P(q_1 = i)$,表示序列开始于状态$i$的概率。
在自然语言处理的语境中,HMM最常见的应用是词性标注(Part-of-Speech Tagging)任务。在这里,隐藏状态对应于词性标签(如名词、动词、形容词等),观测序列则是实际的词。例如,在句子"The cat sat on the mat"中,词性序列(隐藏状态)可能是"DT NN VBD IN DT NN"。
HMM的三个核心问题
HMM的理论框架围绕三个经典问题展开,这些问题构成了几乎所有HMM应用的基础。
评估问题(Evaluation Problem):给定模型参数$\lambda$和观测序列$O$,计算观测序列出现的概率$P(O|\lambda)$。这可以使用前向算法(Forward Algorithm)或后向算法(Backward Algorithm)高效求解,时间复杂度为$O(N^2T)$,其中$N$是状态数,$T$是序列长度。这一问题在语言模型评估中具有直接应用:我们可以计算一个句子在特定模型下的概率。
解码问题(Decoding Problem):给定模型参数$\lambda$和观测序列$O$,找出最可能产生该观测的隐藏状态序列$Q^*$。维特比算法(Viterbi Algorithm)通过动态规划求解这一问题:
$$Q^* = \arg\max_{Q} P(Q|O, \lambda)$$
在词性标注任务中,解码问题对应于找到最可能的词性序列。
学习问题(Learning Problem):给定观测序列$O$,调整模型参数$\lambda$以最大化$P(O|\lambda)$。前向-后向算法(Forward-Backward Algorithm),即Baum-Welch算法,是EM算法在HMM中的特例,能够从未标注的数据中学习模型参数。
HMM在语言处理中的应用与局限
在NLP领域,HMM被广泛应用于词性标注、命名实体识别、语音识别等序列标注任务。以词性标注为例,HMM通过学习状态转移概率来捕获语法约束(如形容词后接名词的概率较高),通过发射概率来捕获词与词性之间的对应关系。尽管这种建模方式在许多任务上取得了不错的效果,但它也存在明显的局限性。
首先,HMM的观测独立性假设——即假设当前观测仅与当前状态相关,而与其他观测无关——在语言处理中常常不成立。在词性标注中,一个词的词性往往与上下文中的其他词密切相关,这种依赖关系被HMM忽略了。其次,HMM是一种生成式模型,它联合建模$P(X, Y)$,然后通过贝叶斯规则推导条件概率$P(Y|X)$。当观测空间的维度较高时(如处理词这样稀疏的符号),生成式模型往往不如判别式模型高效。
这些局限性促使研究者探索更强大的序列建模工具,最终推动了条件随机场(Conditional Random Fields, CRF)以及基于神经网络的序列标注方法的发展。尽管如此,HMM作为概率图模型的经典范例,它所建立的状态转移和发射概率的建模框架,以及解决三个核心问题的算法体系,仍对后续研究产生了深远影响。
词向量表示:从稀疏到稠密的语义编码
One-Hot编码的局限
在讨论神经语言模型之前,我们需要首先理解词表示问题的重要性。计算机处理语言的第一步,是将离散的符号转换为可计算的数值形式。最直观的方案是词表索引(Index-based Representation),即给词表中的每个词分配一个唯一的整数ID。更进一步,我们可以用One-Hot向量来表示词:假设词表大小为$|V|$,则每个词被表示为一个$|V|$维的向量,其中对应于该词索引的维度为1,其余维度均为0。
形式化地,对于词表$V = \{w_1, w_2, ..., w_{|V|}\}$中的词$w_i$,其One-Hot表示为:
$$\mathbf{e}_{w_i} = [0, 0, ..., 1, ..., 0]^\top$$
其中第$i$个位置为1,其余位置为0。
One-Hot表示具有实现简单、解释直观的优点,但它存在两个根本性的缺陷。第一是维度灾难:词表大小通常在数万到数十万之间,这意味着每个词的向量表示需要占用大量内存,且难以进行高效的数学运算。第二是语义鸿沟:所有One-Hot向量之间两两正交,其欧氏距离恒为$\sqrt{2}$,余弦相似度恒为0。这意味着One-Hot编码无法表达任何语义关系——在向量空间中,“猫”和“狗”的距离与“猫”和“电脑”的距离完全相同。这与语言的实际特性形成鲜明对比:在语义空间中,“猫”和“狗”的相似度显然应该远高于“猫”和“电脑”的相似度。
分布式表示的思想
分布式表示(Distributed Representation)的提出是对One-Hot编码局限性的根本性回应。这一思想最早由Firth(1957年)提出,即著名的“你可以通过一个词的上下文来了解它”("You shall know a word by the company it keeps")。其核心洞见是:词的语义不是由其本身的符号决定的,而是由其在语言使用中的分布模式决定的——经常出现在相似上下文中的词具有相似的语义。
基于这一思想,如果我们能够学习一个词的向量表示,使得语义相近的词在向量空间中距离较近,那么这个向量就可以捕获词的语义信息。这种表示被称为词嵌入(Word Embedding),因为它将词“嵌入”到了一个低维的连续向量空间中。与One-Hot的高维稀疏向量不同,词嵌入是一种低维稠密表示,每个维度不再对应于某个具体的词,而是对应于一个潜在的语义特征。
Word2Vec:基于预测的词表示学习
Word2Vec是Mikolov等人于2013年提出的一种高效的词嵌入学习方法,它的出现标志着词向量研究进入了一个新阶段。Word2Vec包含两个模型架构:连续词袋模型(Continuous Bag-of-Words, CBOW)和跳元模型(Skip-gram)。这两个模型的核心思想都是通过预测任务来学习词向量,但采用了不同的输入输出配置。
CBOW模型根据上下文词来预测中心词。给定一个词序列$w_{t-N}, ..., w_{t-1}, w_{t+1}, ..., w_{t+N}$(上下文)和$w_t$(中心词),CBOW模型的目标是最大化:
$$P(w_t|w_{t-N}, ..., w_{t-1}, w_{t+1}, ..., w_{t+N})$$
模型通过将上下文词的One-Hot向量输入到一个简单的神经网络中,输出中心词的概率分布。训练完成后,模型的隐层权重即为词嵌入矩阵。
Skip-gram模型则相反,它根据中心词来预测上下文词。对于中心词$w_t$,Skip-gram模型最大化:
$$\prod_{-N \leq j \leq N, j \neq 0} P(w_{t+j}|w_t)$$
Skip-gram在处理稀有词和短语时通常表现更好,但训练时间较长。
Word2Vec的一个显著特点是它能够捕获语义和语法关系。研究发现,通过简单的向量算术运算,可以发现词之间的有意义关系:
$$\vec{\text{king}} - \vec{\text{man}} + \vec{\text{woman}} \approx \vec{\text{queen}}$$
这种“类比推理”能力表明,词向量确实编码了丰富的语义结构信息。这一发现极大地激发了研究者对词表示学习的兴趣,也为后来更大规模的语言表示学习奠定了基础。
GloVe:融合全局统计与局部上下文的表示
GloVe(Global Vectors for Word Representation)是Pennington等人于2014年提出的另一种词嵌入方法。与Word2Vec主要依赖局部上下文信息不同,GloVe明确融合了全局词共现矩阵的统计信息。
GloVe的核心思想是:词向量的含义可以通过其与共现概率的关系来表达。设$X_{ij}$表示词$i$和词$j$在语料库中的共现次数,$X_i = \sum_j X_{ij}$为所有词与词$i$的共现次数之和。定义共现概率$P_{ij} = P(j|i) = X_{ij} / X_i$。
GloVe设计的损失函数直接建模共现概率的对数关系:
$$J = \sum_{i,j=1}^{V} f(X_{ij}) \left( \mathbf{w}_i^\top \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j - \log X_{ij} \right)^2$$
其中$\mathbf{w}_i$是主词向量,$\tilde{\mathbf{w}}_j$是共现词向量,$b_i$和$\tilde{b}_j$是偏置项,$f(X_{ij})$是一个加权函数,用于平衡高频和低频共现:
$$f(x) = \begin{cases} (x/x_{\max})^\alpha & \text{if } x < x_{\max} \\ 1 & \text{otherwise} \end{cases}$$
GloVe通过融合全局共现统计信息和局部的上下文窗口信息,在许多词相似性任务上取得了当时最佳的效果。更重要的是,GloVe的训练过程是完全可并行的,因此在大型语料库上的训练效率很高。
词向量演进的深远意义
从One-Hot到Word2Vec、GloVe的演进,不仅仅是词表示技术层面的进步,更反映了我们对语言本质认识的深化。分布式表示揭示了语义是可以被表示和计算的——词的意义不再是一个神秘的、不可触及的哲学概念,而是可以通过向量空间中的位置和距离来精确刻画。这种“语义可计算性”为后续的神经网络语言模型提供了坚实的表示基础。
然而,我们也应该认