从 n-gram 到神经网络#
统计语言模型 用链式法则分解序列概率,再用马尔可夫假设把每个条件概率近似为前 n−1 个词:
P(w1,…,wm)=i=1∏mP(wi∣w1,…,wi−1)≈i=1∏mP(wi∣wi−n+1,…,wi−1)n-gram 可以看作一种直接的近似策略,但有两个根本问题:
- 条件概率表随阶数指数增长,高阶模型严重稀疏;
- 单词的离散表示忽略了单词之间的相似性
神经网络语言模型(Neural Network Language Model, NNLM)用低维稠密词向量 + 神经网络估计 P(wi∣wi−n+1,…,wi−1)。词向量在训练语言模型的过程中顺带学到,这也正是 Word2Vec 的直接来源。
语言模型的训练数据可以直接取自原始文本:给定前文,下一个词就是标签。因此它是典型的自监督学习任务,不需要人工标注。
NNLM 的结构#
NNLM 沿用 n-gram 的马尔可夫假设,只使用固定长度的历史窗口 wi−n+1,…,wi−1,目标是输出下一个词在词表 V 上的概率分布。
输入层:embedding lookup 与拼接#
每个历史词先查表得到 d 维词向量:
vk=Exwk∈Rd其中:
- xwk:one-hot 向量;
- E∈Rd×V:嵌入矩阵。
把 n−1 个词向量按顺序拼接:
v=[vi−n+1;…;vi−1]∈R(n−1)d隐藏层#
h=f(Whidv+bhid)其中:
- Whid∈Rm×(n−1)d:隐藏层权重;
- m:隐藏层维度;
- f:激活函数,常取 tanh 或 ReLU。
输出层#
y=Wouth+bout,P(wi=k∣history)=∑j=1Vexp(yj)exp(yk)Wout∈RV×m,输出维度等于词表大小。
参数量(相比于 n-gram 的重要优势)#
NNLM 的总参数量为
嵌入Vd+隐藏层Whidm(n−1)d+隐藏层偏置bhidm+输出层WoutVm+输出层偏置boutV=V(d+m+1)+m((n−1)d+1)
- 前馈神经网络的参数量随词表大小 V 和历史长度 n−1 线性增长;
- 而 n-gram 的条件概率表规模约为 Vn−1,随阶数指数增长。
- 这是 NNLM 相对 n-gram 的重要优势。
训练目标#
对整个语料最大化对数似然,等价于最小化交叉熵:
L=−i=1∑TlogP(wi∣wi−n+1,…,wi−1)用随机梯度下降和反向传播更新嵌入矩阵、隐藏层和输出层。训练完成后,嵌入矩阵 E 的列就是词向量。
NNLM 的局限#
固定窗口仍然继承了 n-gram 的假设:预测只依赖前 n−1 个词。
例如:
与小明一起旅行游玩总是充满了惊喜,你永远不会知道他将带你到哪里去。
要判断“他”指代“小明”,模型需要跨越十几个词的历史。前馈网络只能通过加长窗口硬解,无法动态保留更早的信息。
RNNLM:用隐藏状态携带历史#
循环神经网络语言模型(RNNLM)不再截断历史,而是用一个隐藏状态 hi 递推地汇总到当前位置为止的全部历史。
RNN 常用于处理序列数据
- 上一时刻的隐藏层状态会作为当前时刻的输入
- 每个时刻的隐藏层状态都能够保存并传递过去所有词的信息
- 通过隐藏层状态动态地捕捉整个序列的依赖关系
- 有效地解决了语言模型中的动态依赖问题
输入层:词向量与历史拼接#
第 i 步的输入由前一个词 wi−1 的词向量 vi−1 和上一时刻的 包含所有历史词信息的 隐藏状态 hi−1 拼接 而成:
xi=[vi−1;hi−1]∈Rd+m
- d:词向量维度;
- m:隐藏状态维度。
- 第一个词没有历史,通常令 h0 为零向量或随机初始化向量。
隐藏层:权重拆解#
hi=tanh(Whidxi+bhid)=tanh(Uvi−1+Vhi−1+b)其中:
-
把 Whid 拆成 [U,V] 后,递归结构更清楚:U 负责处理当前词向量,V 负责处理上一时刻的隐藏状态。
-
U∈Rm×d:词向量的权重;
-
V∈Rm×m:隐藏状态的递推权重。
输出层:隐藏状态预测下一个词#
yi=Wouthi+bout,P(wi=k∣w<i)=∑j=1Vexp(yj)exp(yk)
- Wout∈RV×m:输出层权重。
RNNLM 的关键性质:
- 所有时间步共享同一组参数,序列长度增加不会增加参数量;
- 隐藏状态在理论上可以携带任意远的历史信息。
训练与评价#
训练仍然是对数似然最大化,梯度需要通过时间反向传播(BPTT),见 RNN 基础 和 BPTT。语言模型常用困惑度(Perplexity, PPL)评价:
PPL=exp(−T1i=1∑TlogP(wi∣w<i))PPL 可以理解为模型在每个位置上的“平均候选词数”,越低越好。具体推导见 困惑度。
优点与问题#
RNNLM 的优点:
- 不限制历史长度,能建模长距离依赖;
- 参数量与序列长度无关,词向量在所有位置共享;
- 仍然是自监督训练,可直接利用大规模无标注文本。
问题:
- 梯度消失/爆炸:长序列上 BPTT 的梯度不稳定。常用梯度截断缓解,但会削弱长距离建模;更好的方案是 LSTM/GRU 的门控结构;
- 串行计算:第 i 步依赖第 i−1 步的隐藏状态,无法像 Transformer 那样在训练时并行处理整个序列;
- 固定容量瓶颈:所有历史被压缩进固定维度的 hi,信息量大时会有损失。
这些限制后来由注意力机制和 Transformer 解决:自注意力可以直接建模任意两个位置,并在训练时并行。
与 Word2Vec 的关系#
Word2Vec 可以看作 NNLM 的简化:
- Skip-gram 去掉隐藏层和非线性,直接用中心词向量预测上下文;
- CBOW 把上下文词向量平均后预测中心词,结构与 NNLM 的输入输出方向相反;
- 负采样把 softmax 的全词表归一化换成二分类,使训练能扩展到大规模语料。
NNLM 保留了隐藏层,语言模型能力更强;Word2Vec 放弃语言建模,只保留“用上下文学习词向量”这一目标,因此训练更简单、更快。