当前位置: 首页 > article >正文

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} woC,woC+1,...,wo1,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(oC),x(oC+1),...,x(o1),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=1C(voc+vo+c)

其中, v o − c v_{o-c} voc v o + c v_{o+c} vo+c 分别表示上下文单词 w o − c w_{o-c} woc 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(wocontext)=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(wocontext)=uoTh+logk=1Vexp(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} viviηviL

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

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

5.1 梯度计算

首先计算输出层的梯度:

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

∂ 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) ukL=hj=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} hL=k=1VukukL

最后计算输入层的梯度:

∂ 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) viL=2C1hL(i=oC,oC+1,...,o1,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方法来实现。)

在这里插入图片描述


http://www.kler.cn/a/507706.html

相关文章:

  • Kotlin语言的数据库交互
  • AAPM:基于大型语言模型代理的资产定价模型,夏普比率提高9.6%
  • 回归预测 | MATLAB实SVM支持向量机多输入单输出回归预测
  • Linux 进程前篇(冯诺依曼体系结构和操作系统)
  • 《Compact Convolutional Transformers:开启计算机视觉新篇》
  • 优化 Vue项目中 app.js 文件过大,初始化加载过慢、带宽占用过大等问题
  • (2)Elasticsearch8.17的web管理工具:kibana
  • Vue3 Element-Plus el-tree 右键菜单组件
  • 案例 —— 怪物出水
  • 【绝对无坑】Mongodb获取集合的字段以及数据类型信息
  • 没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放
  • AI生成文档——Uni-App CSS 样式开发指南
  • JS宏实例:自创FS对象读取文本文件或CSV文件数据
  • 一、1-2 5G-A通感融合基站产品及开通
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)
  • CTE与临时表:优劣势对比及使用场景分析
  • 简明docker快速入门并实践方法
  • 代码随想录算法训练营day23(0116)
  • 纯代码实现给WordPress添加文章复制功能
  • C#实现字符串反转的4种方法
  • openharmony/build/README_zh.md学习
  • 查找某个年龄段的用户信息TCP头格式为什么需要 TCP 协议? TCP 工作在哪一层?
  • Spring Boot 条件注解:@ConditionalOnProperty 完全解析
  • 整数的分离与合成
  • DNS介绍(3):应用场景
  • 数据结构之哈希表详解