《深度学习进阶 自然语言处理》第四章:Embedding层和负采样介绍

news2025/1/15 6:25:50

文章目录

      • 4.1 word2vec的改进一
        • 4.1.1 Embedding层
      • 4.2 word2vec的改进二
        • 4.2.1 中间层之后的计算问题
        • 4.2.2 从多分类到二分类
        • 4.2.3 负采样
      • 总结


之前文章链接:

开篇介绍:《深度学习进阶 自然语言处理》书籍介绍
第一章:《深度学习进阶 自然语言处理》第一章:神经网络的复习
第二章:《深度学习进阶 自然语言处理》第二章:自然语言和单词的分布式表示
第三章:《深度学习进阶 自然语言处理》第三章:word2vec

上一章我们学习了word2vec的机制,并实现了简单的2层神经网络的CBOW模型。目前的实现存在的最大问题是,随着语料库中要处理的词汇量的增加,计算量随之增加。当词汇量达到一定程度后,上一章的2层神经网络的CBOW模型的计算要花费过多的时间。基于此问题,本章将重点讲述如何加速word2vec的计算。主要有两点改进方式:

  • 引入Embedding层,
  • 引入Negative Sampling(负采样)的损失函数。

4.1 word2vec的改进一

上一章我们构建了一个词汇量为7、窗口为1的CBOW模型。已知上下文单词,预测中间单词。计算过程是先通过输入层和输入侧权重(Win)乘积得到中间层,中间层和输出侧权重(Wout)乘积计算每个单词(这里是7个单词)的得分,得分经过Softmax函数转化为每个单词出现的概率,使用交叉熵计算出损失(如下图所示)。
在这里插入图片描述

当处理大规模语料库时,词汇量变大,各层的维度变高,中间的计算耗费很长时间,有两个方面的计算出现瓶颈:

  • 输入层的one-hot表示和权重矩阵Win的乘积

  • 中间层和权重矩阵Wout的乘积以及Softmax层的计算

第1个问题与输入层的one-hot表示有关。我们用one-hot表示来处理单词,随着词汇量的增加,one-hot表示的向量大小也会增加。比如当词汇量有100万个的情况下,one-hot表示本身就需要占用100万个元素的内存大小。此外,在计算one-hot表示和权重矩阵Win的乘积也要花费大量的计算资源。这个问题将通过引入Embedding层来解决。

第2个问题出现在中间层之后的计算。随着词汇量的增加,中间层和权重矩阵Wout的乘积以及Softmax层的计算都需要大量的时间。这个问题将通过引入Negative Sampling(负采样)的损失函数来解决。

4.1.1 Embedding层

上一章的word2vec实现中,我们将单词转化为one-hot表示,并输入MatMul层,在MatMul层中计算该one_hot表示和权重矩阵的乘积,如下图所示。
在这里插入图片描述

上图所做的乘积无非是从Win矩阵中取出某个特定行,当Win中存放的是10万个单词的分布式表示,c中存放的是待取单词的ID,这样构建的层我们称之为Embedding层。

4.2 word2vec的改进二

如前所述,word2vec的另一个瓶颈在于中间层之后的矩阵乘积和Softmax层的计算。为解决这个问题,我们将采用负采样(negative sampling)

4.2.1 中间层之后的计算问题

当词汇量足够大,比如100万个的时候(这里假设每个单词是由大小为100的向量来分布式表示),还有两个地方需要很多计算时间:

  • 中间层的神经元和权重矩阵(Wout)的乘积

  • Softmax层的计算

word2vec进行的处理如下图所示:

在这里插入图片描述

4.2.2 从多分类到二分类

接下来我们来解释一下负采样。用这个方法的关键思想是用二分类拟合多分类。目前为止,我们都是用多分类的方式从词汇库中选出概率最高的1个正确单词,如果词库有100万个单词,最后要计算100万个单词的概率,概率最大的就是我们要的最终单词。如果改成二分类,最后只要计算一个得分,通过sigmoid得到一个概率值,用以判断“是/否”为目标单词,过程举例如下图。
在这里插入图片描述

输出的神经元只有一个,所以计算中间层和输出侧权重矩阵Wout的乘积,Wout只需要提取say对应的列单词向量。

4.2.3 负采样

上一节的方式仅学习了正例,即当上下文是you和goodbye,目标词是say时,经过训练后模型的Sigmoid层输出接近1,但是对say之外的负例一无所知。而我们想获得的最终CBOW模型是,对于正例(say),Sigmoid层的输出接近1;对于负例(say以外的单词),Sigmoid层的输出接近0。

为了把多分类问题处理成二分类问题,对于正例和负例,都需要能够正确地进行二分类。我们不会对所有负例进行学习,而是作为近似方法,选择若干个(5个或10个)负例,这也是负“采样”的真正含义。

那么这若干个负例是如何抽取的呢?实际上基于语料库的统计数据进行的采样要比随机抽样好,具体来说,就是让语料库中经常出现的单词容易被抽到,让语料库中不经常出现的单词难以被抽到。因为在现实问题中,稀有单词基本上不出现,处理好高频词才能获得更好的结果。

总结

Word2vec是谷歌2013年提出的在2018年之前比较主流的词嵌入模型之一,word2vec的用处是从语料中训练生成一批词向量,这批词向量可以直接拿来做后续的任务。

本章以word2vec的高速化为主题,对上一章的CBOW模型进行了改进,实现Embedding层和引入负采样。基于本书的写作时间,本章中并没有介绍众所周知的方法,即基于词频作为叶子节点的权重,构造哈弗曼树,减少softmax的计算量。具体过程感兴趣的同学可以查资料了解一下。

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

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

相关文章

想知道有没有拍照转文字的软件?这3款工具职场人士必备

