Skip-gram
概述
Skip-gram 是 Word2Vec 的核心架构之一,通过中心词预测上下文窗口内的词,学习稠密低维的词向量表示。
关键内容
工作原理
给定上下文窗口大小(如 window_size=2):
句子:我 爱 [北京] 天安门
↑ 中心词
目标:最大化 P(我|北京) · P(爱|北京) · P(天安门|北京)
网络结构: 1. 中心词 → Embedding 层(300维)→ 隐向量 v 2. 隐向量 v → 输出层 + Softmax → 词表上的概率分布
与 CBOW 的对比
| 特性 | Skip-gram | CBOW |
|---|---|---|
| 预测方向 | 中心词 → 上下文 | 上下文 → 中心词 |
| 训练速度 | 较慢 | 较快 |
| 低频词效果 | 更好 | 较差 |
| 适用场景 | 生僻词、罕见词 | 通用语料 |
Skip-gram 对低频词和生僻词效果更好,是《Efficient Estimation of Word Representations in Vector Space》论文的重点推荐模型。
训练优化
- 动态窗口:训练时每次随机减小窗口大小(1 到 window_size 之间),增加训练样本多样性
- 负采样(Negative Sampling):用 K 个随机负样本代替全量 Softmax,每步只更新 K+1 个词向量
- 高频词下采样:减少无信息高频词的影响
PyTorch 实现要点
class Word2VecSkipGram(nn.Module):
def __init__(self, vocab_size: int, embed_dim: int = 300):
# 中心词嵌入矩阵(输入矩阵)
self.center_embed = nn.Embedding(vocab_size, embed_dim, sparse=True)
# 上下文词嵌入矩阵(输出矩阵)
self.context_embed = nn.Embedding(vocab_size, embed_dim, sparse=True)
- 使用两个独立的嵌入矩阵:center_embed(中心词)和 context_embed(上下文词)
- 推荐使用 sparse=True 以配合 SparseAdam 优化器
- 初始化:均匀分布小范围,上下文矩阵初始化为零
来源
- raw/articles/ai-papers/machine-learning/08_word2vec_2013.md
相关
- Word2Vec — 所属模型
- CBOW(连续词袋模型) — 对比架构
- 负采样(Negative Sampling) — 训练优化方法
- Efficient Estimation of Word Representations in Vector Space (2013 论文) — 提出论文