【深度学习】BERT变体—ALBERT

news2024/11/13 10:22:12

        ALBERT的初衷是想解决BERT中参数量过多的问题,论文全称为:ALBERT: A Lite BERT for Self-supervised Learning of Language Representations。 

        相较于BERT,ALBERT模型减少BERT模型的参数量;预训练中的Next Sentence Prediction(NSP)任务使用了Sentence Order Prediction(SOP)进行代替;增加了n-gram mask,使用了LAMB优化器来代替AdamW,该优化器在batch size较大时效果更佳。

1 减少模型参数量

1-1 嵌入层参数分解(Factorized embedding layer parameterization )

        在BERT中,使用WordPiece分词器创建WordPiece Token。其WordPiece Token的Embedding大小被设成和隐藏层Embedding大小(向量表示大小)一样。而WordPiece  Embedding是上下文无关(context-independent)的表征,它是从词表中的独热编码向量学习的。隐藏层中的Embeddings则相反,学习一种上下文相关(context-dependent)的表征,是编码器返回的有上下文信息的表示,BERT这类模型的表征能力更多是来自这些上下文相关的表征学习。

        BERT和RoBERTa模型中,WordPiece拆分的词表映射的词向量维度E是与Transformer中的隐藏层大小H是绑定的,即E=H。为了编码更多的信息到隐藏层嵌入中,我们通常需要设置一个很大的隐藏层嵌入大小。比如,在BERT-base中,其隐藏层嵌入大小 H为768。那么隐藏层嵌入的维度是 V × H = 30000 × 768 。因为WordPiece嵌入大小E被设成预隐藏层嵌入大小一样,它的大小也为768。这样,WordPiece嵌入层的维度为 V × E = 30000 × 768 。也就是说,增加隐藏层嵌入大小H也会同时增加WordPiece嵌入大小E。解绑词向量的维度隐藏层大小,可以根据模型的需要更加有效得利用模型的所有参数,这意味着H可以远大于E,H>>E。

        ALBERT中使用嵌入层参数分解方法将嵌入矩阵分解为更小的矩阵。将 WordPiece  Embedding 和 Hidden  Embedding分离。首先将独热向量投影到低维嵌入空间 V × E ,然后再将该低维嵌入投影到隐藏空间 E × H ,而不是直接投影独热向量到隐藏空间( V × H )。不是直接投影 V × H ,而是将这步分解为 V × E 和 E × H 。

        举个例子,假设我们词表大小 V = 30000 ,我们将 E 和 H 分离。假设我们将WordPiece嵌入大小设置为较小的维度,假设 E = 128。同时隐藏层大小保持不变,还是 H=768。现在我们通过以下步骤来投影 V × H :

        (1)将one-hot向量投影到低维WordPiece嵌入向量空间 V × E = 30000 × 128 ;
        (2)投影WordPiece嵌入空间到隐藏空间 E × H = 128 × 768 ;
        (3)将 V × H = 30000 × 768 分解为 V × E = 30000 × 128 和 E × H = 128 × 768 。如此一来,可以随意调整隐藏层维度,而无需担心导致模型参数量增加过多。

1-2 跨层参数共享(Cross-layer parameter sharing)

         BERT包含 N 个编码器层。比如BERT-base包含12个编码器层,在训练时,需要学习所有编码器层的参数。而使用跨层参数共享的方法,我们只需要学习第一个编码器层的参数,然后让其他所有层共用这套参数。

        编码层中每一层的结构都是相同的,它们都包含多头注意力和前馈神经网络的子层。在应用跨层参数共享时有几种不同的方式:

        1.All-shared: 共享第一个编码器层的所有子层参数到其他编码器层
        2.Shared feedforward network:只共享第一个编码器层的前馈神经网络层参数到其他编码器层(的前馈神经网络)
        3.Shared attention:只共享第一个编码器层的多头注意力层参数到其他编码器层(的多头注意力层)
        ALBERT模型使用All-shared模式。如下图为BERT和ALBERT的参数对比。