你们在工作上有没有遇到这种情况,就是领导突然甩一份纸质文件给你,并要求整理成电子版,供其他同事查阅。回想我当初刚踏入职场时,没有什么工作经验,只会对照着内容手动码字输出,但是太浪费时间了&#xff0…

湖北银行冲刺上市:不良率高于行业均值,有公司欠5亿元未能追回

撰稿|汤汤 来源|贝多财经 最近,湖北银行正式向A股递交申请材料,准备在上海证券交易所上市。 据贝多财经了解,湖北银行股份有限公司(下称“湖北银行”)于2022年11月4日在证监会预披露招股书,计划在上交所…

Azide-PEG-Aldehyde,N3-PEG-ALD,叠氮-PEG-醛基可用于新材料研究

化学试剂叠氮-聚乙二醇-醛基,其英文名为Azide-PEG-Aldehyde(N3-PEG-ALD),它所属分类为Aldehyde / Acetal PEG Azide PEG。 peg试剂的分子量均可定制,有:5000 N3-PEG-ALD、10000 叠氮-PEG-醛基、1000 N3-PE…

短视频社交|电影点播平台Springboot+vue+ElementUI前后端分离

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

SpringMVC 请求流程源码分析

三哥 内容来自【自学星球】 欢迎大家来了解我的星球,和星主(也就是我)一起学习 Java ,深入 Java 体系中的所有技术。我给自己定的时间是一年,无论结果如何,必定能给星球中的各位带来点东西。 想要了解更多&…

使用robot+selenium创建一个UI自动化测试用例

新建项目并安装robotframework pip install robotframework 在pycharm-插件,输入robot搜索插件 选择Robot Framework Language Server或者Hyper RobotFramework Support安装 新建test.robot文件编写测试用例test.robot robot用例文件通常包括4个头部分&#xf…

Substance Painter 的一些玩法笔记

Substance Painter 的一些玩法 1、模型边缘磨损效果: 参考连接:Substance Painter 后期添加法线贴图,处理边缘磨损!_哔哩哔哩_bilibili 使用方法: 1、导入要处理的模型文件 2、烘焙 模型贴图(主要是法线) 3、创建一个…

接口api 之Swagger 一次实战探索

今天我们来说说什么是Swagger? 就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个描述文…

自学CFD:我在实习岗速成无人机设计和仿真的故事

一、写在前面 大家好,我叫Jack(硕士在读),目前在企业实践学习。 作为一名门外汉,初识计算流体力学,经历了盲目无措、乱做一气,查资料找经验毫无进展,直到从B站遇到了Graychen老师。…

综合布线工程测试技术

一、测试的相关基础知识 综合布线工程测试内容主要包括三个方面:工作区到设备间的连通状况测试、主干线连通状况测试、跳线测试。 每项测试内容主要测试以下参数:信息传输速率、衰减、距离、接线图、近端串扰等。 1、接线图(Wire Map) 接线图是用来检验每根电缆末端…

24、四大函数式接口(有函数型接口和断定型接口(都是函数式接口))

四大函数式接口(有函数型接口和断定型接口(都是函数式接口)) 新时代程序员:lambda表达式,链式编程,函数式接口,Stream流式计算 函数式接口:只有一个抽象方法的接口&…

热门Java开发工具IDEA入门指南——从Eclipse迁移到IntelliJ IDEA(二)

IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 本文…

HTML非遗文化网页设计题材【京剧文化】HTML+CSS(大美中国 14页 带bootstarp)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 茶文化网站 | 中华传统文化题材 | 京剧文化水墨风书画 | 中国民间年画文化艺术网站 | 等网站的设计与制作 | HTML期末大学生网页设计作业,…

Publisher/Subscriber 订阅-发布模式原理解析

Publisher/Subscriber 订阅-发布模式原理解析 参考资料 What Is Pub/Sub? Publish/Subscribe Messaging Explained什么是serverless?Pub/Sub Examples: 5 Use Cases to Understand the Pattern and its BenefitsJavaScript 设计模式精讲Avro Schema格式 一、概念…

【视觉高级篇】21 # 如何添加相机,用透视原理对物体进行投影?

说明 【跟月影学可视化】学习笔记。 如何理解相机和视图矩阵? 用一个三维坐标(Position)和一个三维向量方向(LookAt Target)来表示 WebGL 的三维世界的一个相机。要绘制以相机为观察者的图形,需要用一个…

ubuntu安装和启动redis命令步骤及其配置文件redis.conf

1、步骤一 依次执行如下命令 1.下载:wget http://download.redis.io/releases/redis-6.0.1.tar.gz 2.解压:tar xzf redis-6.0.1.tar.gz 2.将解压文件夹移动到usr/local/redis目录下:sudo mv ./redis-6.0.1 /usr/local/redis/ 4.进入到redis目录&#x…

这或许是全网最全时间序列特征工程构造的文章了

数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。 那特征工程是什么? 特征工程是利用数据领域的相关…

饼图、柱形图、堆积柱、折线图、散点图,到底应该怎么选?

“随着数字经济的发展,各行业的数据都出现了爆炸式的增长,如何快速从海量数据中提取出有效信息,最大化地挖掘数据价值,是所有转型的企业都在面临的问题。” 想要快速直观地以易于理解、内容简单的方式了解相关数据,就需…

[附源码]java毕业设计家政管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

软件测试面试真题 | TCP为什么要进行三次握手和四次挥手呢?

TCP为什么要进行三次握手和四次挥手呢? 在这个三次握手的过程中对应的消息内容是怎样进行传递的呢? 在四次挥手的过程中,是怎样告知对方断开连接的呢? 三次握手 在说对应概念之前,我们先来了解一个场景&#xff1a…