Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析

1. CBOW模型概述

CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说,给定当前单词的上下文单词,通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。

2. 模型结构

CBOW模型的结构如下:

  • 输入层:输入为上下文单词的one-hot编码表示。
  • 隐藏层:对输入的上下文单词向量进行平均,得到上下文向量。
  • 输出层:通过一个 softmax 层预测当前单词的概率分布。

3. 符号定义

假设有一个词汇表,大小为 V V V,表示为 W = { w 1 , w 2 , . . . , w V } W = \{w_1, w_2, ..., w_V\} W={w1,w2,...,wV}。对于每个单词 w i w_i wi,定义以下符号:

  • x ( i ) x^{(i)} x(i): 输入的one-hot编码向量,维度为 V × 1 V \times 1 V×1,仅在第 i i i 个位置为1,其余为0。
  • v i v_i vi: 输入词向量,维度为 N × 1 N \times 1 N×1,即嵌入层的参数。
  • u i u_i ui: 输出词向量,维度为 N × 1 N \times 1 N×1,即 softmax 层的参数。

4. 模型训练流程

假设当前单词为 w o w_o wo,其上下文窗口大小为 C C C,则上下文单词序列为 w o − C , w o − C + 1 , . . . , w o − 1 , w o + 1 , . . . , w o + C w_{o-C}, w_{o-C+1}, ..., w_{o-1}, w_{o+1}, ..., w_{o+C} wo−C,wo−C+1,...,wo−1,wo+1,...,wo+C。

4.1 输入表示

将上下文单词的one-hot编码向量拼接起来,表示为:

X = x ( o − C ) , x ( o − C + 1 ) , . . . , x ( o − 1 ) , x ( o + 1 ) , . . . , x ( o + C ) X = x\^{(o-C)}, x\^{(o-C+1)}, ..., x\^{(o-1)}, x\^{(o+1)}, ..., x\^{(o+C)} X=x(o−C),x(o−C+1),...,x(o−1),x(o+1),...,x(o+C)

4.2 隐藏层表示

CBOW模型对上下文单词的向量表示进行平均,得到上下文向量 h h h:

h = 1 2 C ∑ c = 1 C ( v o − c + v o + c ) h = \frac{1}{2C} \sum_{c=1}^{C} (v_{o-c} + v_{o+c}) h=2C1c=1∑C(vo−c+vo+c)

其中, v o − c v_{o-c} vo−c 和 v o + c v_{o+c} vo+c 分别表示上下文单词 w o − c w_{o-c} wo−c 和 w o + c w_{o+c} wo+c 的输入词向量。

4.3 输出层表示

通过 softmax 层计算当前单词 w o w_o wo 出现的概率:

P ( w o ∣ c o n t e x t ) = exp ⁡ ( u o T h ) ∑ k = 1 V exp ⁡ ( u k T h ) P(w_o | context) = \frac{\exp(u_o^T h)}{\sum_{k=1}^{V} \exp(u_k^T h)} P(wo∣context)=∑k=1Vexp(ukTh)exp(uoTh)

其中, u o u_o uo 为当前单词 w o w_o wo 的输出词向量。

4.4 损失函数

定义损失函数为负对数似然函数:

L = − log ⁡ P ( w o ∣ c o n t e x t ) = − u o T h + log ⁡ ∑ k = 1 V exp ⁡ ( u k T h ) L = -\log P(w_o | context) = -u_o^T h + \log \sum_{k=1}^{V} \exp(u_k^T h) L=−logP(wo∣context)=−uoTh+logk=1∑Vexp(ukTh)

目标是通过梯度下降算法最小化损失函数 L L L。

5. 模型训练

通过反向传播算法计算损失函数 L L L 对模型参数 v i v_i vi 和 u i u_i ui 的梯度,并更新参数:

v i ← v i − η ∂ L ∂ v i v_i \leftarrow v_i - \eta \frac{\partial L}{\partial v_i} vi←vi−η∂vi∂L

u i ← u i − η ∂ L ∂ u i u_i \leftarrow u_i - \eta \frac{\partial L}{\partial u_i} ui←ui−η∂ui∂L

其中, η \eta η 为学习率。

5.1 梯度计算

首先计算输出层的梯度:

∂ L ∂ u o = h − x o \frac{\partial L}{\partial u_o} = h - x_o ∂uo∂L=h−xo

∂ L ∂ u k = h ⋅ exp ⁡ ( u k T h ) ∑ j = 1 V exp ⁡ ( u j T h ) ( k ≠ o ) \frac{\partial L}{\partial u_k} = h \cdot \frac{\exp(u_k^T h)}{\sum_{j=1}^{V} \exp(u_j^T h)} \quad (k \neq o) ∂uk∂L=h⋅∑j=1Vexp(ujTh)exp(ukTh)(k=o)

其中, x o x_o xo 为当前单词 w o w_o wo 的one-hot编码向量。

然后计算隐藏层的梯度:

∂ L ∂ h = ∑ k = 1 V u k ⋅ ∂ L ∂ u k \frac{\partial L}{\partial h} = \sum_{k=1}^{V} u_k \cdot \frac{\partial L}{\partial u_k} ∂h∂L=k=1∑Vuk⋅∂uk∂L

最后计算输入层的梯度:

∂ L ∂ v i = 1 2 C ⋅ ∂ L ∂ h ( i = o − C , o − C + 1 , . . . , o − 1 , o + 1 , . . . , o + C ) \frac{\partial L}{\partial v_i} = \frac{1}{2C} \cdot \frac{\partial L}{\partial h} \quad (i = o-C, o-C+1, ..., o-1, o+1, ..., o+C) ∂vi∂L=2C1⋅∂h∂L(i=o−C,o−C+1,...,o−1,o+1,...,o+C)

6. 词向量获取

训练完成后,输入词向量 v i v_i vi 即为单词 w i w_i wi 的分布式表示。

7.总结

总而言之,CBOW是采取拿多个训练一个的思想。比如,现在有一串文本text = "abcdeadebcdae...",统计出里面只有a,b,c,d,e这五个独一无二的'字'。想要训练'字'与'字'之间的关联(比如"吃"和"饭"这两个词有关联,有时"睡觉"和"午休"这两个词可以相近表示,想要实现这个,就可以使用CBOW方法来实现。)

相关推荐
TMT星球38 分钟前
虎鲸文娱春苗编剧计划全面升级,已孵化20个剧本进入前期开发
大数据·人工智能
奔跑中的小象7 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南7 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang7 小时前
LangGraph 状态机实战
人工智能
刹那芳华19927 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作8 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门8 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜8 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟8 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦8 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能