隐空间模型(如 Word2Vec)中的负采样(Negative Sampling)算法
字数 3565 2025-12-21 05:59:32

隐空间模型(如 Word2Vec)中的负采样(Negative Sampling)算法

题目描述
Word2Vec 是一种广泛应用于自然语言处理的词嵌入模型,它通过学习将词汇映射到低维连续向量空间,使得语义相似的词在向量空间中距离相近。Word2Vec 包含两种主要架构:Skip-gram 和 CBOW。然而,在训练过程中,如果直接使用标准的 softmax 函数计算每个词的条件概率,将面临巨大的计算开销,因为 softmax 需要对词汇表中的所有词求和。为了高效地训练大规模语料,Word2Vec 采用了负采样(Negative Sampling)技术。负采样通过将多分类问题转化为二分类问题,显著降低了计算复杂度。本次讲解将详细介绍负采样的动机、原理、采样策略以及如何在 Skip-gram 模型中应用负采样进行优化求解。

解题过程

1. 问题背景与动机
在 Skip-gram 模型中,目标是根据中心词 \(c\) 预测其上下文窗口内的目标词 \(t\)。理想情况下,模型应最大化给定中心词时目标词的条件概率 \(P(t|c)\)。使用 softmax 函数表示如下:

\[P(t|c) = \frac{\exp(\mathbf{v}_t \cdot \mathbf{v}_c)}{\sum_{w \in V} \exp(\mathbf{v}_w \cdot \mathbf{v}_c)} \]

其中 \(V\) 是词汇表,\(\mathbf{v}_c\)\(\mathbf{v}_t\) 分别是中心词和目标词的向量表示。分母需要对词汇表中的所有词 \(w\) 计算指数内积,当词汇表规模达到数十万时,计算代价极高,成为训练瓶颈。

负采样的核心思想是:不再直接计算完整的 softmax,而是通过区分“真实目标词”(正样本)和随机采样的“噪声词”(负样本)来学习词向量。这样,每次更新只需处理少量样本(例如,一个正样本和 \(k\) 个负样本),计算复杂度从 \(O(|V|)\) 降低到 \(O(k+1)\),其中 \(k\) 通常远小于 \(|V|\)(例如 \(k=5\))。

2. 负采样的基本原理
负采样将问题重构为一个二分类任务:给定一对词 \((c, t)\),判断它们是否来自真实的上下文关系(即 \(t\) 确实出现在 \(c\) 的上下文窗口中)。

  • 正样本:从语料中实际共现的 \((c, t)\) 对。
  • 负样本:随机从词汇表中采样 \(k\) 个词 \(n_i\),与 \(c\) 组成 \((c, n_i)\) 对,这些词通常不在 \(c\) 的上下文中。

对于每个样本对 \((c, w)\),模型输出一个概率,表示 \(w\)\(c\) 的真实上下文词的概率:

\[P(D=1|c,w) = \sigma(\mathbf{v}_w \cdot \mathbf{v}_c) = \frac{1}{1 + \exp(-\mathbf{v}_w \cdot \mathbf{v}_c)} \]

其中 \(\sigma\) 是 sigmoid 函数,\(D=1\) 表示正样本,\(D=0\) 表示负样本。

3. 目标函数构建
对于每个正样本 \((c, t)\) 和对应的 \(k\) 个负样本 \((c, n_1), \dots, (c, n_k)\),目标函数定义为最大化正样本的对数概率,同时最小化负样本的对数概率(即最大化负样本被分类为负的概率):

\[J = \log \sigma(\mathbf{v}_t \cdot \mathbf{v}_c) + \sum_{i=1}^k \log \sigma(-\mathbf{v}_{n_i} \cdot \mathbf{v}_c) \]

直观上,第一项使中心词与真实上下文词的向量内积增大,第二项使中心词与噪声词的向量内积减小(通过负号实现)。整体目标等价于最小化以下损失函数:

\[\mathcal{L} = -\log \sigma(\mathbf{v}_t \cdot \mathbf{v}_c) - \sum_{i=1}^k \log \sigma(-\mathbf{v}_{n_i} \cdot \mathbf{v}_c) \]

4. 负样本采样策略
为了提升效果,负样本并非均匀随机采样,而是采用基于词频的分布进行加权采样。Word2Vec 使用以下分布:

\[P(w) = \frac{f(w)^{3/4}}{\sum_{w' \in V} f(w')^{3/4}} \]

其中 \(f(w)\) 是词 \(w\) 在语料中的频率。

  • 为什么使用 \(3/4\) 次幂?
    • 降低高频词的采样概率(如“the”、“a”),避免负样本中充斥常见词。
    • 增加低频词的采样机会,使模型能更好地学习稀有词的表示。
    • 经验表明,\(3/4\) 次幂在效果和效率间取得了良好平衡。

