cbow模型详解_老C模型

cbow模型详解_老C模型引言前面我分析了Word2vec的一种模型叫做skip-gram模型。在这篇文章中,我将讲述另一个word2vec模型——连续词袋模型(CBOW)模型。如果你理解skip-gram模型,那么接下来的CBOW模型就更好理解了,因为两者模型互为镜像。我们先来看看CBOW模型与skip-gram模型对比图:如何,这是不是镜像关系?所以接下来的讲解也会和skip-gram那篇文章极其类似。前向传播接

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

引言

前面我分析了Word2vec的一种模型叫做skip-gram模型。在这篇文章中,我将讲述另一个word2vec模型——连续词袋模型(CBOW)模型。如果你理解skip-gram模型,那么接下来的CBOW模型就更好理解了,因为两者模型互为镜像。我们先来看看CBOW模型与skip-gram模型对比图:
word2vec
如何,这是不是镜像关系?所以接下来的讲解也会和skip-gram那篇文章极其类似。

前向传播

接下来我们来看下CBOW神经网络模型,CBOW的神经网络模型与skip-gram的神经网络模型也是互为镜像的
cbownero
在上图中,该模型的输入输出与skip-gram模型的输入输出是相反的。这里输入层是由one-hot编码的输入上下文{
x 1 x_1 x1,…, x C x_C xC}组成,其中窗口大小为C,词汇表大小为V。隐藏层是N维的向量。最后输出层是也被one-hot编码的输出单词 y y y。被one-hot编码的输入向量通过一个 V × N V\times N V×N维的权重矩阵 W W W连接到隐藏层;隐藏层通过一个 N × V N\times V N×V的权重矩阵 W ′ W^{‘} W连接到输出层。
接下来,我们假设我们知道输入与输出权重矩阵的大小。

  • 第一步就是去计算隐藏层 h h h的输出。如下:
    h = 1 C W ⋅ ( ∑ i = 1 C x i ) ( 1 ) h = \frac{1}{C}W\cdot (\sum_{i=1}^C x_i)\tag{$1$} h=C1W(i=1Cxi)(1)
    该输出就是输入向量的加权平均。这里的隐藏层与skip-gram的隐藏层明显不同。
  • 第二部就是计算在输出层每个结点的输入。如下:
    u j = v w j ′ T ⋅ h ( 2 ) u_{j}=v^{‘T}_{wj}\cdot h\tag{$2$} uj=vwjTh(2)
    其中 v w j ′ T v^{‘T}_{wj} vwjT是输出矩阵 W ′ W^{‘} W的第 j j j列。
  • 最后我们计算输出层的输出,输出 y j y_j yj如下:
    y c , j = p ( w y , j ∣ w 1 , . . . , w c ) = e x p ( u j ) ∑ j ′ = 1 V e x p ( 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,jw1,...,wc)=j=1Vexp(uj)exp(uj)(3)

通过BP(反向传播)算法及随机梯度下降来学习权重

在学习权重矩阵 W W W W ′ W^{‘} W过程中,我们可以给这些权重赋一个随机值来初始化。然后按序训练样本,逐个观察输出与真实值之间的误差,并计算这些误差的梯度。并在梯度方向纠正权重矩阵。这种方法被称为随机梯度下降。但这个衍生出来的方法叫做反向传播误差算法。
具体推导步骤就不详写了:

  • 首先就是定义损失函数,这个损失函数就是给定输入上下文的输出单词的条件概率,一般都是取对数,如下所示:
    E = − l o g p ( w O ∣ w I ) ( 4 ) E = -logp(w_O|w_I)\tag{$4$} E=logp(wOwI)(4)
    = − v w o T ⋅ h − l o g ∑ j ′ = 1 V e x p ( v w T j ′ ⋅ h ) ( 5 ) = -v_{wo}^T\cdot h-log\sum_{j^{‘}=1}^Vexp(v^T_w{_{j^{‘}}}\cdot h)\tag{$5$} =vwoThlogj=1Vexp(vwTjh)(5)
    接下来就是对上面的概率求导,具体推导过程可以去看BP算法,我们得到输出权重矩阵 W ′ W^{‘} W的更新规则:
    w ′ ( n e w ) = w i j ′ ( o l d ) − η ⋅ ( y j − t j ) ⋅ h i ( 6 ) w^{‘(new)} = w_{ij}^{‘(old)}-\eta\cdot(y_{j}-t_{j})\cdot h_i\tag{$6$} w(new)=wij(old)η(yjtj)hi(6)
    同理权重 W W W的更新规则如下:
    w ( n e w ) = w i j ( o l d ) − η ⋅ 1 C ⋅ E H ( 7 ) w^{(new)} = w_{ij}^{(old)}-\eta\cdot\frac{1}{C}\cdot EH\tag{$7$} w(new)=wij(old)ηC1EH(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报告)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196242.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 进程调度算法c语言实现_进程调度算法有哪些

    进程调度算法c语言实现_进程调度算法有哪些对一个非抢占式多道批处理系统采用以下算法的任意两种,实现进程调度,并计算进程的开始执行时间,周转时间,带权周转时间,平均周转时间,平均带权周转时间1.先来先服务算法2.短进程优先算法*3.高响应比优先算法三、设计思想每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间…

    2022年9月29日
    1
  • IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总「建议收藏」

    1、引言IM应用的初学者们,在补全了各种基础技术知识后(如果您仍不具备这些知识,建议马上阅读《新手入门一篇就够:从零开发移动端IM》),在动手编码实践时,很多时候纠结的并不是功能该如何实现,而是这个功能该实现成什么样(没有经验,我特玛能找谁问问?)。比如,最常见的纠结有以下这些:1)离线聊天消息该保存多久?2)好友请求应该保存多久?3)短视频消息中的视频时长设为多大合适?4…

    2022年4月9日
    91
  • idea文档注释设置_eclipse添加方法注释模板

    idea文档注释设置_eclipse添加方法注释模板IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。这里设置的注释模板采用Eclipse的格式,下面先贴出Eclipse的注释模板,我们就按照这种格式来设置:类注释模板:…

    2022年10月12日
    0
  • java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例

    java queue toarray_Java PriorityBlockingQueue toArray()用法及代码示例toArray()PriorityBlockingQueue的toArray方法用于以适当的顺序创建一个数组,该数组具有与此PriorityBlockingQueue相同的元素。实际上,此方法将所有元素从PriorityBlockingQueue复制到新数组。此方法充当数组和PriorityBlockingQueue之间的桥梁。用法:publicObject[]toArray()返回值:此方法…

    2022年5月14日
    32
  • 浅析Promise用法[通俗易懂]

    浅析Promise用法[通俗易懂]浅析Promise用法要理解Promise要知道没有Promise的回调地狱如何插入一段漂亮的代码片Promise语法与then的用法所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。Promis…

    2022年6月19日
    28
  • jquery nextsibling_javascript中预编译

    jquery nextsibling_javascript中预编译JavaScript中的nextSibling和previousSibling和作用类似于jquery的next()和prev(),都是获取下一个/上一个同胞元素,如果下一个同级节点不存在,则此属性返

    2022年8月2日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号