什么是CBOW(Continuous Bag‑of‑Words)

CBOWContinuous Bag‑of‑Words)模型概述

CBOW 是 Word2Vec 系列模型之一,由 Mikolov 等人在 2013 年提出,用于从大规模语料中学习词的稠密向量词向量)。它的核心思想是利用上下文词预测中心词,即在给定一个词的前后若干个词(上下文)时,模型学习输出该中心词出现的概率,从而得到能够捕捉语义关系的向量表示。


1. 基本原理与结构

层次 作用 关键实现
输入层 接收上下文词的 one‑hot 编码或词向量。通常将窗口大小为 2 × window_size 的上下文词全部输入。 每个上下文词对应一个稀疏向量,随后映射到嵌入矩阵得到低维向量
投影层(隐藏层 对所有上下文词向量进行求和或平均,得到一个统一的上下文表示 h。
输出层 通过权重矩阵将 h 映射到词表大小的向量,并使用 Softmax(或负采样)计算每个词的概率分布。 预测中心词的概率

模型的训练目标是最大化对数似然(即最小化交叉熵损失),使得真实中心词的概率尽可能大。


2. 训练细节

  1. 窗口大小:决定上下文词的数量,常用 2–5。窗口越大,捕获的语义范围越广,但噪声也会增加。
  2. 词向量维度:常设为 50–300 维,维度越高可表达更细致的语义,但计算成本随之上升。
  3. 负采样 / 层次 Softmax:为降低 Softmax 的计算复杂度,CBOW 常采用负采样或层次 Softmax 进行近似。
  4. 优化算法:可使用 SGD、Adam 等梯度下降方法对权重矩阵进行更新。

3. 与 Skip‑gram 的对比

维度 CBOW Skip‑gram
预测方向 由上下文 → 中心词 由中心词 → 上下文
训练样本数 每个中心词产生 1 条样本(上下文合并) 每个中心词产生 C 条样本(每个上下文词单独预测)
适用场景 语料量大、词频高时效果好,训练更快 对低频词表现更佳,适合小语料或需要捕捉细粒度关系的任务
计算效率 通过上下文向量平均,计算更简洁 需要对每个上下文词单独计算,成本稍高

4. 优势与局限

优势

  • 训练速度快:一次前向传播只需对上下文词向量求平均,适合大规模语料。
  • 平滑稀疏信息:通过上下文的聚合,能够捕获词的整体语义倾向。
  • 实现简单:只需三层浅层网络,易于在各种深度学习框架中实现。

局限

  • 忽略词序:上下文词被视为“袋”,失去位置信息。
  • 对低频词表现一般:因为训练样本较少,词向量质量受限。
  • 对长距离依赖捕获不足:窗口大小受限,难以建模跨句或跨段的语义关系。

5. 典型应用


6. 实现要点(以 PyTorch 为例)

class CBOW(nn.Module):
    def __init__(self, vocab_size, embed_dim):
        super().__init__()
        self.embeddings = nn.Embedding(vocab_size, embed_dim)
        self.linear = nn.Linear(embed_dim, vocab_size)

    def forward(self, context_idxs):
        # context_idxs: (batch, C)  C 为上下文词数
        embeds = self.embeddings(context_idxs)          # (batch, C, embed_dim)
        avg_embed = embeds.mean(dim=1)                  # (batch, embed_dim)
        out = self.linear(avg_embed)                    # (batch, vocab_size)
        log_probs = F.log_softmax(out, dim=1)
        return log_probs

上述代码展示了 输入层 → 嵌入 → 平均 → 线性层 → Softmax 的完整流程,正是 CBOW 的核心结构。


7. 小结

CBOW 通过上下文词的平均向量预测中心词,实现了高效的词向量学习。它在大规模语料上训练快速、效果稳健,是 Word2Vec 系列中最常用的基线模型之一。尽管存在对词序信息的忽略和对低频词的局限,但在多数自然语言处理任务的特征构建阶段仍发挥着重要作用。

来源:www.aiug.cn
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!