1 跳元模型(Skip-Gram)

  1. 定义模型参数
  • 对于词典中的每个词,有两个d维的向量表示,分别用于中心词和上下文词。
  • 中心词向量记为\mathbf{v}_i,上下文词向量记为\mathbf{u}_i
  1. 计算条件概率
    • 给定一个中心词w_c,计算生成任意上下文词w_o的条件概率。

    • 条件概率通过中心词向量和上下文词向量的点积计算,然后通过softmax函数转换为概率分布。

    • 具体公式为:

      P(w_o \mid w_c) = \frac{\text{exp}(\mathbf{u}_o^\top \mathbf{v}_c)}{ \sum_{i \in \mathcal{V}} \text{exp}(\mathbf{u}_i^\top \mathbf{v}_c)},
    • 其中\mathcal{V}是词表索引集,包含所有可能的上下文词。

  2. 训练目标
    • 最大化似然函数,即最小化损失函数。
    • 损失函数是负的对数似然函数,计算每个上下文词的条件概率的对数。
    • 具体公式为:
      - \sum_{t=1}^{T} \sum_{-m \leq j \leq m,\ j \neq 0} \text{log}\, P(w^{(t+j)} \mid w^{(t)}),
    • 其中T是文本序列的长度,m是上下文窗口的大小。
  3. 更新模型参数
    • 使用随机梯度下降更新中心词向量和上下文词向量。
    • 计算对数条件概率的梯度,然后更新向量。
    • 具体公式为:
      \frac{\partial \text{log}\, P(w_o \mid w_c)}{\partial \mathbf{v}_c} = \mathbf{u}_o - \sum_{j \in \mathcal{V}} P(w_j \mid w_c) \mathbf{u}_j.
    • 其他词向量的梯度可以以相同的方式获得。
  4. 使用词向量
    • 训练完成后,跳元模型的中心词向量通常用作词表示。

跳元模型通过计算中心词和上下文词的点积,并使用softmax函数将其转换为概率分布,来学习词的嵌入表示。在训练过程中,通过最大化似然函数来更新模型参数,从而学习到能够捕捉词之间关系的词向量。这些词向量可以用于自然语言处理任务中的各种应用。


2 连续词袋(CBOW)模型

  1. 定义模型参数
    • 对于词典中的每个词,有两个d维的向量表示,分别用于上下文词和中心词。
    • 上下文词向量记为\mathbf{v}_i,中心词向量记为\mathbf{u}_i
  2. 计算条件概率
    • 给定多个上下文词w_{o_1}, \ldots, w_{o_{2m}},计算生成任意中心词w_c的条件概率。
    • 条件概率通过上下文词向量的平均值和中心词向量的点积计算,然后通过softmax函数转换为概率分布。
    • 具体公式为:
      P(w_c \mid w_{o_1}, \ldots, w_{o_{2m}}) = \frac{\text{exp}\left(\mathbf{u}_c^\top \bar{\mathbf{v}}_o\right)}{\sum_{i \in \mathcal{V}} \text{exp}\left(\mathbf{u}_i^\top \bar{\mathbf{v}}_o\right)},
    • 其中\bar{\mathbf{v}}_o = \left(\mathbf{v}_{o_1} + \ldots, + \mathbf{v}_{o_{2m}} \right)/(2m)是上下文词向量的平均值。
  3. 训练目标
    • 最大化似然函数,即最小化损失函数。
    • 损失函数是负的对数似然函数,计算每个中心词的条件概率的对数。
    • 具体公式为:
      -\sum_{t=1}^T \text{log}\, P(w^{(t)} \mid w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}).
    • 其中T是文本序列的长度,m是上下文窗口的大小。
  4. 更新模型参数
    • 使用随机梯度下降更新上下文词向量和中心词向量。
    • 计算对数条件概率的梯度,然后更新向量。
    • 具体公式为:
      \frac{\partial \log\, P(w_c \mid \mathcal{W}_o)}{\partial \mathbf{v}_{o_i}} = \frac{1}{2m}\left(\mathbf{u}_c - \sum_{j \in \mathcal{V}} P(w_j \mid \mathcal{W}_o) \mathbf{u}_j \right).
    • 其他词向量的梯度可以以相同的方式获得。
  5. 使用词向量
    • 训练完成后,连续词袋模型的上下文词向量通常用作词表示。

连续词袋模型通过计算上下文词向量的平均值和中心词向量的点积,并使用softmax函数将其转换为概率分布,来学习词的嵌入表示。在训练过程中,通过最大化似然函数来更新模型参数,从而学习到能够捕捉词之间关系的词向量。这些词向量可以用于自然语言处理任务中的各种应用。

3 近似训练(以跳元模型为例)

跳元模型的主要思想是使用softmax运算来计算基于给定的中心词w_c生成上下文字w_o的条件概率。

