1.7-自然语言的分布式表示-skip-gram模型代码实现

news2025/1/11 11:50:46

文章目录

  • 1 skip-gram模型的实现
    • 1.1模型结构的实现
    • 1.2前向传播的实现
    • 1.3反向传播的实现
  • 2 skip-gram模型的计算与学习
  • 3总结

  1. 书上提供了skip-gram模型的代码实现,但是没有去讲解;这里我们自己来看看他提供的代码;
  2. 看代码的时候,尤其注意他和前面所说的CBOW模型在实现上的区别;
  3. 这里也提供了一份完整的副本:https://1drv.ms/u/s!AvF6gzVaw0cNjqFRa39YunPQdYGINQ?e=o8BLSu;

1 skip-gram模型的实现

1.1模型结构的实现

  1. 下图为skip-gram模型与CBOW模型在模型结构实现上的代码对比:

    在这里插入图片描述

    1. 都是使用 w i n w_{in} win w o u t w_{out} wout作为输入侧和输出侧的权重矩阵;

    2. skip-gram模型输入是中间的目标词,因此只需要一个输入层来处理一个单词即可

    3. 从前面讲述的skip-gram模型的网络结构来看(即下图),因为要预测的是上下文,所以输出侧多次使用了 w o u t w_{out} wout;但是在代码实现上,也只是构建了一个out_layer;可以不可以构建两个out_layer(这两个out_layer共享权重 w o u t w_{out} wout)呢?

      在这里插入图片描述

      1. 答案是可以的,这两种方式在前向计算时应该是没有区别的,效果一样;区别主要在于反向传播的时候
      2. 使用一个out_layer,由于后面计算损失还是要计算两次然后损失相加,因此反向传播时当计算完两个损失的分支之后,需要先累加两路分支的梯度,然后再经过out_layer层的反向传播计算 w o u t w_{out} wout的梯度;即先累加损失分支的梯度,再求 w o u t w_{out} wout的梯度;
      3. 使用两个out_layer,则每个损失反向传播结束后,分别进入各自的out_layer层进行反向传播,得到各路分支对各自层的 w o u t w_{out} wout​的梯度;此时就需要模仿CBOW模型在训练时的处理,即需要将共享权重的梯度进行整合,也即将这些梯度累加。
    4. Skip-gram模型的损失计算层有两个(前提是上下文窗口大小为1),而CBOW模型的损失计算层只有一个,因为目标词就是它的预测目标;

    5. 其余内容一样:梯度和参数的整理等

1.2前向传播的实现

  1. 两个模型的前向计算过程对比如下图所示:

    在这里插入图片描述

    1. 注意此时Skip-gram模型的输入是target,即目标词;这与CBOW模型不同
    2. CBOW由于有两个输入层,因此两个输入层计算好之后需要相加再平均才能得到中间层的结果;而Skip-gram模型则是一步到位;
    3. 中间层到输入层一样,因为在代码实现上两者都是一个out_layer
    4. CBOW模型只需要计算一个损失即可;Skip-gram模型则使用了两次输出,分别与上下文单词计算了损失,并求和作为最终损失;

1.3反向传播的实现

  1. 两个模型的反向传播计算过程对比如下图所示:

    在这里插入图片描述

    1. CBOW模型只有一个损失层,所以反向传播只计算一次;而Skip-gram模型有两个损失计算层,所以计算了两个;且根据前向传播计算图,模型输出形成两路分支来计算两个损失,因此反向传播到这个分支处时,梯度需要累加;所以out_layer的输出侧的梯度是ds = dl1 + dl2
    2. 之后的反向传播过程两个模型一样;

2 skip-gram模型的计算与学习

  1. 实现skip-gram模型的前向计算的代码与CBOW相差无几,两者的对比如下:

    在这里插入图片描述

  2. skip-gram模型的训练和学习的实现:

    1. 这里没有专门去写这部分的代码,但是基本上都和CBOW模型的训练过程类似;

    2. 要说区别的话,其实就是少了一个梯度整合的过程,因为这里我们只用了一个输入层权重和输出层权重,不存在权重共享的情况;

      在这里插入图片描述

