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.rhkb.cn/news/3899.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第22篇 基于ARM A9处理器用汇编语言实现中断<四>

Q:怎样编写ARM A9处理器汇编语言代码配置使用按键和定时器中断? A:本次实验同样为中断模式和监督模式都设置ARM A9堆栈指针,并使能中断,此外在主程序中调用子程序CONFIG_HPS_TIMER和CONFIG_KEYS分别对HPS Timer 0&…

后盾人JS -- 好用的 JavaScript Symbol 类型

Symbol使用场景介绍 举个例子,当leader让你去机房取某个电脑的时候,机房那么多电脑,你怎么知道取哪个 所以这个时候symbol的作用就显现出来了(上面有什么贴纸的,什么型号的电脑) 声明定义Symbol的几种方…

反转字符串中的单词 II:Swift 实现与详解

网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…

JVM相关面试题

一、JVM是什么: Java Virtual Machine,Java的运行环境(java二进制字节码的运行环境);一次编写、到处运行;自动管理内存,提供垃圾回收机制 JVM的组成部分、运行流程: 二、JVM的组成: 1.程序计数器: 程序计数器是线程私有的,内部…

【蜂巢——方向,数学】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; int dx[6] {-1, -1, 0, 1, 1, 0}; int dy[6] {0, 1, 1, 0, -1, -1}; void cal(int d, int p, int q, int& x, int& y) {x p * dx[d];y p * dy[d];d (d 2) % 6;x q * dx[d];…

使用 Thermal Desktop 进行航天器热分析

介绍 将航天器保持在运行温度下的轨道上是一个具有挑战性的问题。航天器需要处理太空非常寒冷的背景温度&#xff0c;同时还要管理来自内部组件、地球反照率和太阳辐射的高热负荷。航天器在轨道上可以进行的各种轨道机动使解决这个问题变得更加复杂。 Thermal Desktop 是一款…

【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程

1. 简介 前面一篇讲了WiFi的基站模式&#xff0c;演示了怎么编程连接AP&#xff0c;所以这一篇讲一讲AP模式&#xff0c;ESP32作AP&#xff0c;让其他的设备连接自己。 1.1 DHCP 这里需要补充一个知识点——DHCP服务器。当基站连接一个AP时&#xff0c;会被分配一个IP&#xf…

nss刷题3

[SWPUCTF 2022 新生赛]webdog1__start level1&#xff1a; 打开环境后什么也&#xff0c;没有&#xff0c;查看源码&#xff0c;看到第一关是MD5值&#xff0c;要get传参web&#xff0c;然后web的值的MD5和它原来值相等&#xff0c;0e开头的字符在php中都是0&#xff0c;传入…

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤&#xff1a; 1.打开vs&#xff0c;创建一个新项目&#xff0c;分别在搜素框中选择C#、Windows、桌面&#xff0c;然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”&#xff0c;右键单击“数据连接”&#xff0…

用户中心项目教程(二)---umi3的使用出现的错误

目录 1.情况的说明 2.遇到的问题 1&#xff09;第一个问题-关于npx的使用 2&#xff09;第二个问题--unsupport问题 3&#xff09;第三个收获--nodejs安装问题 4&#xff09;第四个收获---nvm下载问题 5&#xff09;第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…

讲一下ZooKeeper的持久化机制?

大家好&#xff0c;我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲一下ZooKeeper的持久化机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…

【青蛙过河——思维】

题目 图解 代码 #include <bits/stdc.h> using namespace std; const int N 1e510; int n, x; int h[N]; bool check(int mid) {for(int i 1; i mid - 1 < n; i)if(h[i mid - 1] - h[i - 1] < 2 * x) return false;return true; } int main() {cin >> …

港湾周评|万科的多重压力

《港湾商业观察》李镭 成立于1984年&#xff0c;经营了41年之久的行业模范生与明星房企&#xff0c;万科&#xff08;000002.SZ&#xff1b;02202.HK&#xff09;似乎从未遇到过这样的惊天骇浪。 一方面债务承压&#xff0c;2025年是否能妥善解决&#xff0c;又或是终将“暴雷…

搜维尔科技:Xsens人形机器人解决方案的优势

Xsens 致力于推动人形机器人技术的发展&#xff0c;塑造机器人与人类环境无缝融合的未来&#xff0c;通过创新精确和协作&#xff0c;协助生产和服务&#xff0c;改善人类生活和产业。 Xsens通过人形跟随捕捉详细的人体运动数据&#xff0c;使机器人能够学习类人的动作&#x…

LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145185794 Scaling Laws (缩放法则) 是大模型领域中&#xff0c;用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律…

数组常见解决方案

数组常见解决方案 1.快慢指针(双指针) 慢指针记录当前位置 快指针寻找下一个符合条件的数 当符合条件时,此数将slow位置的数覆盖,slow指针指向下一个位置. 最后slow的位置就是符合条件的数组的长度. 80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff09; …

智能学习平台系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…

前端项目搭建和基础配置

这个模块主要是介绍从零开始搭建项目的一些操作&#xff0c;包含一些前端常用的配置&#xff0c;这里只是一部分&#xff0c;会在后续的文章中逐步进行补充和完善 一、创建项目 在项目路径下使用以下命令生成前后端项目 npm create vite输入项目名称&#xff0c;框架选择Vue…

RC2在线加密工具

RC2是由著名密码学家Ron Rivest设计的一种传统对称分组加密算法&#xff0c;它可作为DES算法的建议替代算法。RC2是一种分组加密算法&#xff0c;RC2的密钥长度可变&#xff0c;可以从8字节到128字节&#xff0c;安全性选择更加灵活。 开发调试上&#xff0c;有时候需要进行对…

Qt Desiogn生成的ui文件转化为h文件

1.找到这个工具 2.查找到ui文件以及要转化为的h文件的路径。 3.在1中的工具输入uic /xx/xxx.ui -o /xx/xxx.h即可得到结果。