1. 语言模型的任务定义与核心价值
在自然语言处理领域,语言模型(Language Model, LM)扮演着基础而关键的角色。它的核心任务是计算一个词序列作为自然语言出现的概率。用数学语言表达,给定一个由词w₁,w₂,...,wₙ构成的句子S,语言模型需要估计联合概率P(w₁,w₂,...,wₙ)。
这个看似简单的任务背后蕴含着深刻的语言学意义。通过概率链式法则,我们可以将这个联合概率分解为一系列条件概率的乘积:
P(w₁,w₂,...,wₙ) = P(w₁) × P(w₂|w₁) × P(w₃|w₁,w₂) × ... × P(wₙ|w₁,...,wₙ₋₁)
这种分解方式揭示了语言模型的核心挑战:如何准确估计给定历史上下文时下一个词出现的条件概率P(wₖ|w₁,...,wₖ₋₁)。这个问题的解决直接关系到语言模型在各种NLP任务中的应用效果。
提示:在实际应用中,语言模型的概率估计质量直接影响下游任务的性能。一个优秀的语言模型应该能够准确捕捉语言的统计规律和语义关系。
2. 统计语言模型的基石:n-gram及其平滑技术
2.1 n-gram模型的基本原理
n-gram模型是早期统计语言模型的核心方法。它基于马尔可夫假设,即当前词出现的概率仅依赖于前面有限个词。具体来说,n-gram模型假设:
P(wₖ|w₁,...,wₖ₋₁) ≈ P(wₖ|wₖ₋ₙ₊₁,...,wₖ₋₁)
根据n的取值不同,我们有以下常见模型:
- unigram (n=1):词独立出现
- bigram (n=2):当前词依赖前一个词
- trigram (n=3):当前词依赖前两个词
以bigram为例,句子概率可近似为:
P(w₁,w₂,...,wₙ) ≈ ∏ₖ₌₁ⁿ P(wₖ|wₖ₋₁)
2.2 参数估计与数据稀疏问题
n-gram模型的参数通常通过极大似然估计(MLE)获得:
P(wᵢ|wᵢ₋ₙ₊₁,...,wᵢ₋₁) = count(wᵢ₋ₙ₊₁,...,wᵢ) / count(wᵢ₋ₙ₊₁,...,wᵢ₋₁)
然而,这种方法面临严重的数据稀疏问题。即使在大规模语料上训练,绝大多数可能的n-gram组合仍然不会出现,导致零概率问题。
2.3 平滑技术详解
为了解决数据稀疏问题,研究者提出了多种平滑技术:
-
加一平滑(Laplace平滑):
Pₐₑₑ₋₁(wᵢ|wᵢ₋₁) = [count(wᵢ₋₁,wᵢ)+1] / [count(wᵢ₋₁)+V]
其中V是词表大小 -
古德-图灵估计:
用出现r+1次的n-gram频率来估计出现r次的n-gram概率:
r* = (r+1)Nᵣ₊₁/Nᵣ -
Kneser-Ney平滑:
当前最有效的平滑方法之一,考虑词的"延续概率":
Pₖₙ(wᵢ|wᵢ₋₁) = max(count(wᵢ₋₁,wᵢ)-d,0)/count(wᵢ₋₁) + λ(wᵢ₋₁)P_cₒₙₜ(wᵢ)
其中d是折扣系数(通常0.75),P_cₒₙₜ(wᵢ)是延续概率
3. 神经语言模型的革命
3.1 分布式表示与词嵌入
传统n-gram模型将词视为离散符号,无法捕捉词之间的语义关系。神经语言模型通过词嵌入(word embedding)将词映射到低维连续空间,使得语义相似的词在嵌入空间中距离相近。
词嵌入的核心思想是分布式假设:词的语义由其上下文决定。在神经语言模型中,词嵌入通常与模型参数一起通过反向传播算法联合优化。
3.2 Bengio的神经概率语言模型
2003年,Yoshua Bengio提出了第一个神经概率语言模型(NPLM),其结构包含:
- 词嵌入层:将词映射为稠密向量
- 隐藏层:处理词向量的拼接
- 输出层:通过softmax产生词表上的概率分布
模型参数包括:
- 词嵌入矩阵C ∈ ℝ^
- 隐藏层权重H ∈ ℝ^
- 输出层权重U ∈ ℝ^
3.3 神经语言模型的优势
相比n-gram模型,神经语言模型具有以下优势:
- 自动学习词之间的相似性关系
- 能够泛化到未见过的词序列
- 参数数量与n无关,避免了n-gram的维度灾难
- 端到端训练,无需单独的特征工程
4. 循环神经网络与长程依赖问题
4.1 RNN语言模型的基本结构
循环神经网络(RNN)通过引入隐藏状态hₜ来捕捉序列历史信息:
hₜ = σ(Wₓₕxₜ + Wₕₕhₜ₋₁ + bₕ)
yₜ = softmax(Wₕᵧhₜ + bᵧ)
其中xₜ是当前词嵌入,hₜ是隐藏状态,yₜ是输出概率分布。
4.2 梯度消失与梯度爆炸
RNN在训练长序列时面临梯度消失/爆炸问题。这是因为误差反向传播时,梯度需要通过时间步连乘:
∂hₜ/∂h₁ = ∏ₖ₌₂ᵗ ∂hₖ/∂hₖ₋₁
当序列较长时,这个连乘积要么趋近于0(梯度消失),要么趋近于无穷(梯度爆炸)。
4.3 LSTM与GRU:门控机制
长短期记忆网络(LSTM)通过引入门控机制解决了梯度消失问题。其核心组件包括:
- 遗忘门:控制历史信息的保留
- 输入门:控制新信息的写入
- 输出门:控制隐藏状态的输出
门控循环单元(GRU)是LSTM的简化版本,将遗忘门和输入门合并为更新门,减少了参数数量。
5. Transformer革命
5.1 自注意力机制
Transformer的核心创新是自注意力机制,它允许模型直接计算序列中任意两个位置的关系。给定输入序列X ∈ ℝ^{n×d},自注意力计算如下:
Q = XW^Q, K = XW^K, V = XW^V
Attention(Q,K,V) = softmax(QK^T/√dₖ)V
其中dₖ是键向量的维度,√dₖ用于缩放点积结果。
5.2 多头注意力
Transformer使用多头注意力来捕捉不同方面的依赖关系:
MultiHead(Q,K,V) = Concat(head₁,...,headₕ)W^O
headᵢ = Attention(QWᵢ^Q, KWᵢ^K, VWᵢ^V)
每个注意力头可以学习关注不同位置或不同类型的依赖关系。
5.3 位置编码
由于自注意力本身不包含位置信息,Transformer通过位置编码注入序列顺序:
PE(pos,2i) = sin(pos/10000^{2i/d})
PE(pos,2i+1) = cos(pos/10000^{2i/d})
这种编码方式允许模型学习相对位置关系。
6. 预训练语言模型时代
6.1 BERT:双向编码器
BERT采用掩码语言模型(MLM)预训练任务:
- 随机遮盖输入中15%的词
- 使用双向上下文预测被遮盖的词
- 同时训练下一句预测(NSP)任务
BERT-base架构:
- 12层Transformer编码器
- 768维隐藏状态
- 12个注意力头
- 1.1亿参数
6.2 GPT系列:自回归模型
GPT模型采用自回归语言模型预训练:
- 从左到右预测下一个词
- 使用掩码自注意力防止信息泄露
- 通过微调或提示工程适应下游任务
GPT-3的关键创新:
- 1750亿参数
- 上下文学习能力
- 零样本/少样本学习
7. 语言模型演进的核心逻辑
纵观语言模型的发展历程,我们可以总结出几条核心演进规律:
- 从离散符号到连续表示
- 从局部上下文到全局依赖
- 从任务特定到通用预训练
- 从监督学习到自监督学习
- 从小规模到超大规模
8. 当前挑战与未来方向
尽管语言模型取得了巨大成功,仍面临诸多挑战:
- 计算效率:模型规模持续增长带来的计算成本
- 事实一致性:减少模型"幻觉"现象
- 长程依赖:处理超长文本序列
- 多模态扩展:整合视觉、听觉等信息
- 可解释性:理解模型内部工作机制
未来可能的发展方向包括:
- 更高效的架构(如稀疏注意力)
- 知识增强的模型
- 持续学习能力
- 与外部工具的集成
- 价值观对齐与安全性