基于连续词袋模型(CBOW)的Word2Vec词向量训练算法详解
字数 1311 2025-11-16 06:38:48
基于连续词袋模型(CBOW)的Word2Vec词向量训练算法详解
我将为您详细讲解Word2Vec中的CBOW模型,这是一个重要的词向量学习算法。
📌 算法概述
CBOW(Continuous Bag-of-Words)是Word2Vec的两种主要架构之一,其核心思想是通过上下文词语来预测中心词。与Skip-gram模型相反,CBOW是用周围的词来预测中间的词。
🔄 算法流程详解
- 数据预处理
首先对原始文本进行预处理:
- 分词:将文本分割成单词序列
- 构建词汇表:统计所有单词的出现频率,并为每个单词分配唯一索引
- 去除低频词:通常过滤掉出现次数少于某个阈值的单词
- 训练样本构建
对于文本序列中的每个位置,构建(上下文,中心词)训练对:
- 设定窗口大小(如5):中心词前后各取2个词
- 示例:"the quick brown fox jumps"中,如果中心词是"brown",则上下文为["the", "quick", "fox", "jumps"]
- 模型架构详解
输入层:
- 上下文词语的one-hot编码向量
- 向量维度等于词汇表大小V
- 每个词语对应一个维度为1,其他为0的稀疏向量
投影层(隐藏层):
- 将多个上下文词的one-hot向量通过共享的权重矩阵W(V×N维)映射到低维空间
- 计算方式:对上下文词的向量取平均后乘以权重矩阵
- 数学表达:h = (1/C) × Wᵀ × (∑xᵢ),其中C是上下文词数量
输出层:
- 通过第二个权重矩阵W'(N×V维)将隐藏层向量映射回词汇表空间
- 计算得分向量:u = W'ᵀ × h
- 应用softmax函数得到每个词作为中心词的概率分布
- 训练过程
前向传播:
- 输入上下文词的one-hot向量
- 计算隐藏层向量h
- 计算输出得分u
- 通过softmax得到概率分布:P(w_c|w_{context}) = exp(u_c) / ∑exp(u_j)
损失函数:
- 使用交叉熵损失:L = -log(P(w_c|w_{context}))
- 其中w_c是真实的中心词
反向传播:
- 计算输出层的误差梯度
- 通过链式法则反向传播误差
- 更新权重矩阵W和W'
- 优化技巧
层次softmax:
- 使用霍夫曼树来组织词汇表
- 将复杂度从O(V)降低到O(logV)
- 高频词拥有更短的路径
负采样:
- 随机采样K个负样本(非目标词)
- 优化目标:最大化正样本概率,最小化负样本概率
- 损失函数:logσ(v'{w_O}ᵀh) + ∑logσ(-v'{w_i}ᵀh)
- 词向量提取
训练完成后:
- 权重矩阵W的每一行对应一个词的词向量
- 这些向量捕获了词语的语义和语法信息
- 相似词在向量空间中位置接近
✨ 算法特点
优点:
- 训练效率高,特别是使用优化方法后
- 对高频词的处理效果更好
- 能够很好地捕获词语的语义相似性
缺点:
- 对罕见词的处理相对较差
- 无法很好地处理一词多义现象
🔍 实际应用
CBOW训练出的词向量广泛应用于:
- 文本分类的特征输入
- 推荐系统的物品表示
- 问答系统的语义匹配
- 机器翻译的词语对齐
这个算法通过简单的神经网络结构,有效地学习了词语的分布式表示,为后续的深度学习模型奠定了基础。