CVer从0入门NLP(二)———LSTM、ELMO、Transformer模型

news2024/11/18 9:45:56

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊专栏推荐:深度学习网络原理与实战

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

CVer从0入门NLP(二)———LSTM、ELMO、Transformer模型

写在前面

Hello,大家好,我是小苏👦🏽👦🏽👦🏽

在上一节为大家介绍了词向量和RNN模型,并基于Pytorch实现了一个RNN模型,不清楚的可以点击下列链接查看详情:

  • CVer从0入门NLP(一)———词向量与RNN模型🍁🍁🍁

今天这节将为大家介绍LSTM、ELMO和Transformer模型,学完今天这些内容,在下一讲我们就来介绍我们的正主了————GPT和BERT。🍄🍄🍄

今天这节的内容都和GPT、BERT息息相关,因此大家耐心的看完喔,对于你后续的理解会非常有帮助。那我话不多说,让我们快快发车叭。🚖🚖🚖

 

LSTM模型

上文为大家介绍RNN模型,大家掌握的怎么样呢?🥦🥦🥦在RNN的原理介绍部分,我们谈到其存在长距离依赖的问题,为了解决这一问题,LSTM应运而生。那就让我们一起来见识见识LSTM是怎么实现的,如下图所示:

img

其实LSTM的整个流程是和标准RNN差不多的,区别主要就在于结构A中,大家乍一看是不是觉得还挺复杂的呢,不用担心,我们一点点的来为大家解析。首先第一步我们需要了解图中的关键图标含义,如下:

image-20230916154008753


LSTM的核心就是细胞状态,也就是下图中的 C t C_t Ct

img

这个细胞状态可以保持信息在上面流动而保持相对小的改变。LSTM最关键的结构就是精心设计了三个门结构,分别是遗忘门、输入门和输出门,下面分别来介绍:【加上介绍细胞状态】

  • 遗忘门

先来上图,遗忘门的输入有 h t − 1 h_{t-1} ht1 x t x_t xt,输出一个0~1之间的数字, σ \sigma σ表示sigmoid函数。这个0~1之间的数字 f t f_t ft表示了我们应该保留什么信息,应该忘记什么信息,0表示完全丢弃,1表示完全保留。

img

  • 输入门

同样的,看图说话,输入门的输入同样是 h t − 1 h_{t-1} ht1 x t x_t xt。输入门包括两个部分,第一部分是公式 i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i \cdot [h_{t-1},x_t]+b_i) it=σ(Wi[ht1,xt]+bi)表示的部分,其决定了我们将要更新什么值;另一部分是公式 C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right) C~t=tanh(WC[ht1,xt]+bC)表示的部分,其表示创建了一个新的候选细胞状态。

img

  • 细胞状态

上文介绍输入门时谈到了创建一个新的候选细胞状态,创建好好,我们就可以更新细胞状态了,如下图所示:

img

  • 输出门

输出门的输入有三个,细胞状态 C t C_t Ct h t − 1 h_{t-1} ht1 x t x_t xt。首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,我们会把细胞状态通过 tanh 进行处理并将它和 sigmoid 门的输出相乘,最终得到输出 h t h_t ht,此过程如下图所示:

img

注1:LSTM模型原理就讲到这里了,不知道大家能否听懂。我认为LSTM的核心就是选择性的记住一些事,又选择性的忘记一些事,大家也不用特别纠结内部的结构为什么会是这样,为什么不这样设计。其实LSTM有很多变体,感兴趣的可以去看看,如果你决定你有什么改进的思路,大可以去试试,说不定会达到不错的效果。🍭🍭🍭

注2:本节就不带大家手写LSTM了,看兴趣的可以去看参考连接6。🍄🍄🍄

 

ELMO模型

在词向量那一小节中,我们介绍了可以由word2vec模型来得到词向量,但是呢,这样得到的词向量会存在一个问题,即无法处理NLP任务中的多义词问题。这是什么意思呢?我们来看下面两句话:

  • 我想吃一个苹果,补充补充维生素。
  • 我想买一个苹果,嘎嘎打游戏上分。

