核心要点

  • 把全词表 softmax 多分类,简化为正样本 vs 负样本的二分类逻辑回归

  • 正样本是真实出现的(中心词, 上下文词)对,负样本是随机采的噪声词

  • 负样本按词频的 3/4 次方分布采样:抑制高频词、提升低频词被采概率

  • 每步只更新「正样本 + 少量负样本」对应的参数,大幅加速

标准回答

Word2Vec 原始目标是用 softmax 在整个词表上预测上下文词,但词表常达数十万到百万,每次都要对全词表归一化,计算代价极高。负采样(Negative Sampling) 的核心思想是把这个昂贵的多分类问题,转化为一系列廉价的二分类问题。

从多分类到二分类

  • 对一个真实的 (中心词, 上下文词) 对,标记为正样本(标签 1);
  • 再随机采样 k 个词作为负样本(标签 0),它们大概率不是该中心词的真实上下文;
  • 训练目标变成:用逻辑回归(sigmoid)让模型对正样本输出尽量接近 1,对负样本输出尽量接近 0。

目标函数
对每个正样本词向量内积过 sigmoid 取对数,加上 k 个负样本的 sigmoid(负内积) 取对数之和,最大化该目标。这样每步只需计算 1 + k 个内积,而非整个词表。

负采样分布
负样本不是均匀采,也不是严格按词频采,而是按词频的 3/4 次方 构造概率分布:P(w) 正比于 count(w) 的 0.75 次方。这个指数抑制了高频词(如 the、的)被反复采到,同时提升了低频词被采中的概率,是经验上效果最好的折中。

负样本数量
经验取值:小语料用较大的 k(典型 5-20),大语料用较小的 k(2-5)。k 越大训练越稳但越慢。

负采样让 Word2Vec 在大规模语料上可高效训练,是 Skip-gram with Negative Sampling(SGNS)成为主流的关键。

常见误区

⚠️ 常见踩坑

误以为负采样是「近似 softmax」,会逼近原始多分类概率。实际上 SGNS 优化的是一个不同的二分类目标,并不显式估计全词表分布;它隐式分解的是带 shift 的逐点互信息(PMI)矩阵,目标已与原始 softmax 不同。另一个误区是把负采样分布设成均匀分布或纯词频分布,都不如 3/4 次方分布。

追问

追问 1为什么负采样分布用词频的 3/4 次方,而不是 1 次方或均匀?

纯词频(指数 1)会让 the、的 这类高频功能词几乎垄断负样本,浪费更新且区分度低;均匀分布又让低频词被过度采、高频词噪声不足。0.75 次方是介于两者之间的经验最优:相对压低高频词、抬高低频词,使各词被采概率更均衡,实测下游效果最好。

追问 2负采样和 Hierarchical Softmax 如何取舍?

两者都是为规避全词表 softmax。负采样实现简单、对高频词和小语料通常更快更好,可灵活调 k;层次 softmax 用 Huffman 树把复杂度降到 O(logV),对低频词相对友好,但树结构固定。实践中大语料、关注高频词时多用负采样(SGNS),需要对罕见词更稳健时可考虑层次 softmax。

追问 3负样本数 k 如何影响训练,过大或过小有何后果?

k 太小(如 1-2)梯度信号少,对小语料训练不稳、词向量质量差;k 太大每步计算线性增加,训练变慢且边际收益递减。经验上小语料取 5-20、大语料取 2-5。可视语料规模和算力权衡,并用下游任务或类比/相似度评测来选定。

🔗 相似问题

同一考点的不同问法,面试官可能换着问,一起刷更稳

没找到想看的面试题?把你想看的告诉我们 →

延伸学习

按主题分类的相关资源,便于系统复习