共计 1769 个字符,预计需要花费 5 分钟才能阅读完成。
词嵌入与 CBOW 模型简介
词嵌入是自然语言处理中的基础技术,它将词语映射到低维连续向量空间,使得语义相似的词在向量空间中距离相近。CBOW(Continuous Bag-of-Words)模型是一种经典的词嵌入方法,它通过上下文词预测目标词来学习词向量。

CBOW 模型的结构包括输入层、隐藏层和输出层:
- 输入层:将上下文词的 one-hot 向量输入模型
- 隐藏层:对所有上下文词的向量求平均,并通过权重矩阵转换
- 输出层:通过 softmax 计算目标词的概率分布
词嵌入矩阵的数学推导
词嵌入矩阵是 CBOW 模型的核心,它存储了所有词的向量表示。假设我们的词汇表大小为 V,词向量维度为 D,那么词嵌入矩阵 W 的大小为 V×D。
- 输入层到隐藏层的计算过程:
- 假设窗口大小为 2,则上下文包含目标词前后各 2 个词
- 每个上下文词用 one-hot 向量 x_i 表示(维度 V×1)
- 词嵌入矩阵 W 与 x_i 相乘得到词向量 v_i = W·x_i
-
对所有上下文词向量求平均:h = (v_1 + v_2 + v_3 + v_4)/4
-
隐藏层到输出层的计算:
- 使用另一个矩阵 W ’(维度 D×V)将隐藏层向量转换为输出分数
- u = W’·h
- 通过 softmax 计算目标词的概率分布:y = softmax(u)
Python 实现(PyTorch)
import torch
import torch.nn as nn
import torch.optim as optim
class CBOW(nn.Module):
def __init__(self, vocab_size, embedding_dim):
super(CBOW, self).__init__()
self.embeddings = nn.Embedding(vocab_size, embedding_dim)
self.linear = nn.Linear(embedding_dim, vocab_size)
def forward(self, inputs):
# inputs 是上下文词的索引列表,形状为 [context_size]
embeds = self.embeddings(inputs) # 形状 [context_size, embedding_dim]
h = torch.mean(embeds, dim=0) # 平均得到隐藏层 [embedding_dim]
out = self.linear(h) # 输出层 [vocab_size]
return out
# 示例使用
vocab_size = 10000
embedding_dim = 100
model = CBOW(vocab_size, embedding_dim)
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)
# 训练循环示例
for epoch in range(10):
for context, target in training_data:
model.zero_grad()
output = model(context)
loss = loss_function(output, target)
loss.backward()
optimizer.step()
参数影响分析
窗口大小和向量维度是影响 CBOW 模型效果的两个关键参数:
- 窗口大小:
- 小窗口(2-5)捕获局部语法模式
- 大窗口(5-10)捕获更多语义信息
-
太大窗口会导致训练变慢且可能引入噪声
-
向量维度:
- 太低(50-100)可能无法充分表达语义
- 太高(300 以上)可能导致过拟合
- 通常在 100-300 之间效果最佳
避坑指南
训练 CBOW 模型时常见问题及解决方案:
- 训练缓慢:
- 使用负采样替代 softmax 全计算
- 减小词汇表规模(去掉低频词)
-
降低向量维度
-
模型不收敛:
- 检查学习率是否合适
- 尝试 Adam 优化器
-
增加训练数据量
-
词向量质量差:
- 确保数据预处理充分(小写化、去停用词等)
- 尝试更大的语料库
- 调整超参数组合
思考与延伸
评估词嵌入质量的常用方法:
– 词相似度任务(计算余弦相似度)
– 类比推理任务(如 ”king – man + woman ≈ queen”)
– 下游 NLP 任务中的表现
改进 CBOW 模型的方向:
– 加入 subword 信息
– 结合全局统计信息
– 引入注意力机制
通过本文的学习,你应该已经掌握了 CBOW 模型的核心原理和实现方法。词嵌入是 NLP 的基础技术,理解它的工作原理将为你学习更复杂的语言模型打下坚实基础。
正文完