对于上面两句话,都有苹果这个词,我们一眼就能看出这两个苹果不是一种苹果,但是在使用word2vec对苹果这个词进行编码时是区分不开两个苹果的不同含义的。也就是说,对于苹果这个词,我们使用word2vec将其转化成词向量的时候只会产生一种固定的词向量,这个词向量包含了两种苹果的语义。也就是说,如果对于一个新句子,如我爱吃苹果,能够很容易的知道他是苹果(🍎),但是词向量却不会变,依旧包含两种语义。🌼🌼🌼

我想不用说,大家也知道这样不好,因为这样我们就无法区别很多词的含义了。更何况中文博大精深,多义词更是数不胜数,这样无法区分的情况自然是不妙滴。那么我们能不能采取一些措施来应对一下这种情况呢?我给出以下两点,大家看看可不可行:🍟🍟🍟

  1. 给每个单词分配多个向量,并通过训练的方式学出每个单词对应的不同的向量。
  2. 先学习每个单词的基础向量,然后当这个单词应用在某一个上下文的时候,我们做动态的调整。

行不行呢,大家觉得行不行呢?我也不卖关子了,其实这两种方式都是可以的。先来说第一种方式,就是训练的前就给单词分配多个向量,这样学习出来的苹果就有多个向量了,一个向量可以表示水果苹果,一个向量可以表示手机苹果。但是呢,这种方式回大大增加计算成本,不同多义词的不同语义之间可能出现数据不平衡的问题,更为重要的是,我们往往也很难事先穷究单词的所有语义,就拿苹果来说,它也会是一手歌的名字(小苹果),也可能会是一个人的名字 ⋯ ⋯ \cdots \cdots ⋯⋯总之,这种方式存在一定的缺陷。🍚🍚🍚

上面说了第一种方法不好,那么现在再来谈谈第二种方法,自然就是不错了哈哈哈。这种方式便是这节我们要讲的ELMO模型的核心思想——事先学习一个单词的词向量(word Embedding),然后在使用这个词向量的时候,根据单词的上下文的语义去适当的调整词向量的表示,这样经过调整后的词向量就能够表达这个词在上下文中的含义了,也就解决了多义词的问题了。

ELMO模型采用了预训练+特征融合的方式,即采用了俩阶段过程,两个阶段如下:

  1. 第一阶段使用基于LSTM模型设计的结构进行预训练
  2. 第二阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的词向量作为新特征补充到下游任务中。

下面我们分别来看ELMO的两个阶段,第一阶段主要来分析ELMO的模型,如下:

若上图模型训练的目标是根据单词 w i w_i wi上下文去正确预测单词 w i w_{i} wi w i w_i wi 之前的单词序列 Context-before 称为上文,之后的单词序列 Context-after 称为下文。

从图中可以看出,ELMO模型使用的基础结构是LSTM,还是一个两层双向的LSTM**(伪双向)**。

你或许会问,两层的LSTM是什么意思???enmmm,其实就是两个单层的LSTM的叠加,从上图中可以看出,第一层LSTM接受输入序列并产生一个中间的输出序列。然后,第二层LSTM接受第一层的输出作为其输入,并产生最终的输出。这种堆叠LSTM的结构有助于网络更好地捕捉数据中的抽象特征和时序关系,因为第二层LSTM可以进一步建模第一层LSTM的输出。

你或许会问,双向的LSTM是什么???可以看到,上图左端的结构的输入是从左到右的,是正方向编码器;而上图右端的输入是从右向左的,是反方向编码器。这就是双向LSTM。🥗🥗🥗

你或许会问,双向的LSTM有什么用???其实呢,它和单向的LSTM用处是一样的,可以用来预测单词,但是双向的LSTM可以根据单词上下文去预测单词,而普通的LSTM只可以通过上文去预测,多数情况下根据上下文预测单词会更准确些。🥗🥗🥗

你或许会问,根据上下文去预测单词,还预测个嘚啊,这不就是看着答案去做题嘛。🍋🍋🍋确实是这样,如果是纯纯的双向LSTM,确实会存在这种问题,但是ELMO虽然采用了双向结构,却是一个伪双向,不会产生see itself的问题。【后面讲的ERAT就是真正的双向,后面在来介绍其是怎么解决see itself的问题的】🍄🍄🍄

