Word2Vec、GloVe 与浅层词表示
Word2Vec (2013) 与 GloVe (2014) 是浅层词表示的标志性工作。它们通过自监督方式在大规模语料上预训练词向量,将离散符号映射为连续向量空间中的稠密向量,使语义相似的词在向量空间中彼此接近。这一思想深刻影响了后续的表示学习、预训练语言模型以及现代对比学习范式。
1. 背景:从离散符号到连续向量
传统 NLP 以 one-hot 编码 表示词:词典中第
Word2Vec 的核心思想是:分布式语义假设(Distributional Hypothesis)——“一个词的含义由其所处的上下文语境决定”。若词
2. Word2Vec 的两种基本形式
2.1 CBOW(Continuous Bag of Words)
结构:根据上下文词预测中心词。
设中心词为
条件概率建模:给定上下文向量
其中
训练目标可写为负对数似然最小化形式:
2.2 Skip-gram(跳字模型)
结构:根据中心词预测上下文词。
与 CBOW 相反,Skip-gram 的目标是最大化:
假设给定中心词
同样地,
两种模型的对比:
| 特性 | CBOW | Skip-gram |
|---|---|---|
| 预测方向 | 上下文 → 中心词 | 中心词 → 上下文 |
| 训练信号 | 多对一聚合 | 一对多 |
| 对高频词 | 训练更稳定 | 对高频词处理偏弱 |
| 小数据集表现 | 相对更好 | 大规模语料表现更佳 |
3. 计算挑战:softmax 的困境与解决方案
3.1 朴素 softmax 的计算问题
无论 CBOW 还是 Skip-gram,其条件概率均含 softmax:
其中
因此,必须引入近似计算方法来规避全词典 softmax。
3.2 负采样(Negative Sampling)
核心思想:将多分类问题转化为多个二分类问题。每个正样本(真实上下文词)搭配若干负样本(随机抽样的”噪声”词),训练一个区分正负样本的逻辑斯谛分类器。
设给定中心词
其中
直观推导:对每个正样本
噪声分布:论文建议使用
负采样实际上是在对 噪声对比估计(Noise Contrastive Estimation, NCE) 的简化。NCE 证明,当负样本数量足够多时,上述目标函数的期望梯度等价于原始 softmax 目标函数的期望梯度,但计算复杂度从
3.3 层次 softmax(Hierarchical Softmax)
核心思想:用二叉树结构对词典进行编码,将扁平 softmax 分解为从根到叶节点的路径概率乘积。
设每个词
这使得计算复杂度从
两种方法的对比:
| 特性 | 负采样 | 层次 softmax |
|---|---|---|
| 计算复杂度 | ||
| 适合场景 | 稀疏词、低频词较多 | 高频词为主 |
| 参数存储 | 需要负采样分布 | 需要树结构与路径节点向量 |
| 精度 | 近似精度与 | 精度由树结构决定 |
4. GloVe:全局共现矩阵的矩阵分解视角
4.1 共现矩阵的构建
GloVe(Global Vectors)由 Pennington 等人于 2014 年提出。与 Word2Vec 完全基于预测不同,GloVe 首先统计词-词共现矩阵
上下文定义可以是固定窗口(类似 Word2Vec)或基于文档的共现。
4.2 从共现概率到语义相似性
GloVe 的核心洞察是利用**共现比率(co-occurrence ratio)**来编码语义:
设
较大, 较小 → 比率大 较小, 较大 → 比率小
这说明共现比率直接编码了词之间的语义关系。
4.3 GloVe 目标函数
基于上述分析,GloVe 定义如下加权最小二乘目标函数:
其中:
和 分别为词 的主向量和上下文向量(最终使用 ) 和 为偏置项 为加权函数:
该加权函数的设计使得:低频共现对优化目标的贡献被压制(避免噪声),高频共现对被适当缩放但不至主导。
为什么 GloVe 与共现统计相关:目标函数直接拟合
5. Word2Vec 与 GloVe 的对比与联系
| 维度 | Word2Vec (Skip-gram) | GloVe |
|---|---|---|
| 建模方式 | 预测(条件概率) | 矩阵分解(共现统计) |
| 语料利用 | 滑动窗口局部上下文 | 全局共现矩阵 |
| 训练效率 | 高(负采样/层次 softmax) | 中(加权最小二乘,需遍历共现矩阵) |
| 语义任务表现 | 类比推理(king - queen ≈ man - woman) | 类比推理相近,词语相似任务略优 |
| 超参数敏感性 | 对窗口大小、采样策略敏感 | 对向量维度、共现阈值敏感 |
两者的目标函数在数学上存在深刻联系:当 Word2Vec 的上下文窗口扩展到全语料且使用特定的采样策略时,其目标函数趋近于 GloVe 的矩阵分解目标。
6. 静态词向量表示的局限性与自监督学习的先驱意义
6.1 静态词向量的核心局限
一词多义(Polysemy)问题:每个词在学习时仅获得一个固定的向量表示,但自然语言中大量词汇具有多个独立含义(如 “bank” 可指银行或河岸)。静态向量无法根据上下文动态调整,无法区分多义词的语义。例如:
- “The bank deposited money.”
- “He sat on the bank of the river.”
两个 “bank” 在静态向量中完全相同,这从根本上限制了语言理解能力。
上下文无关性:无论出现在何种语境下,词向量始终不变。这使得静态词向量无法处理复杂的语义组合(如修饰歧义、句法歧义)。
6.2 Word2Vec 作为自监督学习的经典案例
自监督学习的本质:不依赖人工标注的标签,而是从数据本身构造监督信号。Word2Vec 完全符合这一范式:
- 构造代理任务:预测中心词(Skip-gram)或上下文词(CBOW)
- 无需人工标注:监督信号直接来源于语料中词的共现关系
- 预训练的通用性:学习到的词向量可迁移到下游 NLP 任务
这一框架在 2013-2018 年间被广泛使用——在下游任务上以词向量作为输入特征或初始化,是迁移学习的经典范式。
6.3 与 BERT/ELMo 的本质区别
| 特性 | Word2Vec / GloVe | BERT / ELMo |
|---|---|---|
| 词向量类型 | 静态(每个词一个固定向量) | 动态/上下文相关(每个词在每个语境中向量不同) |
| 架构 | 浅层(输入层 + 输出层) | 深层(多层 Transformer/LSTM) |
| 预训练任务 | 无监督(语言建模式代理任务) | 掩码语言建模(MLM)+ 下句预测(NSP) |
| 多义词处理 | 无法区分 | 通过上下文动态区分 |
| 代表模型 | Word2Vec, GloVe | BERT, ELMo, GPT |
ELMo(2018) 的贡献在于首次引入了深层双向 LSTM 的上下文相关表示——相同词在不同句子中获得不同向量。但 ELMo 的向量是各层 LSTM 隐藏状态的线性组合,并非真正的上下文编码。
BERT(2018) 则彻底解决了多义词问题:通过 掩码语言建模(MLM),在双向上下文中预测被遮盖的词,每个词位置的表示均由完整上下文计算得到。BERT 的 [CLS] 向量可直接用于分类任务,无需设计特定任务的模型结构。
Word2Vec 在这一演进脉络中的地位:它证明了大规模无标注语料可以学习到具有语义结构的连续表示,启发了后续”预训练-微调”范式的兴起;同时,其”分布式语义假设”的哲学——语义寓于分布、分布寓于使用——是现代表示学习和对比学习的理论基础。
7. 工程实践工作流
7.1 语料预处理
原始语料
├── 文本清洗:HTML标签、特殊字符、URL等
├── 分词(Tokenization)
│ ├── 英文:WordPiece(BERT式)/ 空格分词 + 统一小写
│ └── 中文:Jieba / LTP / 自定义词典分词
├── 构建词典(Vocabulary)
│ ├── 词频统计,设定 min_count 阈值过滤低频词
│ ├── 特殊标记:[UNK], [PAD], [SEP], [CLS](如用于下游任务)
│ └── 词典大小通常在 3万~10万
└── 降采样(Downsampling)
└── 高频词(如 "the", "的")按比例随机丢弃,加速训练并提升稀有词学习
7.2 超参数选择指南
| 超参数 | 典型取值范围 | 选型建议 |
|---|---|---|
| 向量维度 | 100~300 | 语料规模越大,维度可适当提高;维度超过 300 收益递减 |
| 窗口大小 | 5~10 | 小窗口(5)更偏向句法相似;大窗口(10+)更偏向语义相似 |
| 负采样数量 | 5~15 | 大语料用更多负样本;通常 |
| 降采样阈值 | 丢弃频率高于该阈值的词 | |
| 最小词频 min_count | 3~10 | 过滤噪声词;中文因分词粒度差异可能需要更高阈值 |
| 学习率 | 0.001~0.025(初始) | 通常配合线性warm-up与衰减 |
| 训练轮次 | 1~5(大规模语料) | Skip-gram 在大语料上通常 1 个 epoch 足够 |
维度选择的一般原则:维度过低欠拟合,过高过拟合且增加存储和计算成本。在实际工程中,可在验证集上选择最优维度,或直接使用 300 维(已成为社区默认标准)。
7.3 评估方法
7.3.1 内在评估(Intrinsic Evaluation)
词类比任务(Word Analogy):检验
- “king : queen :: man : woman” → 期望输出 “woman”
- “Beijing : China :: Tokyo : Japan”
评估指标为准确率(在去除无法回答的词对后的正确率)。
词语相似度任务(Word Similarity):将模型预测的词向量余弦相似度与人类评分(Spearman 相关系数)进行比较。常用数据集包括 WS-353、SimLex-999。
聚类与可视化:对词向量进行 K-means 聚类或 t-SNE/UMAP 可视化,观察语义类聚是否显著分离。
7.3.2 外在评估(Extrinsic Evaluation)
将学习到的词向量作为下游模型的输入特征(或初始化),评估在真实任务上的表现:
- 命名实体识别(NER)
- 情感分析
- 文本分类
- 句法分析
外在评估更能反映词向量在实际应用中的价值,但计算成本更高。
8. Word2Vec 完整训练流程
以下为 Skip-gram + 负采样训练流程的伪代码:
输入: 语料库, 窗口大小 m, 负采样数 k, 向量维度 d, 学习率 η, 训练轮数 E
输出: 输入词向量矩阵 V ∈ ℝ^{|V|×d}
1. 初始化: 随机初始化 V_input ∈ ℝ^{|V|×d} 和 V_output ∈ ℝ^{|V|×d}
2. 对每个epoch ∈ {1, ..., E}:
3. 对语料库中每个位置 t = 1 到 T:
4. 以 w_t 为中心词, 提取上下文词序列 {w_{t-m}, ..., w_{t-1}, w_{t+1}, ..., w_{t+m}}
5. 对每个上下文词 w_c ∈ 上下文:
6. 正样本: (w_t, w_c) → label = 1
7. 负采样: 从 P_n(w) 抽取 k 个词 w_neg → label = 0
8. 计算损失梯度:
J = -log σ(u_c^T v_t) - Σ_{i=1}^k log σ(-u_{neg_i}^T v_t)
9. 梯度更新: v_t ← v_t - η * ∇J/∇v_t
u_c ← u_c - η * ∇J/∇u_c
u_{neg_i} ← u_{neg_i} - η * ∇J/∇u_{neg_i}
10. 学习率衰减 (可选): η ← η * (1 - epoch/E)
11. 返回 V = (V_input + V_output) / 2 # 取两向量均值作为最终词向量
注意事项:
- 第 8 步中梯度可通过反向传播高效计算
- 负采样在每个正样本处独立进行,也可预先采样负样本表以加速
- 输入输出向量分开训练可以捕捉词在不同角色中的语义
9. 负采样训练注意事项
| 注意事项 | 说明 |
|---|---|
| 噪声分布选择 | 使用 unigram 频率的 |
| 负样本数量 | |
| 降采样高频词 | 高频词(如 “the”, “of”, “的”)训练信号冗余,参与负采样的概率过高,应按 |
| 初始化尺度 | 词向量初始化的方差过大会导致 softmax 饱和,过小会导致梯度消失。建议使用均匀分布 |
| 词向量归一化 | 对于词语相似度和类比任务,对学到的向量做 L2 归一化( |
| 避免在训练中过早归一化 | 归一化应在训练完成后进行;训练中保持原始向量以保留梯度信号 |
| 上下文向量与中心向量 | Skip-gram 中上下文向量 |
| 内存与负采样表 | 对于大词典,预先构建负采样查找表(按频率采样),避免每次训练时实时计算采样概率 |
10. 总结:作为表示学习里程碑的历史地位
Word2Vec 与 GloVe 的历史贡献在于以下四个方面:
-
证明了大规模自监督预训练的有效性:无需任何人工标注,仅通过预测任务即可学习具有语义结构的词表示。这为后续的 BERT、GPT 等预训练语言模型奠定了方法论基础。
-
建立了分布式语义的理论框架:一个词的语义可以完全由其上下文分布刻画,无需人工定义的语义特征。这一哲学深刻影响了表示学习的研究方向。
-
提供了高效的工程化范式:负采样、层次 softmax 等技术使得大规模词向量训练成为可能,证明了连续表示在大规模 NLP 系统中的实用价值。
-
启发了对比学习的新一代研究:Word2Vec 的核心——“让相似词在向量空间中靠近、不相似词远离”——正是现代对比学习(如 SimCLR、Momentum Contrast)的基本精神,只不过对比学习将这一思想从词级别扩展到了句级别甚至样本级别。
作为早期表示学习的代表工作,Word2Vec 与 GloVe 的思想至今仍是理解现代语言模型的重要起点。在学习 BERT 和 Transformer 之前,理解 Word2Vec 的目标函数、数学推导与局限性,能够更深刻地把握语言表示从静态走向动态、从浅层走向深层的历史脉络。