当前位置: 首页 > news >正文

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬
Computer Application Technology
Change the World with Data and Artificial Intelligence !
CSDN@weixin_43975035
*天下之大,虽离家万里,何处不可往!何事不可为!

1. ALBERT

\qquad ALBERT的英文全称为A Lite version of BERT,意思是BERT模型的精简版。ALBERT模型对BERT的架构做了一些改变,以尽量缩短训练时间。
\qquad 与BERT相比,ALBERT的参数更少。它使用以下两种技术减少参数的数量。

·跨层参数共享

\qquad 在跨层参数共享的情况下,不是学习所有编码器层的参数,而是只学习第一层编码器的参数,然后将第一层编码器的参数与其他所有编码器层共享。在应用跨层参数共享时有以下几种方式。

全共享: 其他编码器的所有子层共享编码器1的所有参数。
共享前馈网络层: 只将编码器1的前馈网络层的参数与其他编码器的前馈网络层共享。
共享注意力层: 只将编码器1的多头注意力层的参数与其他编码器的多头注意力层共享。

默认情况下,ALBERT使用全共享选项,也就是说,所有层共享编码器1的参数

·嵌入层参数因子分解

\qquad 我们用 V V V 表示词表的大小。BERT的词表大小为30000。我们用 V V V 表示隐藏层嵌入的大小,用 E E E 表示WordPiece嵌入的大小。
\qquad 我们将独热编码向量投射到低维嵌入空间 ( V ∗ E ) (V*E) (VE),然后将这个低维嵌入投射到隐藏空间 ( E ∗ H ) (E*H) (EH),而不是直接将词表的独热编码向量投射到隐藏空间 ( V ∗ H ) (V*H) (VH)。也就是说,我们不是直接投射 ( V ∗ H ) (V*H) (VH),而是将这一步分解为 ( V ∗ E ) (V*E) (VE) ( E ∗ H ) (E*H) (EH)
\qquad ALBERT模型是使用掩码语言模型构建任务进行预训练的,但ALBERT没有使用下句预测任务,而是使用句序预测(sentence order prediction, SOP)这一新任务。

from transformers import AlbertModel, AlbertTokenizermodel = AlbertModel.from_pretrained(pretrained_model_name_or_path='/code/AlbertModel/')
tokenizer = AlbertTokenizer.from_pretrained(pretrained_model_name_or_path='/code/AlbertModel/spiece.model')
# 模型下载地址 https://huggingface.co/albert-base-v2/tree/main
sentence = "Beijing is a beautiful city"
inputs = tokenizer(sentence, return_tensors = "pt")
print(inputs)

ALBERT模型存储路径及目录如下:
在这里插入图片描述

#输出结果:
{'input_ids': tensor([[   2, 6579,   25,   21, 1632,  136,    3]]), 
'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0]]), 
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1]])}
# 获取模型的输出  
outputs = model(**inputs) # hidden_rep包含最后一个编码器层的所有标记的隐藏状态特征  
hidden_rep = outputs.last_hidden_state  # cls_head通常是用于分类任务的输出,这里假设你的模型有这样一个输出  
cls_head = outputs.pooler_outputprint(hidden_rep, cls_head)
# [CLS] BeiJing is a beautiful city [SEP]
print(hidden_rep[0][0]) # [CLS]标记的上下文嵌入
print(hidden_rep[0][1]) # Paris标记的上下文嵌入
print(hidden_rep[0][2]) # is标记的上下文嵌入
print(hidden_rep[0][6]) # [SEP]标记的上下文嵌入

2. RoBERTa

\qquad RoBERTa模型,它是Robustly Optimized BERT Pretraining Approach(稳健优化的BERT预训练方法)的简写。RoBERTa是目前最流行的BERT变体之一,它被应用于许多先进的系统。
RoBERTa本质上是BERT,它只是在预训练中有以下变化。

·在掩码语言模型构建任务中使用动态掩码而不是静态掩码。