你或许会问,什么是伪双向啊???大家注意到图中正方向编码器和反方向编码器都有一个虚线框框住了嘛,其表示正方向编码器和反方向编码器是独立训练的,只是最后训练好将两个方向的loss进行相加。即无论是正方向编码器还是反方向编码器,一个是从左向右预测,一个是从右往左预测,其实本质都是一个单向的LSTM。总而言之,LSTM的伪双向有以下两个关键点:

  1. 对于每个方向上的单词来说,因为两个方向彼此独立训练,故在一个方向被encoding的时候始终是看不到它另一侧的单词的,从而避免了see itself的问题
  2. 而再考虑到句子中有的单词的语义会同时依赖于它左右两侧的某些词,仅仅从单方向做encoding是不能描述清楚的,所以再来一个反向encoding,故称双向

那么其实到这里ELMO的结构就介绍的差不多了,那么如果我们训练好这个网络后,可以得到什么呢?比如你输入一个“我爱吃苹果”这句话,那么ELMO网络会对句子中的每个单词输出三个词向量,分别为:

  • 最底层的单词的word Embedding
  • 第一层双向LSTM得到的对应单词的Embedding
  • 第二层双向LSTM得到的对应单词的Embedding

这三个Embeding往往包含单词不同的信息,这和计算机视觉中卷积很像,越深层的网络越能得到单词的语义信息,如下:

image-20230917170837207

也就是说,ELMo 的第一阶段的预训练过程得到了三个不同的词向量,这些词向量都会应用在后面的下游任务中。🍡🍡🍡

这里,我还是想强调补充一点,就是为什么ELMO可以识别多语义问题?🥱🥱🥱

其实这个答案就是由于ELMO的双向LSTM结构,因为这个结构会使得每个单词考虑了当前单词的上下文信息,从而使得得到的Embedding向量具有了上下文的信息。🌱🌱🌱

这样在我们进行下游任务的时候,会先将输入送到训练好的ELMO网络中,这时ELMO会根据当前的输入的上下文信息得到合适的词向量,然后应用这个词向量进行下游任务。🍀🍀🍀


上面介绍了ELMO的第一阶段即预训练阶段的过程,下面将来介绍如何将预训练好的网络,应用到下游任务当中去,如下图所示🍖🍖🍖

image-20230917193946935

上图很清晰的展示了ELMO预训练摸摸胸如何在下游任务中使用,以下游任务为QA(提问解答)问题为例,对于问句X,有以下几步进行下游任务:

  1. 将句子X作为训练好的ELMO网络的输入,经过ELMO网络后我们会得到三个Embedding。
  2. 分别给予三个Embedding一个权重a,根据这个权重将三个Embedding通过加权和的方式整合成一个新的Embedding,这个权重可以学习得来。【这个就非常像CV中的特征金字塔等结构来融合不同层的信息】
  3. 再将上一步整合后的Embedding作为X句在自己任务的那个网络中对应单词的输入,以此作为新的特征给下游任务使用。

这整个就是ELMO的全部内容了,大家仔细的消化消化,多揣摩揣摩,一定会有收获的。🥗🥗🥗

 

Transformer模型

前面为大家介绍了RNN、LSTM、ELMO模型,大家学的怎么样了呢?这节要为大家介绍Transformer模型了,我实在是太开心啦!!!

开心???为什么???因为这个我之前写过啦,不用一个字一个字的敲咯。🍉🍉🍉大家可以点击下方链接阅读:

  • CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了!🍁🍁🍁

关于这篇文章我也想简单说两句,这篇文章从知识的输入,到文章结构的安排,再到作图,下笔直至最后的完成花费了两周时间,参考了很多资料,把一些资料中比较好的观点融入文章之中,用通俗的语言带你了解transformer,希望大家阅读后能够有所收获!

这篇文章也收获了一小笔奖金,一个微果C1的投影仪和500元激励,嘻嘻嘻。🍭🍭🍭

同时这篇文章也收获一些好评和一键三连,所以自己也是非常开心滴。🥂🥂🥂

image-20230917202347409

说了这么多,不是炫耀哈哈哈,也不是凑字数啊,我想说的是我们应该更加注重文章的质量,这样其实不论是读者还是自己都会受益良多,是双赢的结果。🍡🍡🍡当然了,如果大家对Transformer感兴趣的话可以去读读看,还是比较容易理解的,一起加油。🍻🍻🍻

 

