Skip to content

说一说负采样技术在 Word2Vec 中的运用。 ​

  • 标签:自然语言处理(NLP)、词嵌入、Word2Vec、负采样

🏛 业务架构师 ​

负采样(Negative Sampling)在 Word2Vec 中的运用:

背景问题:Skip-gram 每个训练样本原本要用 softmax 对全词表(10万+)归一化——每个中心词都要和全词表比对,训练量不可承受。

负采样的思路:把"多分类"简化为"一组二分类"——正样本(真实上下文词)判定为"是邻居",再从词表随机抽 5~20 个负样本(非邻居词)判定为"不是邻居"。损失函数只需更新:1 个正词 + 抽到的几个负词,计算量从 O(V) 骤降到 O(k)(k 是负样本数)。

关键细节:

  1. 负样本的采样分布:词频的 3/4 次方(unigram 的 0.75 次幂)——为什么不是按原始频率?纯粹按频率抽,高频词("的""the")被过度抽到,模型浪费容量学"的 不是邻居"这种无信息样本;0.75 次幂压低高频、抬升低频的抽中概率,训练信号更均衡。这来自原论文实验调优,是"工程经验优于理论推导"的经典案例;
  2. 负样本数:小语料 5~20,大语料 2~5——语料越大,每个词见到的正样本越多,负样本可以少配。

效果:训练提速数十倍且效果几乎无损——它是 Word2Vec 能在普通机器上训海量语料的工程关键(另一个方案是层级 softmax,实践中负采样更常用)。

业务视角的启示:负采样体现的是"用局部近似换全局精确"的工程智慧——不追求每次更新全词表,用有代表性的负样本逼近。这个思想一脉相承到对比学习(SimCSE/Claude 类的负例挖掘)和推荐系统(负例采样训练双塔)——理解它,就理解了半个表示学习的工程史。

🏗 系统架构师 ​

负采样 = 把 softmax 多分类(V 类)近似为"1 正例 vs k 个负例"的二分类,Word2Vec 训练提速的关键:

运用机制:

  • 原问题:Skip-gram 每个训练对要对全词表(10万+)算 softmax 归一化——计算不可行;
  • 负采样改造:目标变为——给定中心词,正例(真实上下文词)输出 1,随机采 k 个负例(词表中的随机词)输出 0;损失 = log σ(v_o·h) + Σ log σ(-v_n·h)——每步只算 k+1 个词(k 常取 5~15),复杂度从 O(V) 降到 O(k);
  • 采样分布:按词频的 3/4 次方(unigram^0.75)采样——不是均匀采样:3/4 幂让高频词采样概率相对压低(对频率做过幂次压缩),低频词获得更多被采机会(高频词如"的"做负例信息量低且已充分训练);同时保留高频词更多样本的合理性——这个 0.75 是论文调出的工程经验值。

为什么有效(机理):负采样本质是噪声对比估计(NCE)的简化——用"区分正例与噪声"的任务近似"全词表分类",理论上梯度方向一致;/embedding 视角下它隐式做了共现矩阵的分解。

工程影响:训练提速百倍量级,让 Word2Vec 在普通 CPU 上小时级训练十亿词语料——"把不可行问题近似成可行"的经典范例;后继者层次 softmax 是另一条路(保概率精确性),现代 LLM 时代 sampled softmax(大词表训练)延续同一思想。

💻 全栈开发专家 ​

负采样(Negative Sampling):Word2Vec 的训练加速关键——把「V 类 softmax 分类」降维成「1 个正例 + k 个负例的二分类」。

原问题:Skip-gram 每个训练样本要更新全词表(10 万+)的输出向量——一步计算量 O(V×d),CPU 时代不可承受。

负采样的做法:

目标:给定中心词 c 和真实上下文 o(正例),
P(o|c) → 1(拉近)
随机采 k 个噪声词 n1..nk(负例),P(ni|c) → 0(推远)

loss = -log σ(v_o·u_c) - Σ log σ(-v_ni·u_c)

每个样本只更新 1+k 个向量(k=5~20),计算量骤降三个数量级。

负例怎么采(细节里全是工程智慧):

  • 按词频的 3/4 次方分布采样(unigram^0.75):为什么不是均匀或纯频率?——纯频率让「的/是」这种高频词霸占负例(它们本来就到处共现,学不出信息);均匀采样浪费在极生僻词上;3/4 次幂压低高频、抬升低频,是效果与效率的甜点;
  • 高频词额外做降采样(subsampling,出现概率超阈值的随机丢弃)——「的」和任意词的共现没有信息量。

k 值经验:小语料 5~10,大语料 2~5(数据多了不需要那么多负例)。

一句话:负采样 = 「用一个轻量二分类任务近似全词表语言建模」,加上 0.75 幂的频率修正采样——这两个技巧让 Word2Vec 在 2013 年的 CPU 上训练十亿级语料成为可能。它的思想(对比式学习+难负例)延续到今天的 CLIP/Embedding 训练。