核心要点
把全词表 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。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习