前言
负采样(Negative Sampling)是自然语言处理中用于高效训练词向量(如 Word2Vec)的核心技术之一。它通过将大规模多分类问题转化为一系列二分类问题,显著降低计算复杂度,同时保持模型性能。本文将从数学原理、概率建模、梯度推导到工程实现,系统讲解负采样技术,确保科学严谨性与正确性。
🎯 1. 背景:为什么需要负采样?
在词向量模型(如 Skip-gram)中,目标是最大化给定中心词 wcw_cwc 时其上下文词 wow_owo 出现的概率:
P(wo∣wc)=exp(uwo⊤vwc)∑w′∈Vexp(uw′⊤vwc) P(w_o \mid w_c) = \frac{\exp(\mathbf{u}_{w_o}^\top \mathbf{v}_{w_c})}{\sum_{w' \in \mathcal{V}} \exp(\mathbf{u}_{w'}^\top \mathbf{v}_{w_c})} P(wo∣wc)=∑w′∈Vexp(uw′⊤vwc)exp(uwo⊤vwc)
其中:
- vwc∈Rd\mathbf{v}_{w_c} \in \mathbb{R}^dvwc∈Rd:中心词的输入向量;
- uwo∈Rd\mathbf{u}_{w_o} \in \mathbb{R}^duwo∈Rd:上下文词的输出向量;
- V\mathcal{V}V:词汇表,大小常为 104∼10610^4 \sim 10^6104∼106。
❗ 问题:Softmax 分母计算代价高
- 每次计算需遍历整个词汇表;
- 梯度更新需对所有词向量求导;
- 时间复杂度为 O(∣V∣)O(|\mathcal{V}|)O(∣V∣),在大规模语料上不可行。
✅ 解决方案:负采样(Negative Sampling)
核心思想:
不直接建模完整 Softmax,而是构造一个二分类任务:区分“真实上下文词”与“随机采样的负例词”。
优势:
- 计算复杂度降至 O(K)O(K)O(K),KKK 为负样本数(通常 K=5∼20K=5\sim20K=5∼20);
- 易于实现,训练稳定;
- 在实践中性能媲美甚至优于分层 Softmax。
📐 2. 数学建模:从概率视角理解负采样
在原始的 Skip-gram 模型中,我们希望最大化以下联合概率:
∏t=1T∏−m≤j≤m,j≠0P(D=1∣w(t),w(t+j))\prod_{t=1}^{T} \prod_{-m \leq j \leq m, j \neq 0} P(D=1 \mid w^{(t)}, w^{(t+j)})t=1∏T−m≤j≤m,j=0∏P(D=1∣w(t),w(t+j))
其中:
- w(t)w^{(t)}w(t) 是中心词,
- w(t+j)w^{(t+j)}w(t+j) 是上下文词(在窗口内),
- D=1D=1D=1 表示“这两个词共现”是一个正样本事件。
但仅使用正样本会导致模型倾向于将所有词向量推向无穷大(因为当所有词向量相同时,P(D=1)→1P(D=1) \to 1P(D=1)→1),这没有意义。因此引入负采样:对于每个正样本 (wc,wo)(w_c, w_o)(wc,wo),从预定义分布 P(w)P(w)P(w) 中采样 KKK 个噪声词 wkw_kwk,这些是“负样本”。
我们要估计的是:
P(w(t+j)∣w(t))P(w^{(t+j)} \mid w^{(t)})P(w(t+j)∣w(t))
即:给定中心词 w(t)w^{(t)}w(t),出现上下文词 w(t+j)w^{(t+j)}w(t+j) 的概率。
在负采样的框架下,我们将这个条件概率近似为:
“正样本发生的概率 × 所有负样本不发生的概率”
也就是说,我们假设事件 S:woS: w_oS:wo 是 wcw_cwc 的真实上下文词,以及 N1,…,NK:wkN_1, \ldots, N_K: w_kN1,…,NK:wk 不是 wcw_cwc 的上下文词,是相互独立的。
于是我们可以写:
P(w(t+j)∣w(t))≈P(正例)×∏k=1KP(负例k)P(w^{(t+j)} \mid w^{(t)}) \approx P(\text{正例}) \times \prod_{k=1}^{K} P(\text{负例}_k)P(w(t+j)∣w(t))≈P(正例)×k=1∏KP(负例k)
即:
P(w(t+j)∣w(t))≈P(D=1∣w(t),w(t+j))∏k=1KP(D=0∣w(t),wk)P(w^{(t+j)} \mid w^{(t)}) \approx P(D=1 \mid w^{(t)}, w^{(t+j)}) \prod_{k=1}^{K} P(D=0 \mid w^{(t)}, w_k)P(w(t+j)∣w(t))≈P(D=1∣w(t),w(t+j))k=1∏KP(D=0∣w(t),wk)
其中 wk∼P(w)w_k \sim P(w)wk∼P(w) 是从数据分布中采样的噪声词。
622

被折叠的 条评论
为什么被折叠?



