基于负采样的Skip-gram模型
题目描述
Skip-gram模型是Word2Vec的一种实现,用于从大规模文本中学习词向量。其核心思想是:给定一个中心词,预测其上下文词。但直接使用Softmax计算所有词的预测概率会非常耗时(尤其词汇表很大时)。负采样通过简化训练过程解决了这一问题:不再计算整个词汇表的概率,而是仅更新少数“负样本”(随机采样的非上下文词)和“正样本”(真实上下文词)的权重。
解题过程
1. 原始Skip-gram的目标函数
原始Skip-gram的目标是最大化以下对数似然:
\[J = \sum_{t=1}^{T} \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t) \]
其中 \(p(w_O | w_I) = \frac{\exp(v_{w_O}^T u_{w_I})}{\sum_{w=1}^{V} \exp(v_w^T u_{w_I})}\),\(V\) 是词汇表大小,\(v_w\) 和 \(u_w\) 分别表示词 \(w\) 作为上下文词和中心词的向量。直接计算分母(需遍历所有词)成本过高。
2. 负采样的改进思路
负采样将问题转化为二分类任务:
- 正样本:中心词与真实上下文词组成配对 \((w_I, w_O)\),标签为1。
- 负样本:中心词与随机采样的非上下文词组成配对 \((w_I, w_{\text{neg}})\),标签为0。
目标函数变为:
\[J_{\text{NS}} = \sum_{(w_I, w_O)} \left[ \log \sigma(v_{w_O}^T u_{w_I}) + \sum_{k=1}^{K} \log \sigma(-v_{w_k}^T u_{w_I}) \right] \]
其中:
- \(\sigma(x) = \frac{1}{1+e^{-x}}\) 是sigmoid函数;
- \(K\) 是负样本数量(通常5~20);
- \(w_k\) 从噪声分布 \(P_n(w)\) 中采样(常采用词频的3/4次方归一化后的分布)。
3. 负采样细节
噪声分布设计:
负样本采样并非均匀随机,而是优先选择高频词作为负样本。具体地,采样概率为:
\[P_n(w_i) = \frac{f(w_i)^{3/4}}{\sum_{j=1}^{V} f(w_j)^{3/4}} \]
其中 \(f(w_i)\) 是词频。3/4次方的作用是平衡高频词和低频词的被采样概率,避免高频词主导训练。
训练过程:
- 对每个训练样本(中心词 \(w_I\),上下文词 \(w_O\)):
- 更新正样本对 \((w_I, w_O)\) 的向量:计算梯度并调整 \(u_{w_I}\) 和 \(v_{w_O}\)。
- 随机采样 \(K\) 个负样本词 \(w_1, \dots, w_K\),对每个负样本:
- 更新中心词向量 \(u_{w_I}\) 和负样本上下文向量 \(v_{w_k}\)(通过最大化 \(\log \sigma(-v_{w_k}^T u_{w_I})\))。
- 重复遍历语料直至收敛。
4. 为什么负采样有效?
- 计算效率:每次更新只需计算 \(K+1\) 个词的向量,而非整个词汇表(\(V\) 可能达百万级),将复杂度从 \(O(V)\) 降至 \(O(K)\)。
- 物理意义:通过区分正负样本,模型学习到“相似词应靠近,不相似词应远离”的向量空间结构。
5. 与原始Softmax的对比
- 原始Softmax要求模型对所有词进行概率分配,负采样仅关注少量对比样本,更适用于大规模数据。
- 实验表明,负采样得到的词向量在语义类比任务(如“国王-男人+女人≈女王”)中表现优异。
总结
负采样通过简化概率计算和引入对比学习机制,使Skip-gram模型可高效处理海量词汇,是词向量训练中的关键优化技术。