3总结

  1. 目前学习到的CBOW模型和skip-gram模型都是基于推理的方法,说白了就是神经网络的方法;和书上一样,我们再来总结一下这两类方法;
  2. 基于计数的方法通过 对整个语料库的统计数据进行一次学习(其实就是统计了)来获得单词的分布式表示,而基于推理的方法是通过神经网络进行学习,这个学习除了学习到单词的分布式表示,其实还可以学习到一些模式;
    1. 因此,当语料库发生变化时,基于计数的方法的成本问题就出现了
    2. 而基于推理的方法, 可以通过mini-batch的学习,实现增量学习,进一步更新模型的参数,成本较低;

-----------以下是书上原话-------------

  1. 但是,不是说基于推理的方法就是优于基于计数的方法,实际上,有研究表明,就单词相似性的定量评价而言,基于推理的方法和基于计数的方法难分上下
  2. 基于推理的方法和基于计数的方法存在关联性
    1. 具体地说,使用了 skip-gram 和下一章介绍的 Negative Sampling 的模型被证明与对整个语料库的共现矩阵(实际上会对矩阵进行一定的修改)进行特殊矩阵分解的方法具有相同的作用;即这两种方法在某些条件下是相通的,详见论文;
  3. GloVe方法融合了基于推理的方法和基于计数的方法。该方法的思想是,将整个语料库的统计数据的信息纳入损失函数,进行 mini-batch 学习。据此,这两个方法论成功地被融合在了一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yarn不同操作系统的安装与配置

Yarn 是一个快速、可靠且安全的依赖包管理工具,用于替代 npm。以下是在不同操作系统上安装和配置 Yarn 的步骤。 1. 安装 Node.js 在安装 Yarn 之前,请确保已经安装了 Node.js,因为 Yarn 需要 Node.js 环境。你可以在 Node.js — Run JavaSc…

极简通俗VAE

