轻松理解CBOW模型
引言
前面我分析了Word2vec的一种模型叫做skip-gram模型。在这篇文章中,我将讲述另一个word2vec模型——连续词袋模型(CBOW)模型。如果你理解skip-gram模型,那么接下来的CBOW模型就更好理解了,因为两者模型互为镜像。我们先来看看CBOW模型与skip-gram模型对比图:
如何,这是不是镜像关系?所以接下来的讲解也会和skip-gram那篇文章极其类似。
前向传播
接下来我们来看下CBOW神经网络模型,CBOW的神经网络模型与skip-gram的神经网络模型也是互为镜像的
在上图中,该模型的输入输出与skip-gram模型的输入输出是相反的。这里输入层是由one-hot编码的输入上下文{x1x_1x1,…,xCx_CxC}组成,其中窗口大小为C,词汇表大小为V。隐藏层是N维的向量。最后输出层是也被one-hot编码的输出单词yyy。被one-hot编码的输入向量通过一个V×NV\times NV×N维的权重矩阵WWW连接到隐藏层;隐藏层通过一个N×VN\times VN×V的权重矩阵W′W^{'}W′连接到输出层。
接下来,我们假设我们知道输入与输出权重矩阵的大小。
- 第一步就是去计算隐藏层hhh的输出。如下:
h=1CW⋅(∑i=1Cxi)(1)h = \frac{1}{C}W\cdot (\sum_{i=1}^C x_i)\tag{$1$}h=C1W⋅(i=1∑Cxi)(1)
该输出就是输入向量的加权平均。这里的隐藏层与skip-gram的隐藏层明显不同。- 第二部就是计算在输出层每个结点的输入。如下:
uj=vwj′T⋅h(2)u_{j}=v^{'T}_{wj}\cdot h\tag{$2$}uj=vwj′T⋅h(2)
其中vwj′Tv^{'T}_{wj}vwj′T是输出矩阵W′W^{'}W′的第jjj列。- 最后我们计算输出层的输出,输出yjy_jyj如下:
yc,j=p(wy,j∣w1,...,wc)=exp(uj)∑j′=1Vexp(u′j)(3)y_{c,j} =p(w_{y,j}|w_1,...,w_c) = \frac{exp(u_{j})}{\sum^V_{j^{'}=1}exp(u^{'}j)}\tag{$3$}yc,j=p(wy,j∣w1,...,wc)=∑j′=1Vexp(u′j)exp(uj)(3)
通过BP(反向传播)算法及随机梯度下降来学习权重
在学习权重矩阵WWW与W′W^{'}W′过程中,我们可以给这些权重赋一个随机值来初始化。然后按序训练样本,逐个观察输出与真实值之间的误差,并计算这些误差的梯度。并在梯度方向纠正权重矩阵。这种方法被称为随机梯度下降。但这个衍生出来的方法叫做反向传播误差算法。
具体推导步骤就不详写了:
- 首先就是定义损失函数,这个损失函数就是给定输入上下文的输出单词的条件概率,一般都是取对数,如下所示:
E=−logp(wO∣wI)(4)E = -logp(w_O|w_I)\tag{$4$}E=−logp(wO∣wI)(4)
=−vwoT⋅h−log∑j′=1Vexp(vwTj′⋅h)(5)= -v_{wo}^T\cdot h-log\sum_{j^{'}=1}^Vexp(v^T_w{_{j^{'}}}\cdot h)\tag{$5$}=−vwoT⋅h−logj′=1∑Vexp(vwTj′⋅h)(5)
接下来就是对上面的概率求导,具体推导过程可以去看BP算法,我们得到输出权重矩阵W′W^{'}W′的更新规则:
w′(new)=wij′(old)−η⋅(yj−tj)⋅hi(6)w^{'(new)} = w_{ij}^{'(old)}-\eta\cdot(y_{j}-t_{j})\cdot h_i\tag{$6$}w′(new)=wij′(old)−η⋅(yj−tj)⋅hi(6)
同理权重WWW的更新规则如下:
w(new)=wij(old)−η⋅1C⋅EH(7)w^{(new)} = w_{ij}^{(old)}-\eta\cdot\frac{1}{C}\cdot EH\tag{$7$}w(new)=wij(old)−η⋅C1⋅EH(7)
参考文献
[1] Mikolov T, Chen K, Corrado G, et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer Science, 2013.(这篇文章就讲了两个模型:CBOW 和 Skip-gram)
[2] Mikolov T, Sutskever I, Chen K, et al. Distributed Representations of Words and Phrases and their Compositionality[J]. 2013, 26:3111-3119.(这篇文章针对Skip-gram模型计算复杂度高的问题提出了一些该进)
[3] Presentation on Word2Vec(这是NIPS 2013workshop上Mikolov的PPT报告)
轻松理解CBOW模型相关推荐
- 轻松理解skip-gram模型
引言 在许多自然语言处理任务中,许多单词表达是由他们的tf-idf分数决定的.即使这些分数告诉我们一个单词在一个文本中的相对重要性,但是他们并没有告诉我们单词的语义.Word2vec是一类神经网络模型 ...
- AWS AI 全面助力视频理解,GluonCV 0.6 轻松复现前沿模型
点击我爱计算机视觉标星,更快获取CVML新技术 视频理解是近几年非常流行的研究方向,因为视频是最接近于人眼的真实输入,分析时间序列上的图像变化有助于我们开发更强的计算机视觉.而在视频理解领域,最具代表 ...
- 一步步教你轻松学KNN模型算法
一步步教你轻松学KNN模型算法 ( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解 ...
- 理解GloVe模型(+总结)
文章目录 系列目录(系列更新中) 1.概述 2.统计共现矩阵 3.使用GloVe模型训练词向量 3.1.模型公式 3.2.模型怎么来的 3.3.Glove和skip-gram.CBOW模型对比 4.实 ...
- word2vec中的CBOW模型
模型结构 CBOW模型,中文译为"连续词袋模型",完成的任务是给定中心词 的一定邻域半径(比如半径为2,通常成为windows,窗口,这里窗口的大小为5)内的单词 ,预测输出单词 ...
- 理解GloVe模型(Global vectors for word representation)
理解GloVe模型 概述 模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息. 输入:语料库 输出:词向量 方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe ...
- mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制
轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...
- word2vec原理(五):skip-gram和CBOW模型代码实现
目录 代码一 代码二 第一部分代码对于skip-gram和CBOW模型是通用的,第二部分是实现skip-gram模型的代码. 代码一: import os from six.moves.urllib. ...
- 看图轻松理解数据结构与算法系列(合并排序)
前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...
最新文章
- 什么是Python?前景怎么样?
- java 两个值对换_java将两个整型变量值进行互换的几种实现方法
- spring框架学习(三)
- html缓存特效代码,HTML特效代码
- MySQL 调优/优化的 101 个建议
- easyUI的图标设置
- [Linux]配置网络
- 安装织梦index.php错误,dedecms安装进入后台出现DedeCMS Error:(PHP等
- String 转化 list
- IOS 企业版发布后,用户通过sarafi浏览器安装无效的解决方案
- 直播丨探究Oracle多租户架构
- 解决django3.x manage命令makemigrations无法创建数据表
- 在创投界有个公开的秘密
- 完美运动框架封装函数startMove
- 档案盒正面标签制作_如何制作差异化的短视频内容?
- 解决a标签下载文件token验证问题
- xshell修改服务器登录密码
- 01-解决Tomcat中文乱码问题
- 城镇化进程中的粮食生产问题
- 什么是GC?GC的基本原理