5. 训练过程与梯度更新
采用随机梯度下降(SGD)优化目标函数。以 Skip-gram with Negative Sampling(SGNS)为例,步骤如下:

  1. 输入:语料库,上下文窗口大小 \(m\),负样本数 \(k\),词向量维度 \(d\)
  2. 初始化:为每个词随机初始化两个向量:作为中心词时的向量 \(\mathbf{v}_c\) 和作为上下文词时的向量 \(\mathbf{u}_w\)(实际应用中,有时使用统一向量)。
  3. 迭代每个中心词
    • 遍历语料中的每个中心词 \(c\)
    • 获取其上下文窗口内的所有目标词 \(t\)
    • 对于每个 \((c, t)\) 正样本:
      a. 采样 \(k\) 个负样本词 \(n_i\) 按分布 \(P(w)\) 采样。
      b. 计算损失函数 \(\mathcal{L}\)
      c. 计算梯度并更新向量:
      对于正样本 \(t\)

\[ \frac{\partial \mathcal{L}}{\partial \mathbf{v}_c} = (\sigma(\mathbf{v}_t \cdot \mathbf{v}_c) - 1) \mathbf{u}_t, \quad \frac{\partial \mathcal{L}}{\partial \mathbf{u}_t} = (\sigma(\mathbf{v}_t \cdot \mathbf{v}_c) - 1) \mathbf{v}_c \]

   对于每个负样本 $ n_i $:

\[ \frac{\partial \mathcal{L}}{\partial \mathbf{v}_c} = \sigma(\mathbf{v}_{n_i} \cdot \mathbf{v}_c) \mathbf{u}_{n_i}, \quad \frac{\partial \mathcal{L}}{\partial \mathbf{u}_{n_i}} = \sigma(\mathbf{v}_{n_i} \cdot \mathbf{v}_c) \mathbf{v}_c \]

 d. 更新参数:$ \mathbf{v}_c \leftarrow \mathbf{v}_c - \eta \frac{\partial \mathcal{L}}{\partial \mathbf{v}_c} $,类似地更新 $ \mathbf{u}_t $ 和 $ \mathbf{u}_{n_i} $。  
  1. 输出:训练得到的词向量(通常使用中心词向量 \(\mathbf{v}_c\) 或上下文向量 \(\mathbf{u}_w\) 的平均)。

6. 负采样的优势与局限性

  • 优势
    • 计算效率高:避免了全词汇 softmax 的求和操作。
    • 易于实现:只需采样少量负样本。
    • 效果优秀:在实践中能学习到高质量的语义和语法关系。
  • 局限性
    • 采样分布和负样本数 \(k\) 需调优。
    • 与原始 softmax 相比,理论上的概率模型有所简化。

总结
负采样通过将复杂的多分类问题转化为简单的二分类问题,并基于词频分布采样负样本,使得 Word2Vec 能够高效地训练大规模语料。其核心在于目标函数的设计和采样策略的优化,这已成为词嵌入训练中的标准技术之一。