2 Sentence Order Prediction(SOP)

        BERT中提出,next-sentence prediction (NSP)任务是为了提升预训练模型在下流任务的表现,比如那些需要理解句子对之间的关系的自然语言任务推理。然而,RoBERTa研究表明NSP的效果是不可靠的,消除这个预训练任务反而能够提升一些下流任务的效果。并且,NSP结合了主题预测和连贯性预测到一个任务中。为了解决这个问题,ALBERT中引入了SOP任务,SOP(句子顺序预测)基于句子间的连贯性而不是主题预测。

        从NSP的设计来看:负样本是从不同的文档中提取的语料,意味着负样本在主题和连贯性上(topic and coherence)都是偏离的。NSP是将主题预测和连贯性预测两个任务进行合并了,但是主题预测相比连贯性预测简单许多,而主题预测与MLM是存在更多的重叠了。

        在此理论基础上,ALBERT仍然认为句子间的建模能力是语言理解中一个重要部分,但是要避开主题预测,并且更关注于句子间连贯性的建模能力,提出了另外一种任务:sentence-order prediction (SOP) :类似NSP,SOP也是一个二分类任务。在NSP中,我们训练模型去预测某个句子对是属于isNext还是notNext类别,而在SOP任务中,我们训练模型去预测给定句子对中的句子顺序是否被交换过正样本仍然是与BERT一样,从相同的文档中提取两个连续的片段;负样本则与BERT不同,首先依旧是相同的文档中提取两个连续的片段,但是调换这个片段的顺序。

Sentence 1: She cooked pasta
Sentence 2: It was delicious 

        Sentence1和Sentence2是有连续关系的,因此我们把它们分为正例。现在我们创建一个负例,只要简单地交换这两个句子的顺序即可: 

Sentence 1: It was delicious
Sentence 2: She cooked pasta 

 3 N-gram MASK

        ALBERT在数据处理时,增加了n-gram mask。比如tokens序列为a b c d,按照原mask方法,仅存在这些mask选项:[a, b, c, d]。以3-gram为例举例可以mask的对象:mask_list = [a, b, c, d, a b, b c, c d, a b c, b c d]。

4 其他调整

    与BERT类似,ALBERT模型也使用英文维基百科和Toronto BookCorpus数据集。在预训练过程中,训练ALBERT还另外进行了一些调整:

  1. 输入序列会以10%的概率让它低于最大长度512;
  2. 使用LAMB优化器(针对大batch size的优化器),batch size为4096,学习率为0.00176

5  ALBERT 使用

from transformers import AlbertTokenizer, AlbertModel
model = AlbertModel.from_pretrained('albert-base-v2')
tokenizer = AlbertTokenizer.from_pretrained('albert-base-v2')

sentence = "Paris is a beautiful city" 
inputs = tokenizer(sentence, return_tensors="pt")
print(inputs)

Reference:

https://helloai.blog.csdn.net/article/details/120499194?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-120499194-blog-124881981.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-120499194-blog-124881981.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=2https://helloai.blog.csdn.net/article/details/120499194?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-120499194-blog-124881981.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-120499194-blog-124881981.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=2

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

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

相关文章

【面试系列】线程相关的面试题集锦

