深入解析CBOW模型的词嵌入矩阵生成原理与实现

1次阅读
没有评论

共计 1769 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

词嵌入与 CBOW 模型简介

词嵌入是自然语言处理中的基础技术,它将词语映射到低维连续向量空间,使得语义相似的词在向量空间中距离相近。CBOW(Continuous Bag-of-Words)模型是一种经典的词嵌入方法,它通过上下文词预测目标词来学习词向量。

深入解析 CBOW 模型的词嵌入矩阵生成原理与实现

CBOW 模型的结构包括输入层、隐藏层和输出层:

  • 输入层:将上下文词的 one-hot 向量输入模型
  • 隐藏层:对所有上下文词的向量求平均,并通过权重矩阵转换
  • 输出层:通过 softmax 计算目标词的概率分布

词嵌入矩阵的数学推导

词嵌入矩阵是 CBOW 模型的核心,它存储了所有词的向量表示。假设我们的词汇表大小为 V,词向量维度为 D,那么词嵌入矩阵 W 的大小为 V×D。

  1. 输入层到隐藏层的计算过程:
  2. 假设窗口大小为 2,则上下文包含目标词前后各 2 个词
  3. 每个上下文词用 one-hot 向量 x_i 表示(维度 V×1)
  4. 词嵌入矩阵 W 与 x_i 相乘得到词向量 v_i = W·x_i
  5. 对所有上下文词向量求平均:h = (v_1 + v_2 + v_3 + v_4)/4

  6. 隐藏层到输出层的计算:

  7. 使用另一个矩阵 W ’(维度 D×V)将隐藏层向量转换为输出分数
  8. u = W’·h
  9. 通过 softmax 计算目标词的概率分布:y = softmax(u)

Python 实现(PyTorch)

import torch
import torch.nn as nn
import torch.optim as optim

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

    def forward(self, inputs):
        # inputs 是上下文词的索引列表,形状为 [context_size]
        embeds = self.embeddings(inputs)  # 形状 [context_size, embedding_dim]
        h = torch.mean(embeds, dim=0)     # 平均得到隐藏层 [embedding_dim]
        out = self.linear(h)              # 输出层 [vocab_size]
        return out

# 示例使用
vocab_size = 10000
embedding_dim = 100
model = CBOW(vocab_size, embedding_dim)
loss_function = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 训练循环示例
for epoch in range(10):
    for context, target in training_data:
        model.zero_grad()
        output = model(context)
        loss = loss_function(output, target)
        loss.backward()
        optimizer.step()

参数影响分析

窗口大小和向量维度是影响 CBOW 模型效果的两个关键参数:

  1. 窗口大小:
  2. 小窗口(2-5)捕获局部语法模式
  3. 大窗口(5-10)捕获更多语义信息
  4. 太大窗口会导致训练变慢且可能引入噪声

  5. 向量维度:

  6. 太低(50-100)可能无法充分表达语义
  7. 太高(300 以上)可能导致过拟合
  8. 通常在 100-300 之间效果最佳

避坑指南

训练 CBOW 模型时常见问题及解决方案:

  1. 训练缓慢:
  2. 使用负采样替代 softmax 全计算
  3. 减小词汇表规模(去掉低频词)
  4. 降低向量维度

  5. 模型不收敛:

  6. 检查学习率是否合适
  7. 尝试 Adam 优化器
  8. 增加训练数据量

  9. 词向量质量差:

  10. 确保数据预处理充分(小写化、去停用词等)
  11. 尝试更大的语料库
  12. 调整超参数组合

思考与延伸

评估词嵌入质量的常用方法:
– 词相似度任务(计算余弦相似度)
– 类比推理任务(如 ”king – man + woman ≈ queen”)
– 下游 NLP 任务中的表现

改进 CBOW 模型的方向:
– 加入 subword 信息
– 结合全局统计信息
– 引入注意力机制

通过本文的学习,你应该已经掌握了 CBOW 模型的核心原理和实现方法。词嵌入是 NLP 的基础技术,理解它的工作原理将为你学习更复杂的语言模型打下坚实基础。

正文完
 0
评论(没有评论)