小结

今天的内容就为大家分享到这里啦,大家学会了多少呢。下一节我们将以这两节的内容为基础,为大家介绍GPT和BERT模型,一起加油叭。🌱🌱🌱

 

参考连接

1、The Illustrated Word2vec

2、理解 LSTM 网络

3、Transformer通俗笔记:从Word2Vec、Seq2Seq逐步理解到GPT、BERT

4、Understanding LSTM Networks

5、预训练语言模型的前世今生

6、PyTorch源码教程与前沿人工智能算法复现讲解

 
 

如若文章对你有所帮助,那就🛴🛴🛴

一键三连 (1).gif

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

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

相关文章

恒创科技:云存储和网盘怎么区分出来?

随着互联网的发展,数据存储已成为人们日常生活中不可或缺的一部分。云存储和网盘是经常被人们提及的两种存储方式,均通过网络进行数据存储和访问的服务。但,它们在技术实现、数据安全性、访问方式和数据容量等方面存在一定的差异。要区分&…

DAY04_Spring—Aop案例引入代理机制

目录 1 AOP1.1 AOP案例引入1.1.1 数据库事务说明 1.2 Spring实现事务控制1.2.1 代码结构如下1.2.2 编辑User1.2.3 编辑UserMapper/UserMapperImpl1.2.4 编辑UserService/UserServiceImpl1.2.5 编辑配置类1.2.6 编辑测试类 1.3 代码问题分析1.4 代理模式1.4.1 生活中代理案例1.4…

赋能客户不停歇,卓翼飞思职业院校无人智能装备师资培训圆满落幕

1月10日-15日,卓翼飞思在北京研发中心成功举办职业院校无人智能装备高级师资培训。来自湖南汽车工程职业学院(以下简称:湖南汽车职院)的10名师生&技术人员参与此次培训,针对无人智能集群应用开发进行系统性的培训及…

图卷积GCN实战基于网络结构图的网络表示学习实战

下面的是数据: from,to,cost 73,5,352.6 5,154,347.2 154,263,392.9 263,56,440.8 56,96,374.6 96,42,378.1 42,58,364.6 58,95,476.8 95,72,480.1 72,271,419.5 271,68,251.1 134,107,344.0 107,130,862.1 130,129,482.5 227,167,1425.7 167,298,415.7 298,209,42…

(vue)键值对结构数据展示