由于softmax操作的性质,上下文词可以是词表\mathcal{V}中的任意项,包含与整个词表大小一样多的项的求和。因此,跳元模型的梯度计算和连续词袋模型的梯度计算都包含求和。不幸的是,在一个词典上(通常有几十万或数百万个单词)求和的梯度的计算成本是巨大的!为了降低上述计算复杂度,有两种近似训练方法:负采样分层softmax

负采样和层序Softmax都是用于训练词嵌入的方法,它们都旨在提高训练效率和模型性能。

  • 负采样:通过引入噪声词,减少计算复杂度,并允许模型在有限的计算资源下学习更复杂的词表示。
  • 层序Softmax:通过使用二叉树结构,减少每个训练步的计算量,尤其是在处理大型词表时。

3.1负采样(Negative Sampling)

  1. 定义模型参数
    • 对于词典中的每个词,有两个d维的向量表示,分别用于中心词和上下文词。
    • 中心词向量记为\mathbf{v}_i,上下文词向量记为\mathbf{u}_i
  2. 计算条件概率
    • 给定中心词w_c的上下文窗口,计算生成任意上下文词w_o的条件概率。

    • 条件概率通过上下文词向量\mathbf{u}_o和中心词向量\mathbf{v}_c的点积计算,然后通过sigmoid函数转换为概率。

    • 具体公式为:

      P(D=1\mid w_c, w_o) = \sigma(\mathbf{u}_o^\top \mathbf{v}_c),
      P(D=1\mid w_c, w_o) = \frac{1}{1+\exp(-\mathbf{u}_o^\top \mathbf{v}_c)},
    • 其中\sigma是sigmoid激活函数。

  3. 训练目标
    • 最大化似然函数,即最小化损失函数。
    • 损失函数是负的对数似然函数,计算每个上下文词的条件概率的对数。
    • 具体公式为:
      -\log P(D=1\mid w_c, w_o) - \sum_{k=1,\ w_k \sim P(w)}^K \log P(D=0\mid w_c, w_k),
    • 其中P(w)是噪声词的预定义分布,K是噪声词的数量。
  4. 更新模型参数
    • 使用随机梯度下降更新中心词向量和上下文词向量。
    • 计算对数似然函数的梯度,然后更新向量。
    • 具体公式为:
      \frac{\partial \log P(D=1\mid w_c, w_o)}{\partial \mathbf{v}_c} = \mathbf{u}_o - \sum_{k=1,\ w_k \sim P(w)}^K \mathbf{u}_k \cdot P(D=0\mid w_c, w_k),
    • 其他词向量的梯度可以以相同的方式获得。

3.2 层序Softmax(Hierarchical Softmax)

  1. 定义模型参数

    • 对于词典中的每个词,有两个d维的向量表示,分别用于中心词和上下文词。
    • 中心词向量记为\mathbf{v}_i,上下文词向量记为\mathbf{u}_i
  2. 计算条件概率

    • 给定中心词w_c,计算生成任意上下文词w_o的条件概率。
    • 使用二叉树结构来近似计算条件概率。
    • 具体公式为:
      P(w_o \mid w_c) = \prod_{j=1}^{L(w_o)-1} \sigma\left( [\![ n(w_o, j+1) = \text{leftChild}(n(w_o, j)) ]\!] \cdot \mathbf{u}_{n(w_o, j)}^\top \mathbf{v}_c\right),
    • 其中L(w_o)是从根到w_o的路径上的节点数,\text{leftChild}(n)是节点n的左子节点。
  3. 训练目标: - 最大化似然函数,即最小化损失函数。

    • 损失函数是负的对数似然函数,计算每个上下文词的条件概率的对数。

    • 具体公式为:

      \log P(w_o \mid w_c) = -\sum_{j=1}^{L(w_o)-1} \log \sigma\left( [\![ n(w_o, j+1) = \text{leftChild}(n(w_o, j)) ]\!] \cdot \mathbf{u}_{n(w_o, j)}^\top \mathbf{v}_c\right),
    • 其中L(w_o)是从根到w_o的路径上的节点数,\text{leftChild}(n)是节点n的左子节点。

  4. 更新模型参数

    • 使用随机梯度下降更新中心词向量和上下文词向量。
    • 计算对数似然函数的梯度,然后更新向量。
    • 具体公式为:
    \frac{\partial \log P(w_o \mid w_c)}{\partial \mathbf{v}_c} = \sum_{j=1}^{L(w_o)-1} \mathbf{u}_{n(w_o, j)} \cdot \sigma\left( [\![ n(w_o, j+1) = \text{leftChild}(n(w_o, j)) ]\!] \cdot \mathbf{u}_{n(w_o, j)}^\top \mathbf{v}_c\right),
    • 其他词向量的梯度可以以相同的方式获得。