\qquad RoBERTa使用的是动态掩码,每个句子都有不同的标记被掩盖

·不执行下句预测任务,只用掩码语言模型构建任务进行训练。

\qquad 研究人员发现,下句预测任务对于预训练BERT模型并不是真的有用,因此只需用掩码语言模型构建任务对RoBERTa模型进行预训练。

·以大批量的方式进行训练。

\qquad 用较大的批量进行训练可以提高模型的速度和性能。

·使用字节级字节对编码作为子词词元化算法
from transformers import RobertaConfig, RobertaModel, RobertaTokenizermodel = RobertaModel.from_pretrained('/code/roberta-base/')
tokenizer = RobertaTokenizer.from_pretrained('/code/roberta-base/')
# 模型下载地址 https://huggingface.co/roberta-base/tree/main

RoBERTa模型存储路径及目录如下:
在这里插入图片描述

model.config#RoBERTa模型输出参数:
RobertaConfig {"_name_or_path": "/code/roberta-base/","architectures": ["RobertaForMaskedLM"],"attention_probs_dropout_prob": 0.1,"bos_token_id": 0,"classifier_dropout": null,"eos_token_id": 2,"hidden_act": "gelu","hidden_dropout_prob": 0.1,"hidden_size": 768,"initializer_range": 0.02,"intermediate_size": 3072,"layer_norm_eps": 1e-05,"max_position_embeddings": 514,"model_type": "roberta","num_attention_heads": 12,"num_hidden_layers": 12,"pad_token_id": 1,"position_embedding_type": "absolute","transformers_version": "4.34.0","type_vocab_size": 1,"use_cache": true,"vocab_size": 50265
}
tokenizer.tokenize('It was a great day') # Ġ表示一个空格,RoBERTa词元分析器将所有空格替换为Ġ字符# 输出结果:
['It', 'Ġwas', 'Ġa', 'Ġgreat', 'Ġday']
tokenizer.tokenize('I had a sudden epiphany') 
# 因为epiphany不存在于词表中,所以它被分割成子词ep和iphany。我们也可以看到空格被替换成了Ġ字符# 输出结果:
['I', 'Ġhad', 'Ġa', 'Ġsudden', 'Ġep', 'iphany']

3. ELECTRA

\qquad ELECTRA模型,它的英文全称为Efficiently Learning an Encoder that Classifies Token Replacements Accurately(高效训练编码器如何准确分类替换标记)。与其他BERT变体不同,ELECTRA使用一个生成器(generator)和一个判别器(discriminator),并使用替换标记检测这一新任务进行预训练。
\qquad ELECTRA没有使用掩码语言模型构建任务作为预训练目标,而是使用一个叫作替换标记检测的任务进行预训练。替换标记检测任务与掩码语言模型构建任务非常相似,但它不是用[MASK]标记来掩盖标记,而是用另一个标记来替换,并训练模型判断标记是实际标记还是替换后的标记。
\qquad 由于掩码语言模型构建任务在预训练时使用了[MASK]标记,但在针对下游任务的微调过程中,[MASK]标记并不存在,这导致了预训练和微调之间的不匹配。在替换标记检测任务中,我们不使用[MASK]来掩盖标记,而是用不同的标记替换另一个标记,并训练模型来判断给定的标记是实际标记还是替换后的标记。这就解决了预训练和微调之间不匹配的问题。

from transformers import ElectraModel, ElectraTokenizermodel = ElectraModel.from_pretrained('/code/ElectraModel/electra-small-discriminator/')
tokenizer = ElectraTokenizer.from_pretrained('/code/ElectraModel/electra-small-discriminator/')
# 模型下载地址 
# https://huggingface.co/google/electra-small-discriminator/tree/main
# https://huggingface.co/google/electra-small-generator/tree/main

ELECTRA模型存储路径及目录如下:
在这里插入图片描述