线程的状态 public enum State {/*** Thread state for a thread which has not yet started.*/NEW,/*** Thread state for a runnable thread. A thread in the runnable* state is executing in the Java virtual machine but it may* be waiting for other resources from …

最简单的线性回归模型-标量

首先考虑yyy为标量,www为标量的情况,那么我们的线性函数为ywxbywxbywxb。每批输入的量batch size 为111,每批输入的xxx为一个标量,设为x∗x^*x∗,标签yyy同样为一个标量,设为y∗y^*y∗。因此每批训练的损失…

直线模组的优势是什么?

直线模组是可以模拟人工操作的一些功能,通过固定程序来进行抓取,搬运、操作工具,实现自动变速,这也是为何直线模组使用率高的主要原因了,那么直线模组究竟有着怎样的优势呢? 1、整体结构紧凑,重…

k8s-Kubernetes集群部署

文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…

Spark 磁盘作用

Spark 磁盘作用磁盘作用性能价值失败重试ReuseExchangeSpark 导航 磁盘作用 临时文件、中间文件、缓存数据,都会存储到 spark.local.dir 中 在 Shuffle Map 时, 当内存空间不足,就会溢出临时文件存储到磁盘上溢出的临时文件一起做归并计算…

Vue3---语法初探

目录 hello world 实现简易计时显示 反转字符串 显示隐藏 了解循环 了解双向绑定实现简易记事 设置鼠标悬停的文本 组件概念初探,进行组件代码拆分 hello world 最原始形态,找到 id 为 root 的标签,将 Vue 实例的模板放入标签之内 …

剑指 Offer 09. 用两个栈实现队列(java)

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: [“CQu…

SpringBoot中一行代码解决字符串向枚举类型转换的问题

1. 场景 在WEB开发,客户端和服务端传输的数据中经常包含一些这样的字段:字段的值只包括几个固定的字符串。 这样的字段意味着我们需要在数据传输对象(Data Transfer Object, DTO)中对该字段进行校验以避免客户端传输的非法数据持…

Android Service知识

一. 概览 Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC…

你是真的“C”——为冒泡排序升级赋能!

你是真的“C”——为冒泡排序升级赋能!😎前言🙌冒泡排序升级赋能之境界一!冒泡排序升级赋能之境界二!qsort库函数的运用和认识总结撒花💞😎博客昵称:博客小梦 😊最喜欢的…

【CDP】更改solr 存储路径导致ranger-audit 大量报错问题解决

前言 我们生产上公司是使用的CDP集群,一次管理员通知,Solr 组件的数据存放路径磁盘空间不够。 我们的solr 组件时为 Ranger 服务提供日志审计功能, 在我们更改了磁盘路径,并重启了Solr 组件,然后发现相关组件&#…

基于Python的selenium

一、安装 1.1安装Python,安装Python时需要勾选增加环境变量 如果之前已经安装过Python,需要将Python相关文件以及环境变量删除 1.2安装成功:在命令行界面下输入Python,最终展示>>>即可成功 2.1安装pycharm,直接自定义安装…

论文阅读-(GLIP)Grounded Language-Image Pre-training (目标检测+定位)

Paper:Grounded Language-Image Pre-training Code:https://github.com/microsoft/GLIP 简介: 定位任务与图像检测任务非常类似,都是去图中找目标物体的位置,目标检测为给出一张图片找出bounding box,定位…

07react+echart,大屏代码开发

react框架引入第三方插件原链接gitHub:GitHub - hustcc/echarts-for-react: ⛳ Apache ECharts components for React wrapper. 一个简单的 Apache echarts 的 React 封装。import ReactECharts from echarts-for-react;import * as echarts from echarts;一、软件简介echarts-…

微机原理和计算机组成原理复习

1:冯诺依曼机器的主要特点? 1)计算机由运算器、存储器、控制器、输入设备和输出设备五大部分组成; 2)指令和数据存储在存储器中,并可以按地址访问; 3)指令和数据均以二进制表示&…

2023年软考中级信息安全工程师考什么?

信息安全工程师是属于软考中级科目,含金量很高的,信息安全工程师在社会上的需求是蛮大的。 信息安全工程师主要涉及计算机信息安全方面,在计算机软硬件、网络、应用相关领域从事安全系统设计、安全产品开发、产品集成、信息系统安全检测与审计…

小程序容器作为软件中间件技术不可忽视的价值

随着移动互联网的不断发展,越来越多的应用程序被广泛应用于各种行业和领域中。然而,不同的平台和设备之间的差异性和复杂性,给应用程序的开发和部署带来了很大的挑战。这时,小程序容器作为软件中间件技术的其中一环,成…

格密码学习笔记(三):闵可夫斯基第一定理

文章目录NNN维超球体体积结论闵可夫斯基凸体定理闵可夫斯基第一定理闵可夫斯基第二定理致谢NNN维超球体体积结论 在nnn维空间中,对半径为rrr的超球体(Ball),有vol(B(0,r))≥(2rn)n\mathrm{vol}(\mathcal{B}(0, r)) \geq \left( \…

java基础:浅聊实例化和初始化

其实如果了解python的化,其在生成一个实例对象的时候会调用两个系统方法__new__ 和__init__。 这个可以通过看生成的class文件看到,比如创建一个test.java,然后通过jclasslib这个软件查看class文件,当然ide也可以安装这个软件的插…

ggplot2的组图拓展包(1):patchwork(上篇)

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集patchwork是ggplot绘图系统的拓展包,主要功能是将多个ggplot格式的图形组合成一幅大图,即组图。patchwork工具包十分好用,它主要利用几个类似四则运算符号的操作符进行组图&…