隐空间模型(如 Word2Vec)中的负采样(Negative Sampling)算法 题目描述 Word2Vec 是一种广泛应用于自然语言处理的词嵌入模型,它通过学习将词汇映射到低维连续向量空间,使得语义相似的词在向量空间中距离相近。Word2Vec 包含两种主要架构:Skip-gram 和 CBOW。然而,在训练过程中,如果直接使用标准的 softmax 函数计算每个词的条件概率,将面临巨大的计算开销,因为 softmax 需要对词汇表中的所有词求和。为了高效地训练大规模语料,Word2Vec 采用了负采样(Negative Sampling)技术。负采样通过将多分类问题转化为二分类问题,显著降低了计算复杂度。本次讲解将详细介绍负采样的动机、原理、采样策略以及如何在 Skip-gram 模型中应用负采样进行优化求解。 解题过程 1. 问题背景与动机 在 Skip-gram 模型中,目标是根据中心词 \( c \) 预测其上下文窗口内的目标词 \( t \)。理想情况下,模型应最大化给定中心词时目标词的条件概率 \( P(t|c) \)。使用 softmax 函数表示如下: \[ P(t|c) = \frac{\exp(\mathbf{v}_ t \cdot \mathbf{v} c)}{\sum {w \in V} \exp(\mathbf{v}_ w \cdot \mathbf{v}_ c)} \] 其中 \( V \) 是词汇表,\( \mathbf{v}_ c \) 和 \( \mathbf{v}_ t \) 分别是中心词和目标词的向量表示。分母需要对词汇表中的所有词 \( w \) 计算指数内积,当词汇表规模达到数十万时,计算代价极高,成为训练瓶颈。 负采样的核心思想是:不再直接计算完整的 softmax,而是通过区分“真实目标词”(正样本)和随机采样的“噪声词”(负样本)来学习词向量。这样,每次更新只需处理少量样本(例如,一个正样本和 \( k \) 个负样本),计算复杂度从 \( O(|V|) \) 降低到 \( O(k+1) \),其中 \( k \) 通常远小于 \( |V| \)(例如 \( k=5 \))。 2. 负采样的基本原理 负采样将问题重构为一个二分类任务:给定一对词 \( (c, t) \),判断它们是否来自真实的上下文关系(即 \( t \) 确实出现在 \( c \) 的上下文窗口中)。 正样本 :从语料中实际共现的 \( (c, t) \) 对。 负样本 :随机从词汇表中采样 \( k \) 个词 \( n_ i \),与 \( c \) 组成 \( (c, n_ i) \) 对,这些词通常不在 \( c \) 的上下文中。 对于每个样本对 \( (c, w) \),模型输出一个概率,表示 \( w \) 是 \( c \) 的真实上下文词的概率: \[ P(D=1|c,w) = \sigma(\mathbf{v}_ w \cdot \mathbf{v}_ c) = \frac{1}{1 + \exp(-\mathbf{v}_ w \cdot \mathbf{v}_ c)} \] 其中 \( \sigma \) 是 sigmoid 函数,\( D=1 \) 表示正样本,\( D=0 \) 表示负样本。 3. 目标函数构建 对于每个正样本 \( (c, t) \) 和对应的 \( k \) 个负样本 \( (c, n_ 1), \dots, (c, n_ k) \),目标函数定义为最大化正样本的对数概率,同时最小化负样本的对数概率(即最大化负样本被分类为负的概率): \[ J = \log \sigma(\mathbf{v} t \cdot \mathbf{v} c) + \sum {i=1}^k \log \sigma(-\mathbf{v} {n_ i} \cdot \mathbf{v}_ c) \] 直观上,第一项使中心词与真实上下文词的向量内积增大,第二项使中心词与噪声词的向量内积减小(通过负号实现)。整体目标等价于最小化以下损失函数: \[ \mathcal{L} = -\log \sigma(\mathbf{v} t \cdot \mathbf{v} c) - \sum {i=1}^k \log \sigma(-\mathbf{v} {n_ i} \cdot \mathbf{v}_ c) \] 4. 负样本采样策略 为了提升效果,负样本并非均匀随机采样,而是采用基于词频的分布进行加权采样。Word2Vec 使用以下分布: \[ P(w) = \frac{f(w)^{3/4}}{\sum_ {w' \in V} f(w')^{3/4}} \] 其中 \( f(w) \) 是词 \( w \) 在语料中的频率。 为什么使用 \( 3/4 \) 次幂? : 降低高频词的采样概率(如“the”、“a”),避免负样本中充斥常见词。 增加低频词的采样机会,使模型能更好地学习稀有词的表示。 经验表明,\( 3/4 \) 次幂在效果和效率间取得了良好平衡。 5. 训练过程与梯度更新 采用随机梯度下降(SGD)优化目标函数。以 Skip-gram with Negative Sampling(SGNS)为例,步骤如下: 输入 :语料库,上下文窗口大小 \( m \),负样本数 \( k \),词向量维度 \( d \)。 初始化 :为每个词随机初始化两个向量:作为中心词时的向量 \( \mathbf{v}_ c \) 和作为上下文词时的向量 \( \mathbf{u}_ w \)(实际应用中,有时使用统一向量)。 迭代每个中心词 : 遍历语料中的每个中心词 \( c \)。 获取其上下文窗口内的所有目标词 \( t \)。 对于每个 \( (c, t) \) 正样本: a. 采样 \( k \) 个负样本词 \( n_ i \) 按分布 \( P(w) \) 采样。 b. 计算损失函数 \( \mathcal{L} \)。 c. 计算梯度并更新向量: 对于正样本 \( t \): \[ \frac{\partial \mathcal{L}}{\partial \mathbf{v}_ c} = (\sigma(\mathbf{v}_ t \cdot \mathbf{v}_ c) - 1) \mathbf{u}_ t, \quad \frac{\partial \mathcal{L}}{\partial \mathbf{u}_ t} = (\sigma(\mathbf{v}_ t \cdot \mathbf{v} c) - 1) \mathbf{v} c \] 对于每个负样本 \( n_ i \): \[ \frac{\partial \mathcal{L}}{\partial \mathbf{v} c} = \sigma(\mathbf{v} {n_ i} \cdot \mathbf{v} c) \mathbf{u} {n_ i}, \quad \frac{\partial \mathcal{L}}{\partial \mathbf{u} {n_ i}} = \sigma(\mathbf{v} {n_ i} \cdot \mathbf{v}_ c) \mathbf{v}_ c \] d. 更新参数:\( \mathbf{v}_ c \leftarrow \mathbf{v}_ c - \eta \frac{\partial \mathcal{L}}{\partial \mathbf{v}_ c} \),类似地更新 \( \mathbf{u} t \) 和 \( \mathbf{u} {n_ i} \)。 输出 :训练得到的词向量(通常使用中心词向量 \( \mathbf{v}_ c \) 或上下文向量 \( \mathbf{u}_ w \) 的平均)。 6. 负采样的优势与局限性 优势 : 计算效率高:避免了全词汇 softmax 的求和操作。 易于实现:只需采样少量负样本。 效果优秀:在实践中能学习到高质量的语义和语法关系。 局限性 : 采样分布和负样本数 \( k \) 需调优。 与原始 softmax 相比,理论上的概率模型有所简化。 总结 负采样通过将复杂的多分类问题转化为简单的二分类问题,并基于词频分布采样负样本,使得 Word2Vec 能够高效地训练大规模语料。其核心在于目标函数的设计和采样策略的优化,这已成为词嵌入训练中的标准技术之一。