基于负采样的Skip-gram模型
字数 1690 2025-10-30 11:52:22

基于负采样的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次方的作用是平衡高频词和低频词的被采样概率,避免高频词主导训练。

训练过程

  1. 对每个训练样本(中心词 \(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})\))。
  2. 重复遍历语料直至收敛。

4. 为什么负采样有效?

  • 计算效率:每次更新只需计算 \(K+1\) 个词的向量,而非整个词汇表(\(V\) 可能达百万级),将复杂度从 \(O(V)\) 降至 \(O(K)\)
  • 物理意义:通过区分正负样本,模型学习到“相似词应靠近,不相似词应远离”的向量空间结构。

5. 与原始Softmax的对比

  • 原始Softmax要求模型对所有词进行概率分配,负采样仅关注少量对比样本,更适用于大规模数据。
  • 实验表明,负采样得到的词向量在语义类比任务(如“国王-男人+女人≈女王”)中表现优异。

总结

负采样通过简化概率计算和引入对比学习机制,使Skip-gram模型可高效处理海量词汇,是词向量训练中的关键优化技术。

基于负采样的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模型可高效处理海量词汇,是词向量训练中的关键优化技术。