model.config# ELECTRA模型输出参数:
ElectraConfig {"_name_or_path": "/code/ElectraModel/electra-small-discriminator/","architectures": ["ElectraForPreTraining"],"attention_probs_dropout_prob": 0.1,"classifier_dropout": null,"embedding_size": 128,"hidden_act": "gelu","hidden_dropout_prob": 0.1,"hidden_size": 256,"initializer_range": 0.02,"intermediate_size": 1024,"layer_norm_eps": 1e-12,"max_position_embeddings": 512,"model_type": "electra","num_attention_heads": 4,"num_hidden_layers": 12,"pad_token_id": 0,"position_embedding_type": "absolute","summary_activation": "gelu","summary_last_dropout": 0.1,"summary_type": "first","summary_use_proj": true,"transformers_version": "4.34.0","type_vocab_size": 2,"use_cache": true,"vocab_size": 30522
}
tokenizer('It was a great day', return_tensors="pt")# 输出结果:
{'input_ids': tensor([[ 101, 2009, 2001, 1037, 2307, 2154,  102]]), 
'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0]]), 
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1]])}

4. SpanBERT

\qquad SpanBERT,它被普遍应用于问答任务和关系提取任务。在SpanBERT中,我们不再随机地掩盖标记并替换为[MASK],而是将连续标记段替换为[MASK]。如下所示:

tokens = [ you, are, expected, to, know, [MASK], [MASK], [MASK], [MASK], country ]
from transformers import pipelineqa_pipeline = pipeline(task="question-answering",model='/code/SpanBERT/spanbert-finetuned-squadv2/', tokenizer='/code/SpanBERT/spanbert-finetuned-squadv2/')
# 模型下载地址 https://huggingface.co/mrm8488/spanbert-base-finetuned-squadv2/tree/main
result = qa_pipeline({'question': "What is Maching Learning?", 'context': "Machine Learning is a subset of Artifical Intelligence. It is widely for creating a variety of applications such as email filtering and computer vision"})
print(result['answer'])# 输出结果:
a subset of Artifical Intelligence

SpanBERT模型存储路径及目录如下:
在这里插入图片描述

\qquad 为了预测[MASK]所代表的标记,我们用掩码语言模型构建目标和区间边界目标(span boundary objective, SBO)来训练SpanBERT模型。在区间边界目标中,为了预测任何一个掩码标记,只使用区间边界中的标记特征,而不使用相应的掩码标记的特征。区间边界包括区间开始之前的标记和区间结束之后的标记。除了区间边界标记特征,模型还使用了[MASK]的位置嵌入。位置嵌入表示掩码标记的相对位置。
\qquad 因此,SpanBERT使用两个目标:一个是掩码语言模型构建目标,另一个是区间边界目标。在掩码语言模型构建目标中,为了预测掩码标记,我们只使用相应标记的特征。在区间边界目标中,为了预测掩码标记,我们只使用区间边界标记特征和掩码标记的位置嵌入。

参考致谢:
[1]. ALBERT: A Lite BERT for Self-supervised Learning of Language Representations
[2]. RoBERTa: A Robustly Optimized BERT Pretraining Approach
[3]. ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators
[4]. SpanBERT: Improving Pre-training by Representing and Predicting Spans
[5]. BERT基础教程:Transformer大模型实战. 苏达哈拉桑 · 拉维昌迪兰

如有侵权,请联系侵删
需要本实验源数据及代码的小伙伴请联系QQ:2225872659

相关文章:

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 *天下之大,虽离家万里,何处不可往!何事不可为! 1. ALBERT \qquad ALBERT的英文全称为A Lite versi…...

域控操作二:设置域用户使用简单密码

过程太多简单 直接写出路径更改即可 组策略—计算机配置----策略—Windows设置–安全设置----账户策略–密码策略 按自己想法改就行了 注意一点!!!!! 要么自己设置策略,要么从默认策略改!&am…...

python---三目运算符

