基于负例采样的Skip-gram模型(Negative Sampling for Skip-gram)
题目描述
Skip-gram是Word2Vec的一种核心模型,旨在通过中心词预测上下文词,从而学习词向量。但直接使用Softmax计算所有词的预测概率时,由于词汇表规模庞大(通常达数万至百万词),计算开销极高。负采样(Negative Sampling)通过简化训练目标,仅采样少量负样本(非目标词)来近似Softmax,大幅提升训练效率。本题要求详解负采样的动机、采样策略、损失函数设计及训练过程。
1. Skip-gram的原始问题
假设词汇表大小为 \(V\),Skip-gram的原始目标函数为:
\[J = \frac{1}{T} \sum_{t=1}^T \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} \mid w_t) \]
其中 \(p(w_O \mid w_I) = \frac{\exp(v_{w_O}^T u_{w_I})}{\sum_{i=1}^V \exp(v_{w_i}^T u_{w_I})}\)(Softmax)。
问题:计算分母的归一化项需遍历整个词汇表,时间复杂度为 \(O(V)\),训练缓慢。
2. 负采样的核心思想
负采样将多分类问题转化为二分类问题:
- 正样本:中心词 \(w_t\) 与真实上下文词 \(w_{t+j}\) 组成一对(目标:标签为1)。
- 负样本:中心词 \(w_t\) 与随机采样的 \(K\) 个非上下文词(噪声词)组成一对(目标:标签为0)。
通过减少计算量(仅需计算 \(K+1\) 个样本而非 \(V\) 个词),使训练效率提升 \(O(V) \to O(K)\)(通常 \(K \in [5,20]\))。
3. 负采样策略
负样本需从词汇表中按非均匀分布采样,高频词更可能被选为负样本。采样概率基于词频调整:
\[P(w_i) = \frac{f(w_i)^{3/4}}{\sum_{j=1}^V f(w_j)^{3/4}} \]
其中 \(f(w_i)\) 为词频。幂次3/4可平衡高频与低频词的采样概率,避免过度偏向高频词。
4. 损失函数设计
对于一对词 \((w_I, w_O)\),定义二分类概率:
\[p(D=1 \mid w_I, w_O) = \sigma(u_{w_O}^T v_{w_I}) \]
其中 \(\sigma(x) = \frac{1}{1+e^{-x}}\)。负采样目标函数为:
\[J_{NS} = \log \sigma(u_{w_O}^T v_{w_I}) + \sum_{i=1}^K \mathbb{E}_{w_i \sim P_n(w)} \left[ \log \sigma(-u_{w_i}^T v_{w_I}) \right] \]
- 第一项最大化正样本的相似度;
- 第二项最小化负样本的相似度(\(\sigma(-x)=1-\sigma(x)\))。
5. 训练流程
- 输入:中心词 \(w_t\) 及其上下文窗口内的词 \(w_{t+j}\)。
- 正样本:\((w_t, w_{t+j})\),标签为1。
- 负样本:从分布 \(P_n(w)\) 采样 \(K\) 个词 \(w_1, \dots, w_K\),生成负样本对 \((w_t, w_1), \dots, (w_t, w_K)\),标签均为0。
- 梯度更新:
- 计算正样本和 \(K\) 个负样本的损失梯度(仅更新涉及的中心词向量 \(v_{w_t}\)、正样本词向量 \(u_{w_{t+j}}\) 及 \(K\) 个负样本词向量 \(u_{w_i}\))。
- 使用随机梯度下降(SGD)更新参数。
6. 为什么负采样有效?
- 计算效率:将 \(O(V)\) 的Softmax简化为 \(O(K)\) 的二分类。
- 向量质量:通过对比学习区分正负样本,使语义相近的词向量靠近,无关词向量远离。
- 实践效果:在词类比、相似度计算等任务中接近原始Softmax的效果,但训练速度快数十倍。
总结
负采样通过近似Softmax的归一化过程,以少量负样本代替全局计算,是Skip-gram模型实用的关键优化。其核心在于将词汇表规模的复杂度降为常数级别,同时保持词向量的表达能力。