(vue)键值对结构数据展示 效果: 数据结构: this.formInline.algorithmText [{algorithmParameters: {参数名1: "111",参数名2: "121,122",},algorithmName: "算法1",algorithmId: 9,},{algorithmParameters: {参数名1:…

Android安卓读写低频EM4469卡源码

本示例使用的发卡器&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.…

Qt通用属性工具:随心定义,随时可见(三)

传送门: 《Qt通用属性工具:随心定义,随时可见(一)》 《Qt通用属性工具:随心定义,随时可见(二)》 《Qt通用属性工具:随心定义,随时可见(三)》 一、效果展示 本文将展示的是一个源于Qt但是却有些年头的Qt属性浏览工具。支持交互式编辑和查阅对象属性。 这可不就是妥…

机器学习--人工智能概述

人工智能概述 入门人工智能&#xff0c;了解人工智能是什么。为啥发展起来&#xff0c;用途是什么&#xff0c;是最重要也是最关键的事情。大致有以下思路。 人工智能发展历程机器学习定义以及应用场景监督学习&#xff0c;无监督学习监督学习中的分类、回归特点知道机器学习…

产品经理学习-产品运营《用户运营策略》

⽤户画像与⽤户运营策略 什么是用户画像 对产品运营而言&#xff0c;用户画像就是对用户的各种特征贴上标签通过这些标签将用户分成不同的用户群体 为用户提供有针对性的服务。 制作用户画像是为了专注和精准 使产品的服务对象更加聚焦&#xff0c;更加专注&#xff1b;根据产…

NIFI 2.0.0版本HTTPS访问部署

1. 相关环境 服务器&#xff1a;centos JDK&#xff1a;jdk21 NIFI: nifi-2.0.0-M1 2. 下载NIFI 下载NIFI https://nifi.apache.org/download/ 将文件上传至服务器指定目录&#xff0c;解压缩 修改 bin 目录下的脚本文件 ​ 注意: nifi 2.0.0 版本需要jdk21&#xff0c;所…

C++ 二叉树OJ题

目录 1、606. 根据二叉树创建字符串 2、102. 二叉树的层序遍历 3、107. 二叉树的层序遍历 II 4、236. 二叉树的最近公共祖先 5、JZ36 二叉搜索树与双向链表 6、105. 从前序与中序遍历序列构造二叉树 7、106. 从中序与后序遍历序列构造二叉树 8、144. 二叉树的前序遍历…

pdf怎么查看?6个不能错过的软件!

PDF&#xff0c;作为一种常用的文件格式&#xff0c;已经成为了我们工作、学习中的必备工具。然而&#xff0c;对于许多新手来说&#xff0c;如何查看和编辑PDF文件却是一个不小的挑战。今天&#xff0c;我们就来为大家详细介绍一下如何查看和编辑PDF文件&#xff0c;以及一些必…

从法律的角度看待项目前期可行性研究的必要性

前言 在司法实践中&#xff0c;很多纠纷展现出来的问题是项目提供方没有按照合同约定履行发生违约的情况&#xff0c;例如逾期交付、项目不符合约定标准等等&#xff0c;但是这些情况发生的原因是各不相同的&#xff0c;其中有一类纠纷的发生却是从一开始就埋下了风险的种子&a…

2.0-学成在线内容管理

内容管理模块 1.需求 1.1 业务流程 内容管理的业务由教学机构人员和平台的运营人员共同完成。 教学机构人员的业务流程如下&#xff1a; 1、登录教学机构。 2、维护课程信息&#xff0c;添加一门课程需要编辑课程的基本信息、上传课程图片、课程营销信息、课程计划、上传课程…

深入详解使用 RabbitMQ 过程中涉及到的多个细节问题(面试可用)

目录 1、基础类问题 2、cluster 相关问题 3、综合性问题 4、参考资料 C软件异常排查从入门到精通系列教程&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&#xff09;https://blog.csdn.net/chenlycly/article/details/125529931C/C基础与进阶&…

OB OCP工具

文章目录 OCP产品架构OCP核心功能集群管理-集群拓扑图告警管理 OCP OCP&#xff08;OceanBase Cloud Platform&#xff09;是企业级数据库管理平台OceanBase 云平台&#xff08;OceanBase Cloud Platform&#xff0c;OCP&#xff09;是以 OceanBase 为核心的企业级数据库管理平…

外汇天眼:加拿大监管机构提出了关于持有加密资产的公共投资基金的规定

加拿大证券管理局&#xff08;CSA&#xff09;是由加拿大各省金融市场监管机构组成的国家机构。他们已发布了一组旨在征求意见的拟议监管要求&#xff0c;适用于寻求投资加密资产的公共投资基金。 Stan Magidson&#xff0c;CSA主席兼艾伯塔证券委员会主席兼首席执行官表示&…

无货源跨境电商到底应该怎么做,新手必看

如今&#xff0c;跨境电商无疑已经成为了一个热门的创业领域&#xff0c;但对于一些新手来说&#xff0c;面临的一个主要挑战是如何处理产品的货源问题。下面我就和大家分享一下无货源跨境电商的基本概念以及一些新手可以采取的策略和步骤&#xff0c;帮助大家在这个领域取得成…

UE4 添加按键输入事件 并在蓝图中使用按键输入节点

绑定按键 选择Edit/ProjectSettings/Engine/Input 在bindings中可以选择添加ActionMappings或则AxisMappings ActionMappings:按键事件&#xff0c;有按下和抬起两个事件&#xff0c;需要分别用两个键触发AxisMappings:输入事件&#xff0c;返回值为float&#xff0c;对于键盘…

突破划片机技术瓶颈,博捷芯BJX3352助力晶圆切割行业升级

随着半导体行业的快速发展&#xff0c;晶圆切割作为半导体制造过程中的重要环节&#xff0c;对于切割设备的性能和精度要求越来越高。为了满足市场需求&#xff0c;提高生产效率&#xff0c;国产划片机企业博捷芯推出了新一代划片机BJX3352&#xff0c;成功突破了技术瓶颈&…