在Python中三目运算符也叫三元运算符,其主要作用:就是用于 简化if...else...语句。 基本语法: 原 if 条件判断: # 语句段1 else: # 语句段2 新-----三目运算符/三元运算符 语句段1 if 条件判断 else 语句段2 案例 输入两个数…...

百度地图定位BMap.GeolocationControl的用法

BMap.GeolocationControl 是百度地图API中的一个类,用于添加地理定位控件到地图上,以便用户可以通过该控件获取自己的当前位置。以下是 BMap.GeolocationControl 的用法示例: 首先,确保已经加载了百度地图API,并且创建…...

Vue3响应式原理初探

vue3响应式原理初探 为什么要使用proxy取代defineProperty使用proxy如何完成依赖收集呢? 为什么要使用proxy取代defineProperty 原因1:defineproperty无法检测到原本不存在的属性。打个🌰 new Vue({data(){return {name:wxs,age:25}}})在vue…...

firewalld常用的基础配置

firewalld防火墙是centos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙。 支持IPv4、IPv6防火墙设置以及以太网桥支持服务或应用程序直接添加防火墙规则接口拥有两种配置模式:临时模…...

功率放大器如何驱动超声波换能器

驱动超声波换能器的功率放大器在超声波应用中起着至关重要的作用。它能够提供足够的功率和精确的信号控制,使换能器能够有效地将电能转换为超声波能量。下面安泰电子将介绍功率放大器如何驱动超声波换能器的原理和关键要点。 首先,让我们了解一下超声波换…...

LiveGBS流媒体平台GB/T28181常见问题-安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口

LiveGBS流媒体平台GB/T28181常见问题-安全控制HTTP接口鉴权勾选流地址鉴权后401 Unauthorized如何播放调用接口? 1、安全控制1.1、HTTP接口鉴权1.2、流地址鉴权 2、401 Unauthorized2.1、携带token调用接口2.1.1、获取鉴权token2.1.2、调用其它接口2.1.2.1、携带 Co…...

红帽认证笔记2

文章目录 1.配置系统以使用默认存储库1.调试selinux2.创建用户账户3.配置cron4. 创建写作目录5. 配置NTP6.配置autofs配置文件权限容器解法1.修改journal配置文件2.重启服务3.拷贝文件到指定目录4.修改拥有人所属组5.修改umask6.切换elovodo用户7.登录容器仓库8.拉取镜像9.运行…...

程序开发中表示密码时使用 password 还是 passcode?

password 和 passcode 是两个经常在计算机和网络安全中使用的术语,两者都是用于身份验证的机制,但它们之间还是存在一些区别的。 password password 通常是指用户自己设置的一串字符,用于保护自己的账户安全。密码通常是静态的,…...

html5 文字自动省略,html中把多余文字转化为省略号的实现方法方法

