02. 词向量
官方 PPT 来源
本讲学习目标
学完这一讲,你应该能从零回答下面这些问题:
- 计算机为什么不能直接“理解”词义?
- WordNet 这类人工词典为什么不够?
- one-hot 向量为什么无法表达
hotel和motel的相似性? - 什么是 distributional semantics,为什么上下文能代表词义?
- Word2Vec skip-gram 到底用什么训练样本、预测什么、优化什么?
- softmax 概率公式里的
u_o^T v_c、分子、分母分别是什么意思? - 为什么完整 softmax 在大词表上很贵?
- negative sampling 怎样把“大词表多分类”改成“少量二分类”?
- co-occurrence matrix、SVD、GloVe 和 Word2Vec 的关系是什么?
- 怎么评测一个词向量到底好不好?
本讲是 CS224n 后面所有内容的地基。后面的神经网络、RNN、Transformer、预训练模型都依赖一个前提:语言符号必须先变成可学习、可比较、可微分优化的向量。
1. 为什么词义表示是 NLP 的第一道坎?
自然语言处理的对象是词、短语、句子和篇章。但计算机一开始只能处理数字。于是第一个问题就是:
一个词的“意义”怎样变成数字?
PPT 从 meaning 的常规定义出发:一个词表达某个 idea、thing 或 speaker 想表达的内容。传统语言学中可以把词看成:
例如 tree 这个词指向现实世界中的树、树的概念、树的图像集合等。
但机器学习模型不能直接使用“概念”。它需要向量、矩阵和概率。因此 NLP 必须把词义表示成模型能计算的形式。
2. 人工词典路线:WordNet 为什么不够?
PPT 先介绍早期常见办法:用 WordNet 这种词典资源。
WordNet 里有两类典型关系:
- synonym sets:同义词集合,例如某些语境下
good的近义词。 - hypernyms:上位词关系,例如
panda是mammal、animal、organism的下位概念。
这类资源有用,但不能作为现代 NLP 的核心表示,原因有四个。
2.1 缺少语义细节
一个词是否同义,强烈依赖语境。
例如 good 和 proficient 在某些语境中接近,但不是处处可互换:
二者意思有重叠,但语气、侧重点不同。人工词典很难完整记录这种细粒度差别。
2.2 新词新义不断出现
PPT 举了很多词义变化或新用法的例子。自然语言一直变化,词典维护永远滞后。
这对互联网文本尤其严重:俚语、梗、品牌名、新技术名、社区用法都在快速变化。
2.3 主观性强
词义不只是“指什么”,还包括语体、礼貌程度、冒犯性、社会语境。人工词典很难给每个用法都标出合适的语用边界。
2.4 难以计算连续相似度
下游模型常常需要知道两个词“有多像”,而不是“是否在同一个同义词集合”。
例如:
WordNet 不天然提供一个适合神经网络训练的连续向量空间。
结论:WordNet 可以作为外部知识资源,但不能解决现代 NLP 对“可学习词义表示”的需求。
3. One-hot:最简单,也最有问题的词表示
传统 NLP 可以把每个词当成离散符号:
如果词表大小是 |V|,每个词可以表示成一个 |V| 维 one-hot 向量。向量中只有一个位置是 1,其它都是 0。
例如词表中有 15 个词:
motel = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
hotel = [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
3.1 One-hot 的优点
one-hot 的优点是简单:
- 每个词有唯一编号。
- 不会混淆两个不同词。
- 很容易查表、计数、作为传统模型输入。
3.2 One-hot 的致命缺陷:没有相似性
任意两个不同词的 one-hot 向量点积都是 0:
这意味着在 one-hot 空间里:
与
没有区别。它们都只是“不是同一个词”。
这对 NLP 很糟糕。比如用户搜索:
搜索系统应该也能匹配:
one-hot 无法自然做到这一点。
核心问题:one-hot 只能表达身份,不能表达语义距离。
4. Distributional Semantics:用上下文学习词义
PPT 接着引出 distributional semantics。它的思想是:
一个词的意义,可以从它经常出现的上下文中学出来。
如果两个词经常出现在相似上下文中,它们的意义往往相近。
4.1 什么是上下文?
当一个词出现在文本位置 t,它周围固定窗口内的词就是上下文。
例如:
如果中心词是 banking,窗口中的词可能包括:
再看其它句子:
banking 经常和 debt、crises、regulation、system 等词一起出现。模型可以从这些上下文中学到它属于金融、制度、风险等语义区域。
4.2 分布式表示
PPT 要建立的直觉是:
这就是后面 Word2Vec 和 GloVe 的共同基础。
5. Dense Word Vectors:把语义放进连续空间
词向量,也叫:
- word embeddings
- neural word representations
- distributed representations
它们是低维稠密实数向量。
例如:
和 one-hot 相比:
| 表示方式 | 维度 | 稀疏/稠密 | 能否表达相似性 |
|---|---|---|---|
| one-hot | 词表大小,可能几十万 | 极稀疏 | 不能 |
| word vector | 通常几十到上千 | 稠密 | 能 |
5.1 相似性怎么计算?
PPT 使用 dot product 衡量向量相似性:
如果两个词经常出现在相似上下文中,训练会让它们的向量方向接近,点积或余弦相似度较高。
注意:向量的每一维通常没有人类可读的固定含义。不要把第 17 维强行解释成“金融性”、第 23 维解释成“动物性”。词义是分布在整个向量中的。
6. Word2Vec 总览:用预测任务学习词向量
Word2Vec 是一类学习词向量的方法。PPT 讲的是 skip-gram。
Skip-gram 的训练任务:
给定中心词,预测它窗口里的上下文词。
6.1 训练数据从哪里来?
给一句话:
窗口大小 m = 2。如果中心词是 into,上下文词是:
于是可以构造训练对:
这些训练对不需要人工标注。只要有大规模文本,就能自动生成。
这就是 Word2Vec 强大的地方:把无标注文本变成自监督训练信号。
6.2 Skip-gram 和 CBOW
PPT 提到 Word2Vec 家族有两种模型:
| 模型 | 输入 | 预测目标 |
|---|---|---|
| Skip-gram | center word | context words |
| CBOW | context words 的 bag | center word |
本讲主要讲 skip-gram。
7. Word2Vec 的参数:为什么每个词有两个向量?
PPT 中每个词 w 有两个向量:
- \(v_w\):当
w是中心词时使用。 - \(u_w\):当
w是上下文词时使用。
也就是两张 embedding table:
如果词表大小是 |Vocab|,词向量维度是 d,参数规模大约是:
7.1 为什么不用一个向量?
PPT 给出的解释是:两个向量更容易优化。训练完成后,可以按实现选择使用 center vectors、outside vectors,或者把两个向量平均。
从角色上理解也很自然:
- 一个词作为中心词时,是“查询者”。
- 一个词作为上下文词时,是“候选答案”。
两个角色用两套参数,训练更灵活。
8. Word2Vec 的目标函数
设语料长度为 T,第 t 个词是 \(w_t\),窗口大小是 m。
模型希望对每个中心词 \(w_t\),都能预测窗口内上下文词 \(w_{t+j}\):
8.1 Likelihood
模型希望真实上下文出现的概率越大越好:
这表示:整个语料中,每个中心词都能预测出它的上下文。
8.2 Negative log likelihood
机器学习中通常把“最大化概率”改写成“最小化 loss”:
展开就是:
直觉:
- 真实上下文概率高,\(\log P\) 大,负号后 loss 小。
- 真实上下文概率低,loss 大,模型会更新参数。
所以:
9. Softmax 概率公式逐项拆解
现在要回答关键问题:
怎样计算 \(P(o \mid c)\)?
其中:
c是 center word。o是 outside/context word。
PPT 给出:
9.1 分子:真实候选词的得分
是上下文词向量和中心词向量的点积。
如果 o 经常出现在 c 周围,训练应该让这个点积变大。
外面套指数:
保证分数为正。
9.2 分母:整个词表的归一化
这一步把所有候选词分数加起来,作为归一化常数。
这样每个词的概率加起来等于 1。
9.3 Softmax 的作用
Softmax 把任意实数分数变成概率分布:
它有三个直觉:
- 分数越大,概率越大。
- 指数会放大最大分数的优势。
- 小分数也不是直接变成 0,因此叫 soft。
9.4 一个手算小例子
假设词表只有 3 个候选上下文词:
中心词是 banking,点积分数为:
softmax 概率为:
regulation 和 crisis 会比 banana 概率高,因为它们与 banking 的向量点积更大。
10. 训练时向量会怎样移动?
训练目标会推动两类变化。
10.1 真实上下文更接近
如果训练样本是:
模型希望:
变大。
这意味着 banking 的 center vector 和 regulation 的 outside vector 更相似。
10.2 非上下文词相对远离
softmax 分母包含整个词表。如果 banana 不是 banking 的好上下文,训练会降低它相对真实词的概率。
因此训练整体效果是:
PPT 用图示表达:Word2Vec 最大化目标时,会把相似词放在向量空间中更近的位置。
11. Gradient Descent 和 SGD:参数怎么学?
Word2Vec 的参数很多,包含两张词向量矩阵。
训练方法是 gradient descent:
- 计算 loss。
- 计算 loss 对参数的梯度。
- 沿负梯度方向更新参数。
更新形式可以写成:
其中 \(\alpha\) 是 learning rate。
11.1 为什么不能用完整 gradient descent?
完整目标 \(J(\theta)\) 包含整个语料所有窗口。语料可能有几十亿词。
如果每次更新前都遍历完整语料,会非常慢。
11.2 Stochastic Gradient Descent
SGD 的做法:
- 采样一个窗口或 mini-batch。
- 用它估计梯度。
- 马上更新参数。
这样虽然单次梯度有噪声,但更新频繁,总体训练更可扩展。
12. Naive softmax 的计算瓶颈
softmax 最大的问题在分母:
每处理一个 (center, outside) pair,都要对词表里所有词算点积。
如果词表有 500,000 个词,每次预测都要比较 500,000 个候选上下文词。
这就是 naive softmax 的瓶颈:
在大语料、大词表上,这太贵。
13. Negative Sampling:只比较少量正负样本
Negative sampling 是本讲最重要的工程思想之一。
它不再要求模型每次都在整个词表上做 softmax,而是把问题改成二分类:
这个
(center word, outside word)pair 是真实语料中的 pair,还是随机噪声 pair?
13.1 正样本
真实窗口中出现的 pair 是正样本:
13.2 负样本
从词表中随机采一些词,和中心词配对,作为负样本:
模型不需要和整个词表比较,只需要把真实 pair 和少量噪声 pair 区分开。
13.3 Negative sampling loss
PPT 给出 loss:
其中:
- \(c\):中心词。
- \(o\):真实上下文词。
- \(K\):负样本集合。
- \(u_k\):负样本词的 outside vector。
- \(\sigma(x) = \frac{1}{1 + e^{-x}}\):sigmoid 函数。
13.4 公式直觉
第一项:
希望真实 pair 的点积大。点积越大,sigmoid 越接近 1,loss 越小。
第二项:
希望负样本 pair 的点积小。若 \(u_k^\top v_c\) 很小,\(-u_k^\top v_c\) 很大,sigmoid 接近 1,loss 小。
因此 negative sampling 同时做两件事:
13.5 为什么它高效?
Naive softmax 每次更新整个词表相关参数。
Negative sampling 每个窗口只更新:
- 当前中心词向量。
- 真实上下文词向量。
k个负样本词向量。
这让梯度非常稀疏。
PPT 特别提醒:大规模词向量训练需要 sparse matrix update,否则每次都同步完整 embedding matrix 会非常浪费。
13.6 负样本分布
PPT 给出采样分布:
其中 \(U(w)\) 是 unigram distribution,\(Z\) 是归一化常数。
取 3/4 次方的直觉是:不要完全按原词频采样,否则高频词过度出现;也不要完全均匀采样,否则罕见词比例过高。这个变换让低频词相对更容易被采到一些。
14. Count-based 方法:为什么不直接统计共现?
Word2Vec 是 prediction-based:用预测任务学词向量。
PPT 接着提出另一条路线:
既然词义来自上下文,为什么不直接统计共现?
这就是 co-occurrence matrix。
14.1 Window-based co-occurrence matrix
构造矩阵 \(X\):
- 行:中心词。
- 列:上下文词。
- 单元格:两词在窗口中共现的次数。
例如语料:
如果窗口长度是 1,like 会和 I、deep、NLP 等词产生共现。
14.2 Window vs document
PPT 区分两种共现:
| 共现方式 | 捕捉内容 |
|---|---|
| window-based | 局部语义和句法信息 |
| word-document | 更偏主题信息 |
如果想知道词在局部上下文中怎样使用,window-based 更接近 Word2Vec 的思想。
如果想知道文档主题,word-document matrix 会更像 Latent Semantic Analysis。
14.3 简单共现向量的问题
简单 count vector 有明显缺点:
- 维度等于词表大小,很高。
- 非常稀疏。
- 存储成本大。
- 下游分类模型会遇到稀疏性问题。
- 高频功能词如
the、he、has可能支配统计。
所以需要把高维稀疏 count vector 变成低维稠密 vector。
15. SVD:从共现矩阵中提取低维结构
经典方法是 Singular Value Decomposition:
保留最大的 k 个 singular values,就得到最佳 rank-k 近似:
直觉:
- 原矩阵 \(X\) 很大、很稀疏。
- SVD 找到最重要的低维方向。
- 每个词可以用低维 dense vector 表示。
15.1 为什么 raw counts 不好?
PPT 明确说,直接对原始计数做 SVD 效果不好。
常见修正包括:
- 对频率取 log。
- 对计数截断,例如 \(min(X, t)\)。
- 忽略功能词。
- 近距离上下文权重大,远距离权重小。
- 使用 correlation 替代 count,并把负值设为 0。
这些技巧本质上是在防止高频但低信息量的词淹没有意义的语义结构。
16. GloVe:把全局共现统计变成向量差
GloVe 的核心问题是:
如何让共现概率比例对应到词向量空间中的线性意义成分?
它不是只看某两个词是否共现,而是看共现概率之间的比例。
16.1 为什么看比例?
假设我们想理解某个词和 ice、steam 的关系。单个共现次数可能受词频影响,但比例能更好揭示某个语义维度。
GloVe 试图让这种比例关系反映在向量差中:
16.2 GloVe 的定位
PPT 对 GloVe 的定位:
- 使用全局 co-occurrence statistics。
- 使用 log-bilinear model。
- 训练快。
- 可扩展到巨大语料。
因此可以把 GloVe 理解为 count-based 和 prediction-based 思想的连接点:它重视全局共现统计,但最终也学习 dense word vectors。
17. 如何评测词向量?
PPT 把评测分为 intrinsic 和 extrinsic。
17.1 Intrinsic evaluation
Intrinsic evaluation 在中间任务上直接评测词向量。
优点:
- 快。
- 便于分析词向量空间。
- 可以单独看 embeddings 是否有某种性质。
缺点:
- 不一定和真实下游任务表现相关。
17.1.1 Analogy 任务
形式:
经典例子:
希望向量空间中存在类似线性关系:
PPT 也提醒:如果信息存在但不是线性的,这种评测可能看不出来。
17.1.2 Human similarity correlation
另一种 intrinsic evaluation 是比较词向量距离和人类相似度评分。
例如 WordSim353 中,人类会给词对相似度打分:
然后看词向量距离是否和人类评分相关。
17.2 Extrinsic evaluation
Extrinsic evaluation 把词向量放进真实任务中,观察任务性能。
PPT 举例:Named Entity Recognition。
例如:
模型需要识别人名、地点、组织等实体。如果替换词向量后 NER 准确率提高,就说明词向量对真实任务有帮助。
优点:
- 最贴近最终应用。
缺点:
- 训练和评测慢。
- 如果效果不好,不容易知道是词向量问题,还是下游模型其它部分问题。
18. Word2Vec、共现矩阵、GloVe 的关系
可以用一张表记住本讲三条路线:
| 方法 | 核心信号 | 学习方式 | 优点 | 问题 |
|---|---|---|---|---|
| Word2Vec skip-gram | 局部窗口中 center-context 预测 | prediction-based | 可扩展,能从大语料自监督学习 | naive softmax 贵,需要 negative sampling |
| Co-occurrence + SVD | 词与上下文的共现计数 | count-based + 降维 | 直观,利用全局统计 | 原始计数高维稀疏,需要很多修正 |
| GloVe | 共现概率比例 | log-bilinear | 结合全局统计和向量差语义 | 仍依赖共现矩阵设计与训练目标 |
共同点:
区别在于:
19. 初学者最容易误解的点
误解 1:词向量每一维都有明确语义
通常没有。词义分布在整个向量中。
误解 2:Word2Vec 是人工标注训练
不是。训练样本来自文本窗口,自监督生成。
误解 3:Skip-gram 是预测下一个词
不完全是。Skip-gram 预测中心词周围窗口内的上下文词,不只预测右边下一个词。
误解 4:negative sampling 只是近似 softmax
在这讲的理解层面,更重要的是:它把大词表概率归一化问题改成了正负样本二分类问题。
误解 5:intrinsic 分数高就一定下游任务好
不一定。PPT 明确提醒,intrinsic evaluation 是否有用,要看它是否和真实任务相关。
20. 从零自学路线
如果你是第一次学,建议按下面顺序复习。
第一步:先会解释 one-hot 的失败
你必须能说清:
这是词向量出现的动机。
第二步:手动构造 skip-gram 样本
给句子:
窗口大小 m = 1。
以 like 为中心:
以 deep 为中心:
你要能自己列出这些 pair。
第三步:解释 softmax 概率
你要能解释:
每一项是什么意思。
第四步:解释 negative sampling
给真实 pair:
负样本可能是:
模型要把真实 pair 判 1,把负样本 pair 判 0。
第五步:比较 prediction-based 和 count-based
你要能说清:
21. 本讲板书级总结
21.1 词义表示问题
21.2 Distributional hypothesis
21.3 Skip-gram
21.4 Softmax
21.5 Objective
21.6 Negative sampling
21.7 Evaluation
22. 自测题
基础理解
- 为什么 WordNet 不能作为现代 NLP 的完整词义表示方案?
- one-hot 向量为什么不能表达
hotel和motel的相似性? - Distributional semantics 的基本假设是什么?
- Dense word vector 相比 one-hot 的关键优势是什么?
Word2Vec
- Skip-gram 的输入和输出分别是什么?
- 给句子
I enjoy deep learning,窗口大小m = 1,以deep为中心,训练 pair 是什么? - Word2Vec 为什么给每个词两个向量?
- Word2Vec 的目标函数为什么要取 negative log likelihood?
- softmax 公式中的分母为什么计算昂贵?
- negative sampling 中,正样本和负样本分别来自哪里?
Count-based 与 GloVe
- Window-based co-occurrence matrix 的行、列、单元格分别表示什么?
- 为什么 raw count matrix 不能直接很好地表示词义?
- SVD 在共现矩阵方法中起什么作用?
- GloVe 为什么关注共现概率比例?
Evaluation
- analogy evaluation 想测试词向量中的什么性质?
- human similarity correlation 怎么评测词向量?
- intrinsic evaluation 和 extrinsic evaluation 各有什么优缺点?
23. 自测题参考答案
- WordNet 缺少细粒度语境、新词新义、语用差异,并且难以提供连续相似度。
- 不同 one-hot 向量正交,点积为 0,无法区分“相关但不同”和“完全不相关”。
- 词义可以由词经常出现的上下文来刻画。
- dense vector 可以把相似词放在相近位置,并可参与神经网络连续优化。
- 输入 center word,输出窗口里的 context words。
- 训练 pair 是
(deep -> enjoy)和(deep -> learning)。 - 一个用于 center role,一个用于 outside/context role,优化更灵活。
- 最大化 likelihood 等价于最小化 negative log likelihood,方便作为 loss。
- 分母要遍历整个词表,对每个词计算点积和指数。
- 正样本来自真实窗口共现,负样本来自按采样分布抽取的随机词。
- 行是中心词,列是上下文词,单元格是共现次数。
- 维度高、稀疏、受高频功能词影响大,尺度不适合直接建模语义。
- SVD 把高维共现矩阵压缩为低维 dense representation。
- 比例比原始计数更能揭示语义成分,GloVe 希望用向量差编码这种关系。
- 测试语义/句法关系是否近似线性地保存在向量空间中。
- 比较词向量距离和人类对词对相似度评分之间的相关性。
- intrinsic 快、便于分析但未必对应真实任务;extrinsic 贴近真实任务但慢且难定位问题来源。