Word2Vec 学习计划 三

Word2Vec 完整学习方案:从数学原理到模型推理


第一阶段:数学基础(约 1~2 周)

在正式进入 Word2Vec 之前,需要夯实以下数学工具:

主题 需要掌握的内容 为什么需要
线性代数 向量点积、矩阵乘法、转置、Embedding 矩阵的本质 词向量本质上就是矩阵的行/列
概率论 条件概率、最大似然估计(MLE)、Softmax 函数 模型的目标函数就是最大化条件概率
微积分/优化 偏导数、链式法则、梯度下降(SGD) 训练过程就是不断求梯度更新参数
信息论(可选) 交叉熵、KL 散度 理解损失函数的设计动机

📚 推荐资源


第二阶段:Word2Vec 理论原理(约 2~3 周)

2.1 核心概念

按以下顺序逐步攻克:

One-hot 编码的缺陷
    ↓
分布式假设(Distributional Hypothesis)
    ↓
两种模型架构:CBOW / Skip-gram
    ↓
Softmax 输出层的计算瓶颈
    ↓
两种加速方案:
  ├── Hierarchical Softmax(Huffman 树)
  └── Negative Sampling(负采样)
    ↓
高频词降采样(Subsampling)

2.2 必须推导的公式

  • Skip-gram 目标函数:

\[\frac{1}{T}\sum_{t=1}^{T}\sum_{-m \leq j \leq m, j \neq 0} \log P(w_{t+j} \mid w_t) \]

  • Softmax 概率:

\[P(w_O \mid w_I) = \frac{\exp(\mathbf{u}_O^\top \mathbf{v}_I)}{\sum_{w=1}^{W}\exp(\mathbf{u}_w^\top \mathbf{v}_I)} \]

  • 负采样后的目标函数:

\[\log \sigma(\mathbf{u}_o^\top \mathbf{v}_c) + \sum_{k=1}^{K} \mathbb{E}_{w_k \sim P_n(w)}\left[\log \sigma(-\mathbf{u}_k^\top \mathbf{v}_c)\right] \]

📚 推荐资源

  • ⭐ 首选(中文最经典):peghoty 系列博客 《word2vec 中的数学原理详解》(共五篇,从背景到四种模型组合全部覆盖)
  • 论文原文(必读):
    • Mikolov et al., 2013a: Efficient Estimation of Word Representations in Vector Space
    • Mikolov et al., 2013b: Distributed Representations of Words and Phrases and their Compositionality
  • 视频:斯坦福 CS224N(Christopher Manning)Lecture 1 & 2(YouTube/B站均有)
  • 书籍:《动手学深度学习》(d2l.ai)第 14 章「词嵌入」部分,有中文且配套代码

第三阶段:从零手写实现(约 2~3 周)

3.1 纯 NumPy 实现(推荐先做)

目标:不依赖任何深度学习框架,手写一个 Skip-gram + Negative Sampling 模型。

# 伪代码框架
import numpy as np

# 1. 构建词表 & 词频
# 2. 初始化 W_in (V×d), W_out (d×V)
# 3. 生成训练样本 (center, context, negatives)
# 4. 前向传播:计算点积 → sigmoid
# 5. 计算梯度
# 6. SGD 更新
# 7. 训练结束后,W_in 即为词向量

3.2 用 PyTorch 重写

将上面的逻辑迁移到 PyTorch,使用 nn.Embedding 层,体会框架自动求导的便利。

📚 推荐资源


第四阶段:使用 Gensim 训练真实模型(约 1 周)

当你理解了原理后,用工业级工具训练一个真正可用的词向量模型:

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

# 准备语料(已分词的文本,每行一个句子)
sentences = LineSentence("your_corpus.txt")

# 训练
model = Word2Vec(
    sentences,
    vector_size=300,      # 词向量维度
    window=5,             # 上下文窗口
    min_count=5,          # 最小词频阈值
    sg=1,                 # 1=Skip-gram, 0=CBOW
    negative=5,           # 负采样数量
    workers=4,            # 多线程
    epochs=10             # 训练轮数
)

# 保存
model.save("my_word2vec.model")

📚 推荐资源

  • Gensim 官方文档:gensim.models.word2vec
  • 中文语料:可用维基百科中文语料 + jieba 分词进行练习

第五阶段:模型推理与应用(约 1~2 周)

训练完成后,词向量可以支持多种下游任务:

5.1 基础推理操作

# 词相似度
model.wv.similarity("国王", "皇帝")

# 最相似的词
model.wv.most_similar("人工智能", topn=10)

# 经典类比推理:king - man + woman ≈ queen
model.wv.most_similar(positive=["女人", "国王"], negative=["男人"])

# 获取词向量
vec = model.wv["深度学习"]

5.2 下游应用

应用场景 做法
文本分类 句内所有词向量取平均 → 接全连接/分类器
语义检索 计算文档向量与 query 向量的余弦相似度
命名实体识别 词向量作为特征输入 BiLSTM-CRF
推荐系统 用户/物品 Embedding 类比词向量

5.3 可视化

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

vectors = model.wv[model.wv.key_to_index]  # 所有词向量
tsne = TSNE(n_components=2, perplexity=30)
result = tsne.fit_transform(vectors[:500])  # 取前500个词可视化
plt.scatter(result[:, 0], result[:, 1], s=2)
plt.show()

第六阶段:拓展与进阶(持续学习)

学完 Word2Vec 后,自然过渡到以下方向:

Word2Vec(静态、一词一向量)
    ↓
FastText(子词级别,解决 OOV)
    ↓
GloVe(全局共现矩阵 + 局部窗口)
    ↓
ELMo(上下文相关,一词多义)
    ↓
BERT / Transformer(预训练范式)

📚 推荐资源

  • 论文:Pennington et al., 2014 GloVe: Global Vectors for Word Representation
  • 论文:Peters et al., 2018 Deep Contextualized Word Representations(ELMo)
  • 李宏毅 2023/2024 机器学习课程(B站),涵盖从 Word2Vec 到 Self-Attention 的完整脉络

📅 总时间线概览

阶段 时长 核心产出
数学基础 1~2 周 能手推 Softmax 梯度
理论原理 2~3 周 能画出四种模型结构图并写出目标函数
从零实现 2~3 周 一份可运行的 NumPy/PyTorch 代码
Gensim 训练 1 周 一个自己语料训练出的 .model 文件
推理应用 1~2 周 完成相似度/类比/分类等实验
拓展进阶 持续 过渡到 GloVe → ELMo → BERT

💡 学习建议:Word2Vec 的精髓不在于模型多复杂,而在于它用一个极简的浅层网络,揭示了"分布式表示"这一深刻思想。建议你在每个阶段都先手写公式推导,再写代码验证,这样对后续学习 Transformer 等复杂模型会打下极其坚实的基础。

posted @ 2026-08-29 15:41  立体风  阅读(12)  评论(0)    收藏  举报