单行文本: .box{width: 200px;background-color: aqua;text-overflow: ellipsis;overflow: hidden;white-space: nowrap; }多行文本 1.利用-webkit-line-clamp属性 .box{width: 200px;overflow : hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-l…...

6.SNMP报错-Error opening specified endpoint “udp6:[::1]:161“处理

启动SNMP服务 /etc/init.d/snmpd start 出现以下报错信息 [....] Starting snmpd (via systemctl): snmpd.serviceJob for snmpd.service failed because the control process exited with error code. See "systemctl status snmpd.service" and "journalctl…...

集合的进阶

不可变集合 创建不可变的集合 在创建了之后集合的长度内容都不可以变化 静态集合的创建在list ,set ,map接口当中都可以获取不可变集合 方法名称说明static list of(E …elements)创建一个具有指定元素集合list集合对象staticlist of(E…elements)创…...

【LeetCode刷题(数据结构与算法)】:数据结构中的常用排序实现数组的升序排列

现在我先将各大排序的动图和思路以及代码呈现给大家 插入排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个…...

【HTML+CSS】零碎知识点

公告滚动条 <!DOCTYPE html> <html><head><title>动态粘性导航栏</title><style>.container {background: #00aeec;overflow: hidden;padding: 20px 0;}.title {float: left;font-size: 20px;font-weight: normal;margin: 0;margin-left:…...

嵌入式开发学习之STM32F407串口(USART)收发数据(三)

嵌入式开发学习之STM32F407串口&#xff08;USART&#xff09;收发数据&#xff08;三&#xff09; 开发涉及工具一、选定所使用的串口二、配置串口1.配置串口的I/O2.配置串口参数属性3.配置串口中断4.串口中断在哪里处理5.串口如何发送字符串 三、封装串口配置库文件1.创建头文…...

python:talib.BBANDS 画股价-布林线图

python 安装使用 TA_lib 安装主要在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 这个网站找到 TA_Lib-0.4.24-cp310-cp310-win_amd64.whl pip install /pypi/TA_Lib-0.4.24-cp310-cp310-win_amd64.whl 编写 talib_boll.py 如下 # -*- coding: utf-8 -*- import os impor…...

ESP32网络开发实例-自定义主机名称

自定义主机名称 文章目录 自定义主机名称1、软件准备2、硬件准备3、代码实现ESP32 的默认主机名是 expressif。 但是,如果正在使用多个 ESP32 设备,并且在某些时候希望在软接入点模式下使用它们时通过名称来区分设备。 例如,在基于物联网的项目中有多个节点,例如温度、湿度…...

【ELK 使用指南 3】Zookeeper、Kafka集群与Filebeat+Kafka+ELK架构(附部署实例)

EFLKK 一、Zookeeper1.1 简介1.2 zookeeper的作用1.3 Zookeeper的特点1.5 Zookeeper的数据结构1.6 Zookeeper的应用场景1.7 Zookeeper的选举机制&#xff08;重要&#xff09;1.7.1 第一次启动时1.7.2 非第一次启动时 二、Zookeeper集群部署2.1 安装前准备2.2 安装 ZookeeperSt…...

手写redux的connect方法, 使用了subscribe获取最新数据

一. 公共方法文件 1. connect文件 import React, { useState } from "react"; import MyContext from "./MyContext"; import _ from "lodash";// 模拟react-redux的 connect高阶函数 const connect (mapStateToProps, mapDispatchToProps) &…...

数据结构--B树

目录 回顾二叉查找树 如何保证查找效率 B树的定义 提炼 B树的插入和删除 概括B树的插入方法如下 B树的删除 导致删除时&#xff0c;结点不满足关键字的个数范围时&#xff08;需要借&#xff09; 如果兄弟不够借&#xff0c;需要合体 回顾B树的删除 B树 B树的查找 …...

【音视频|ALSA】基于alsa-lib开发ALSA应用层程序--附带源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

嵌入式养成计划-43----QT QMainWindow中常用类的使用--ui界面文件--资源文件的添加--信号与槽

一百零九、QMainWindow中常用类的使用 109.1 菜单栏 QMenuBar 菜单栏 QMenuBar 最多只能有一个 109.2 工具栏 QToolBar 工具栏 QToolBar 可以有多个 109.3 状态栏QStatusBar 状态栏 QStatusBar 最多只能有一个 109.4 浮动窗口QDockWidget 浮动窗口 可以有多个 109.5 代…...

【Yarn】清除Yarn的缓存,更新Yarn本身、更新项目的依赖项

要清除Yarn的缓存&#xff0c;可以运行以下命令&#xff1a; yarn cache clean这将清除Yarn的缓存目录。 要更新Yarn本身&#xff0c;可以运行以下命令&#xff1a; yarn self-update这将下载并安装最新版本的Yarn。 如果要更新项目的依赖项&#xff0c;可以运行以下命令&a…...

点云从入门到精通技术详解100篇-雨雾环境下多传感器融合SLAM方法(续)

目录 4 基于球面投影的激光视觉融合里程计 4.1 引言 4.2 视觉惯性里程计 4.2.1特征点提取与匹配...

解决GET请求入参@NotNull验证不生效问题

一、问题 get请求NotNull验证不生效 二、解决方案 两个步骤&#xff1a; 在该方法的controller类上加Validated&#xff1b;在参数面前加NotNull&#xff1b; 三、其他注解 //被注释的元素必须为null Null //被注释的元素不能为null NotNull //被注释的元素必须为true Ass…...

《golang设计模式》第三部分·行为型模式-01-责任链模式(Chain of Responsibility)

文章目录 1 概念1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1 概念 责任链&#xff08;Chain of Responsibility&#xff09;是指将客户端请求处理的不同职责对象组成请求处理链。 客户端只需要将请求交付到该链上&#xff0c;而不需要关心链上含有哪些对象。请求…...

环境变量【使用命令行参数引出环境变量】

前提&#xff1a;命令行参数 大家在写C/C程序的时候肯定见过下面这种情况&#xff1a; main函数里面携带的参数&#xff0c;平常写代码过程中很少用到这两个参数&#xff0c;接下来我们就研究一下 我们也不知道 指针数组argv里面到底保存的是什么&#xff0c;也不知道这个a…...

【Java 进阶篇】JavaScript BOM History 详解

当用户浏览网页时&#xff0c;可以使用JavaScript的BOM (Browser Object Model)中的History对象来访问浏览器的历史记录。这个对象允许您在不更改页面的情况下导航到不同的历史记录项&#xff0c;或者查看有关用户访问过的页面的信息。 在本篇博客中&#xff0c;我们将围绕Jav…...

【计算机网络】https协议

文章目录 1 :peach:基本概念:peach:1.1 :apple:什么是HTTPS&#xff1f;:apple:1.2 :apple:什么是加密&#xff1f;:apple:1.3 :apple:常见的加密方式:apple:1.3.1 :lemon:对称加密:lemon:1.3.2 :lemon:⾮对称加密:lemon: 1.4 :lemon:数据指纹:lemon: 2 :peach:HTTPS的⼯作过程…...

荣泰建设集团网站/郑州seo优化

1)、在两台机子上面分别安装 mysql , keepalived2)、keepalived 主从&#xff1a;主&#xff1a;vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {state BACKUP # 备用用 BACKUPinterface eth2 #用的是哪个网卡virtual_router_id 59 #虚拟路由地址必须一样&…...

