
视频元信息
- 课程:吴恩达深度学习专项课程 · 自然语言处理与词嵌入(Word Embeddings)
- 小节:2.7 负采样(Negative Sampling)
- 主讲:吴恩达(Andrew Ng)
- 核心思想来源:Thomas Mikolov 等人(Word2Vec 论文作者)
内容摘要(TL;DR)
上一节的 Skip-Gram 模型虽然能学习词向量,但 Softmax 目标函数计算代价极高(每次迭代要更新整个词表)。本节引入负采样(Negative Sampling),把"10,000 类 Softmax 分类"转化为"10,000 个二分类逻辑回归问题",每次迭代只训练 k+1 个二分类器(1 个正样本 + k 个负样本),从而大幅提升训练效率。同时讲解负样本的采样策略:按词频的 3/4 次方采样。
一、背景:为什么要负采样 [00:00]
上一节的 Skip-Gram 模型构造了一个监督学习任务:从上下文词(context)映射到目标词(target),从而学习有用的词嵌入。
Skip-Gram 的致命缺陷:Softmax 目标函数计算太慢。 每次更新都要对整个词表(例如 10,000 个词)做归一化,计算量随词表规模线性增长。
本节目标:用一种改进的学习问题——负采样(Negative Sampling),实现与 Skip-Gram 类似的效果,但使用更高效的学习算法。
本节大部分思想归功于 Thomas Mikolov 等人(Word2Vec 原始论文作者)。
二、核心思路:构造新的监督学习问题 [00:38]
不再做"多分类",而是构造一个二分类问题:
给定一对词(如 orange, juice),预测它们是否是上下文—目标配对。
| 词对 | 标签 y | 说明 |
|---|---|---|
| orange — juice | 1 | 正样本(真实相邻) |
| orange — king | 0 | 负样本(随机采样) |
| orange — book | 0 | 负样本 |
| orange — the | 0 | 负样本 |
| orange — of | 0 | 负样本 |
正样本生成方式 [01:23]:与上一节完全相同——选定一个上下文词,在 ±10 词窗口内挑选一个目标词。例如 orange 附近出现 juice,则 (orange, juice) 标为 1。
负样本生成方式 [01:42]:保持同一个上下文词(orange),从词典中随机抽取 k 个词作为目标词,全部标为 0。
易错点:即使随机抽到的词(如 "of")恰好真的出现在 orange 附近,也仍然标注为 0。 吴恩达特别强调这一点:标签 0 并不代表"这两个词在现实中无关",而只代表"这个词是从词典里随机采样的,不是从窗口里挑出来的"。
总结数据集的生成流程 [02:30]:
- 选一个上下文词,选一个真实相邻的目标词 → 得 1 条正样本,标签 1;
- 重复 k 次:取同一个上下文词,从词典随机抽词 → 得 k 条负样本,标签 0。
理解:这个监督学习问题的本质,是让模型区分两种"词对采样分布"——一种是"两个词在文本中真的挨着",另一种是"一个来自文本、一个来自词典随机"。能区分开,就说明模型学到了词的语义/共现关系。
三、如何选择 k(负样本数量) [04:06]
考点:k 的取值经验法则
- 小数据集:k 取 5 ~ 20(数据少,需要更多负样本来提供学习信号)
- 大数据集:k 取 2 ~ 5(数据多,正样本已经足够,负样本可以少一些)
- 视频示例中取 k = 4
易错点:k 与数据集规模是反向关系——数据集越大,k 越小。不要记反。
四、监督学习模型:逻辑回归 [04:37]
4.1 符号约定
- c:context(上下文词)
- t:target(目标词)
- y:标签,取 0 或 1
- (c, t):一个上下文—目标词对
4.2 概率模型公式
给定输入词对 (c, t),y = 1 的概率建模为:
P(y = 1 | c, t) = σ(θ_tᵀ · e_c)
其中:
- σ:Sigmoid 函数
- θ_t:每个目标词 t 对应的参数向量
- e_c:每个上下文词 c 对应的嵌入向量(embedding vector)
理解:这与上一节 Softmax 模型使用相似的参数——每个目标词有一个参数向量,每个上下文词有一个嵌入向量。区别在于这里用 Sigmoid 做二分类,而不是 Softmax 做多分类。
4.3 正负样本比例
对于每个正样本,有 k 个负样本,即 k:1 的负正比例,用逻辑回归方式训练。
五、从神经网络视角理解:10,000 个二分类器 [06:21]
5.1 前向过程
以输入词 orange(词表编号 6257)为例:
- 输入 orange 的 One-hot 向量;
- 乘以嵌入矩阵 E,得到 orange 的嵌入向量 e₆₂₅₇;
- 该嵌入向量送入 10,000 个二分类逻辑回归分类器(词表大小 = 10,000)。
理解:可以想象成网络输出层有 10,000 个独立的二分类单元,每个对应一个词——"目标词是不是 juice?"、"目标词是不是 king?"……
5.2 关键效率优化
考点:负采样为什么快?
- 不在每次迭代训练全部 10,000 个二分类器;
- 每次迭代只训练 k+1 个:1 个对应真实目标词的分类器 + k 个随机负样本对应的分类器;
- 对比原 Softmax 每次都要更新整个 10,000 类,计算量从 O(词表大小) 降到 O(k+1)。
以 k=4 为例,每次迭代只训练 5 个二分类器,而不是 10,000 个。
核心结论 [08:18]:把一个昂贵的 10,000 类 Softmax 分类器,拆成 10,000 个廉价的二分类问题,且每次迭代只更新其中 k+1 个,因此计算成本大幅降低。
思考:这是一种"用采样近似全量"的思想——用少量负样本近似整个词表的分布,是 Word2Vec 高效训练的关键工程技巧。
六、为什么叫"负采样" [08:32]
- 已有正样本(orange, juice);
- 主动故意构造一批负样本(随机抽词,标签 0);
- 每次迭代选取 k 个不同的随机负样本词来训练。
因此该技术得名 Negative Sampling(负采样)。
七、关键细节:如何采样负样本 [09:01]
这是本节另一个重点。选定上下文词 orange 后,如何抽取负样本词?
7.1 两种极端做法及问题
| 采样方式 | 问题 |
|---|---|
| 按词频(经验频率)采样 | 高频词(the、of 等)被过度采样,占比过高 |
| 均匀采样(1/词表大小) | 完全不符合英语词的真实分布 |
7.2 推荐做法:按词频的 3/4 次方采样
考点:负采样概率公式 采样概率 ∝ f(wᵢ)^(3/4) 其中 f(wᵢ) 是词 wᵢ 在英语语料(或训练集)中的观测频率。
推导/理解:3/4 次方把频率"压平"了——高频词的采样概率被降低,低频词的采样概率被相对提高,结果介于"纯经验频率"和"均匀分布"两个极端之间。
吴恩达的坦白 [10:47]:这个 3/4 次方理论上并没有严格的证明,但多位研究者使用后效果不错,属于经验性启发式(heuristic)。
易错点:3/4 次方是采样概率的幂次,不是频率本身。别记成"频率的 4/3 次方"或"频率的 3/4 倍"。
八、总结与延伸建议 [10:56]
8.1 本节总结
- Softmax 分类学习词向量计算代价昂贵;
- 通过把问题改造成一组二分类问题,可以高效学习词向量;
- 运行该算法能得到质量不错的词向量。
8.2 实用建议 [11:15]
实践建议:不必从零训练词向量。业界有开源实现,也有他人训练好、以宽松许可(permissive license)在线发布的预训练词向量。做 NLP 任务时,直接下载别人的词向量作为起点是合理的做法。
8.3 下节预告 [11:41]
下一节将介绍另一种词嵌入学习算法——GloVe(Global Vectors)算法,可能比目前看到的更简单。
【拓展】背景与延伸
拓展 1:Word2Vec 的三种训练方式
- Skip-Gram:用中心词预测上下文词(本课程上一节);
- CBOW:用上下文词预测中心词;
- Negative Sampling:本节——是 Skip-Gram 的高效训练改进,不是独立模型。
拓展 2:为什么负采样有效(直觉)
真正的 Softmax 要求模型对每个词都给出正确概率,代价是每次更新全词表。负采样把任务弱化为"区分真实词对 vs 随机词对",模型只需学会"哪些词更可能共现",就足以让嵌入向量携带语义信息。这是一种用二分类近似多分类的思路。
拓展 3:常见踩坑点汇总
- 标签 0 ≠ 语义无关:随机抽到的词可能真的相邻,仍标 0;
- k 与数据量反向:大数据集用小 k;
- 采样用 3/4 次方:不是均匀,也不是纯词频;
- 每次迭代只更新 k+1 个分类器,不是全部词表;
- 3/4 次方无严格理论证明,属经验技巧。
关键标签 / 关键词
负采样、Negative Sampling、Skip-Gram、Word2Vec、词嵌入、Word Embeddings、Softmax、二分类、逻辑回归、Sigmoid、上下文词、目标词、正样本、负样本、采样策略、3/4 次方、词频、k 值选择、Mikolov、计算效率、NLP、吴恩达深度学习
生成时间:2026-10-11 00:26:24 生成平台:VideoNote www.xygy.top