一、VAE 背景:VAE什么变分自编码器,听起来起名都头大,用大白话告诉你。 把一个复杂图片压缩成两个参数,用这个参数采样再复原。 这个简单的东西是两个参数,均值和方差,用(0,1&…

15kg级弹簧刀高速巡飞无人机技术详解

弹簧刀高速巡飞无人机,作为一种先进的战术导弹系统,融合了无人机与导弹的双重特性,成为了现代战争中不可或缺的侦察与打击利器。该无人机以其小巧的外形设计、优异的性能表现和广泛的适用领域,受到了全球军事领域的广泛关注。弹簧…

ChatGPT如何应用在谷歌seo?

ChatGPT在提升博客和创作效率方面非常有用。它可以帮助你快速生成吸引人的标题,确保内容第一眼就能抓住读者的注意力。不仅如此,ChatGPT还能根据你的主题生成详细的文章提纲,让你在写作时思路更加清晰。关键词优化也是它的强项,可…

当《开心消消乐》遇上 AI 推理,我们找到了高质量关卡背后的原因!

随着 AI 热潮席卷各行各业,其落地应用已经成为企业技术研发升级的工作重心。人工智能应用的升级不仅需要软件层面的升级迭代,还需要大规模基础设施的支撑。然而,自行搭建大规模算力、存储基础设施对于大多数企业而言都存在技术难度、人力资源…

OpenSSL的一些使用案例

目录 一、介绍 二、基本使用 1、Shell (1)文件加解密 (2)生成密钥文件 2、API (1)md5sum (2)AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法,只…

【IA修补一切】Inpaint Anything: Segment Anything Meets Image Inpainting论文解读

作者来自中国科学技术大学和东部高级研究院。文章提出了一个新的图像修复工具“Inpaint Anything (IA)”,它结合了不同的视觉模型,如Segment Anything Model (SAM)、LaMa、Stable Diffusion (SD)等,以实现更高级的图像编辑功能。 论文&#x…

P3374 【模板】树状数组 1

题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某一个数加上 𝑥x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 𝑛,𝑚n,m,分别表示该数列数字的个数和操作的总个数。 …

【MySQL】表的操作{创建/查看/修改/删除}

文章目录 1.创建表1.1comment:注释信息1.2存储引擎 2.查看表3.修改表3.1add添加列,对原数据无影响3.2drop删除列3.3modify修改列类型3.4change修改列名3.5rename [to]修改表名 4.删除表5.总结 1.创建表 CREATE TABLE table_name (field1 datatype,field…

springboot医院门诊挂号系统-计算机毕业设计源码033123

目 录 摘要 1 绪论 1.1研究背景及意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2 医院门诊挂号系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.3.2数据修改流程 2.3.3数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.…

第一百三十八节 Java数据类型教程 - Java boolean数据类型和float数据类型

Java数据类型教程 - Java boolean数据类型 布尔数据类型只有两个有效值:true和false。 这两个值称为布尔值字面量。 我们可以使用布尔值字面量 boolean done; // Declares a boolean variable named done done true; // Assigns true to done布尔变量不能转换为任何其他…

什么是分库分表?它有哪些实现类型?

假如你正在使用关系型数据库开发一款健康类系统。业务发展很好,系统有很多活跃的新老用户,这些用户会和平台的医生团队进行交互,每天可能会生成数万甚至数十万级别的业务数据。这样的话,随着数据量越来越大,系统中的某…

如何选择易用性高的项目管理软件?

随着项目管理在各行各业的广泛应用,选择一款易用性高的项目管理软件变得越来越重要。易用性高的软件可以帮助企业提高工作效率,降低管理成本,同时还能提升团队之间的协作能力。那么,如何选择一款易用性高的项目管理软件呢&#xf…

C++ Linux调试(无IDE)

跨平台IDE编译调试C很方便,如QTCreate 、VSCode、Eclipse等,但是如果只能使用Shell控制台呢,gdb调试的优势就很明显了,在没有IDE的情况下,这个方式最有效。因为上手不是很难,特此整理 参考链接 目录 1、G…

边缘网关在实际应用中的价值与挑战-天拓四方

随着物联网、大数据和人工智能等技术的快速发展,边缘计算逐渐崭露头角,成为推动数字化转型的关键力量。而边缘网关,作为边缘计算的核心组成部分,其重要性不言而喻。本文将以某智能制造企业为例,结合数据分析&#xff0…

MySQL高级-MVCC- readview介绍

文章目录 1、介绍2、ReadView中包含了四个核心字段:3、版本链数据的访问规则:4、不同的隔离级别,生成ReadView的时机不同: 1、介绍 ReadView(读视图)是 快照读 SQL执行时MVCC提取数据的依据,记录…

微信小程序订单发货管理接入

订单发货管理接入指引:https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetannouncement&key11671435333v04b2&version1&langzh_CN&platform2https://mp.weixin.qq.com/cgi-bin/announce?token1148555877&actiongetann…

Redis基础教程(十):HyperLogLog

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

掌握IP代理API提取技巧,让你的网络操作更高效!

IP代理在现代网络中扮演着越来越重要的角色。今天,我们将深入探讨IP代理的API提取知识,帮助大家更好地理解和应用这一技术。 IP代理API是什么? IP代理API是提供IP代理服务的接口,允许开发者通过编程方式自动获取和管理代理IP。通…

土壤养分检测仪——助力农田监测

在现代化的农业生产中,精准施肥、科学种植已成为提升作物产量与品质的关键。为了实现这一目标,土壤养分检测仪成为了农田科技的得力助手。这款仪器不仅配备了成品药剂和检测器材,还能在现场进行快速测定,广泛应用于农田土壤养分的…