wordpress更改固定连接后404/aso关键词排名优化是什么

什么是Hibernate Hibernate是一个开放源代码的对象关系映射框架&#xff0c;它对JDBC进行了非常轻量级的对象封装&#xff0c;它将POJO与数据库表建立映射关系&#xff0c;是一个全自动的orm框架&#xff0c;hibernate可以自动生成SQL语句&#xff0c;自动执行&#xff0c;使得…...

西安小公司网站建设/优化一个网站需要多少钱

1.Vue 学习图谱...

成都最新疫情发布/seo推广专员招聘

1093 字符串AB (20 分) 题目链接 算法分析 依次遍历两个字符串,用on数组标记是否输出过 值为1表示输出过,值为0表示没有输出过. 代码实现 #include<bits/stdc.h> using namespace std; #define N 150 int on[N]; int main(){string a, b;getline(cin, a);getline(ci…...

网站不稳定/seo搜索引擎优化是什么意思

01 最长上升子序列 给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101]&#xff0c;它的长度是 4。说明: 可能会有多种最长上升子序列的组合&#xff0c;你只需要输出对…...

怎样做网站内链/宁德市人民医院

转&#xff1a;https://blog.csdn.net/u013673437/article/details/80534839 在编写MATLAB程序过程中&#xff0c;有时会遇到当程序运行到不满足if条件时让程序跳出&#xff0c;停止运行的情况&#xff0c;在MATLAB中&#xff0c;使用return语句实现程序跳出。 只将以上程序中变…...