引言

前面我分析了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=C1​W⋅(i=1∑C​xi​)(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′=1V​exp(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∑V​exp(vwT​j′​⋅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模型相关推荐

  1. 轻松理解skip-gram模型

    引言 在许多自然语言处理任务中,许多单词表达是由他们的tf-idf分数决定的.即使这些分数告诉我们一个单词在一个文本中的相对重要性,但是他们并没有告诉我们单词的语义.Word2vec是一类神经网络模型 ...

  2. AWS AI 全面助力视频理解,GluonCV 0.6 轻松复现前沿模型

    点击我爱计算机视觉标星,更快获取CVML新技术 视频理解是近几年非常流行的研究方向,因为视频是最接近于人眼的真实输入,分析时间序列上的图像变化有助于我们开发更强的计算机视觉.而在视频理解领域,最具代表 ...

  3. 一步步教你轻松学KNN模型算法

    一步步教你轻松学KNN模型算法 ( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解 ...

  4. 理解GloVe模型(+总结)

    文章目录 系列目录(系列更新中) 1.概述 2.统计共现矩阵 3.使用GloVe模型训练词向量 3.1.模型公式 3.2.模型怎么来的 3.3.Glove和skip-gram.CBOW模型对比 4.实 ...

  5. word2vec中的CBOW模型

    模型结构 CBOW模型,中文译为"连续词袋模型",完成的任务是给定中心词  的一定邻域半径(比如半径为2,通常成为windows,窗口,这里窗口的大小为5)内的单词 ,预测输出单词 ...

  6. 理解GloVe模型(Global vectors for word representation)

    理解GloVe模型 概述 模型目标:进行词的向量化表示,使得向量之间尽可能多地蕴含语义和语法的信息. 输入:语料库 输出:词向量 方法概述:首先基于语料库构建词的共现矩阵,然后基于共现矩阵和GloVe ...

  7. mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制

    轻松理解MYSQL MVCC 实现机制 轻松理解MYSQL MVCC 实现机制 #### 1. MVCC简介 ##### 1.1 什么是MVCC MVCC是一种多版本并发控制机制. ##### 1.2 ...

  8. word2vec原理(五):skip-gram和CBOW模型代码实现

    目录 代码一 代码二 第一部分代码对于skip-gram和CBOW模型是通用的,第二部分是实现skip-gram模型的代码. 代码一: import os from six.moves.urllib. ...

  9. 看图轻松理解数据结构与算法系列(合并排序)

    前言 推出一个新系列,<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的 ...

最新文章

  1. 什么是Python?前景怎么样?
  2. java 两个值对换_java将两个整型变量值进行互换的几种实现方法
  3. spring框架学习(三)
  4. html缓存特效代码,HTML特效代码
  5. MySQL 调优/优化的 101 个建议
  6. easyUI的图标设置
  7. [Linux]配置网络
  8. 安装织梦index.php错误,dedecms安装进入后台出现DedeCMS Error:(PHP等
  9. String 转化 list
  10. IOS 企业版发布后,用户通过sarafi浏览器安装无效的解决方案
  11. 直播丨探究Oracle多租户架构
  12. 解决django3.x manage命令makemigrations无法创建数据表
  13. 在创投界有个公开的秘密
  14. 完美运动框架封装函数startMove
  15. 档案盒正面标签制作_如何制作差异化的短视频内容?
  16. 解决a标签下载文件token验证问题
  17. xshell修改服务器登录密码
  18. 01-解决Tomcat中文乱码问题
  19. 城镇化进程中的粮食生产问题
  20. 什么是GC?GC的基本原理

热门文章

  1. 苹果CMS V10详细搭建教程
  2. 【LeetCode】TreeNode
  3. 如何把图片转换为PDF文档
  4. 团队作业之现场UML设计
  5. 都2020年了,你还不会写简洁的Java代码!(转载)
  6. 2020android主流机型,2020安卓旗舰机排行榜-2020超高品质的安卓旗舰机推荐
  7. 苹果 AirPods 耳机总是连到别人的iPhone,如何解决?
  8. linux上传文件夹到hdfs,Linux上传本地文件到Hadoop的HDFS文件系统
  9. 基于VUE框架的网页音乐播放器(可自适应手机布局)
  10. 进制间的相互转换,二进制转十进制,八进制转十进制,十六转十进制