Bert基础(九)--Bert变体之ALBERT

在接下来的几篇,我们将了解BERT的不同变体,包括ALBERT、RoBERTa、ELECTRA和SpanBERT。我们将首先了解ALBERT。ALBERT的英文全称为A Lite version of BERT,意思是BERT模型的精简版。ALBERT模型对BERT的架构做了一些改变,以尽量缩短训练时间。本章将详细介绍ALBERT的工作原理及其与BERT的不同之处。

接着,我们将了解RoBERTa模型,它是Robustly Optimized BERT Pretraining Approach(稳健优化的BERT预训练方法)的简写。RoBERTa是目前最流行的BERT变体之一,它被应用于许多先进的系统。RoBERTa的工作原理与BERT类似,但在预训练步骤上有一些变化。我们将详细探讨RoBERTa的工作原理及其与BERT的区别。

然后,我们将学习ELECTRA模型,它的英文全称为Efficiently Learning an Encoder that Classifies Token Replacements Accurately(高效训练编码器如何准确分类替换标记)。与其他BERT变体不同,ELECTRA使用一个生成器(generator)和一个判别器(discriminator),并使用替换标记检测这一新任务进行预训练。我们将详细了解ELECTRA的具体运作方式。

最后,我们将了解SpanBERT,它被普遍应用于问答任务和关系提取任务。我们将通过探究SpanBERT的架构来了解它的工作原理。

首先,我们将了解BERT的精简版ALBERT。BERT的难点之一是它含有数以百万计的参数。BERT-base由1.1亿个参数组成,这使它很难训练,且推理时间较长。增加模型的参数可以带来益处,但它对计算资源也有更高的要求。为了解决这个问题,ALBERT应运而生。与BERT相比,ALBERT的参数更少。它使用以下两种技术减少参数的数量。

  • 跨层参数共享
  • 嵌入层参数因子分解

通过使用这两种技术,我们可以有效地缩短BERT模型的训练时间和推理时间。我们将首先了解这两种技术的工作原理,然后学习ALBERT是如何进行预训练的。

1、跨层参数共享

跨层参数共享是一种有趣的方法,它可以减少BERT模型的参数数量。我们知道BERT由N层编码器组成。例如,BERT-base由12层编码器组成。所有编码器层的参数将通过训练获得。但在跨层参数共享的情况下,不是学习所有编码器层的参数,而是只学习第一层编码器的参数,然后将第一层编码器的参数与其他所有编码器层共享。

下图显示了有N层编码器的BERT模型。为了避免重复,只有编码器1被展开说明。

在这里插入图片描述
我们已知每层编码器都是相同的,也就是说,每层编码器都包含多头注意力层和前馈网络层。所以,我们可以只学习编码器1的参数,并与其他编码器共享这套参数。在应用跨层参数共享时有以下几种方式。

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

默认情况下,ALBERT使用全共享选项,也就是说,所有层共享编码器1的参数。现在,我们了解了跨层参数共享技术的工作原理。下面,我们将研究另一种有趣的参数缩减技术。

2、 嵌入层参数因子分解

BERT使用WordPiece词元分析器创建WordPiece标记。WordPiece标记的嵌入大小被设定为与隐藏层嵌入的大小(特征大小)相同。WordPiece嵌入是无上下文信息的特征,它是从词表的独热(one-hot)编码向量中习得的,而隐藏层嵌入是由编码器返回的有上下文信息的特征。

我们用V表示词表的大小。BERT的词表大小为30000。我们用H表示隐藏层嵌入的大小,用E表示WordPiece嵌入的大小。

为了将更多的信息编码到隐藏层嵌入中,我们通常将隐藏层嵌入的大小设置为较大的一个数。例如,在BERT-base中,隐藏层嵌入的大小被设置为768。隐藏层嵌入的维度是 V ∗ H = 30000 ∗ 768 V*H = 30000 * 768 VH=30000768。由于WordPiece嵌入的大小与隐藏层嵌入的大小相同,因此如果隐藏层嵌入的大小H为768,那么WordPiece嵌入的大小E也为768。因此,WordPiece嵌入的维度是 V ∗ E = 30000 ∗ 768 V*E = 30000 * 768 VE=30000768。也就是说,增加隐藏层嵌入的大小H也会同时增加WordPiece嵌入的大小E。

WordPiece嵌入和隐藏层嵌入都是通过训练学习的。将WordPiece嵌入的大小设置为与隐藏层嵌入的大小相同,会增加需要学习的参数数量。那么应当如何避免这种情况呢?我们可以使用嵌入层参数因子分解方法,将嵌入矩阵分解成更小的矩阵。

我们将WordPiece嵌入的大小设置为隐藏层嵌入的大小,因为我们可以直接将词表的独热编码向量投射到隐藏空间。通过分解,我们将独热编码向量投射到低维嵌入空间( 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

举个例子,假设词表V的大小为30000,我们不必将WordPiece嵌入的大小设置为隐藏层嵌入的大小。假设WordPiece嵌入的大小E为128,隐藏层嵌入的大小H为768,我们通过以下步骤投射 V ∗ H V*H VH

  • 首先,将词表[插图]的独热编码向量投射到低维WordPiece嵌入的大小E,即 V ∗ E V*E VE。WordPiece嵌入的维度为 V ∗ E = 30000 ∗ 128 V*E = 30000*128 VE=30000128
  • 接着,将WordPiece嵌入的大小E投射到隐藏层H中,即 E ∗ H E*H EH,维度变为 E ∗ H = 128 ∗ 768 E*H = 128*768 EH=128768

3、 训练ALBERT模型

与BERT类似,ALBERT模型使用英语维基百科数据集和多伦多图书语料库进行预训练。我们已知BERT是使用掩码语言模型构建任务和下句预测任务进行预训练的。与之类似,ALBERT模型是使用掩码语言模型构建任务进行预训练的,但ALBERT没有使用下句预测任务,而是使用句序预测(sentence order prediction,SOP)这一新任务。为什么不使用下句预测任务呢?

ALBERT的研究人员指出,使用下句预测任务进行预训练其实并不十分有效。与掩码语言模型构建任务相比,它并不是一个很难的任务。此外,下句预测任务将主题预测和一致性预测融合在一个任务中。为了解决这样做所导致的问题,研究人员引入了句序预测任务。句序预测基于句子间的连贯性,而不是基于主题预测。下面,让我们详细了解句序预测任务的工作原理。

3.1 句序预测任务

与下句预测任务类似,句序预测也是二分类任务。下句预测任务训练模型预测一个句子对是属于isNext类别,还是属于notNext类别,而句序预测任务则需要训练模型预测在给定的句子对中,两个句子的顺序是否被调换。我们以下面的一个句子对为例来说明这一点。

  • 句子1:She cooked pasta(她做了意大利面)
  • 句子2:It was delicious(它很美味)

在这两个句子中,可以看出句子2是句子1的后续句子。我们将此句子对标记为正例。我们可以通过调换句子的顺序来创建一个负例,如下所示。

  • 句子1:It was delicious(它很美味)
  • 句子2:She cooked pasta(她做了意大利面)

可以看到,句子顺序被调换了。我们把这一句子对标记为负例。

模型的目标是分析句子对是属于正例(句子顺序没有互换)还是负例(句子顺序互换)。我们可以使用任何语言的语料库为句序预测任务创建一个数据集。假设我们有几份文档,从一份文档中抽取两个连续的句子,将其标记为正例。接下来,将这两个句子的顺序互换,将其标记为负例。

现在我们知道,ALBERT模型是使用掩码语言模型构建任务和句序预测任务进行预训练的。与BERT相比,ALBERT模型的效率和能力如何?

4、 对比ALBERT与BERT

与BERT类似,ALBERT是通过不同的配置进行预训练的。不过与BERT相比,ALBERT的所有配置的参数都比较少。下图比较了BERT和ALBERT的不同配置。我们可以看到,BERT-large有3.4亿个参数,而ALBERT-large只有1800万个参数。
在这里插入图片描述
结果来自论文“ALBERT: A Lite BERT for Self-supervised Learning of Language Representations”。

与BERT一样,在预训练后,我们可以针对任何下游任务微调ALBERT模型。ALBERT-xxlarge模型在多个语言基准数据集上的性能明显优于BERT-base和BERT-large。这些数据集包括SQuAD 1.1、SQuAD 2.0、MNLI、SST-2和RACE。

因此,ALBERT模型可以作为BERT的一个很好的替代品。

5、从ALBERT中提取嵌入

有了Hugging Face的Transformers库,我们可以像使用BERT那样使用ALBERT模型。举个例子,假设需要得到句子Paris is a beautiful city中每个单词的上下文嵌入,我们来看看如何使用ALBERT实现。

导入必要的模块。

from transformers import AlbertTokenizer, AlbertModel

下载并加载预训练的ALBERT模型和词元分析器。在本例中,我们使用ALBERT-base模型。

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")

打印结果。
输出结果包括input_ids、token_type_ids和attention_mask,它们都被映射到输入句。输入句Paris is a beautiful city由5个标记(单词)组成,加上[CLS]和[SEP],共有7个标记,如下所示。

{
'input_ids': tensor([[   2, 1162,   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]])
}

然后,将输入送入模型并得出结果。模型返回的hidden_rep包含最后一个编码器层的所有标记的隐藏状态特征和cls_head。cls_head包含最后一个编码器层的[CLS]标记的隐藏状态特征。

hidden_rep, cls_head = model(**inputs)

我们可以像在BERT中一样获得句子中每个标记的上下文嵌入,如下所示。

  • hidden_rep[0][0]包含[CLS]标记的上下文嵌入。
  • hidden_rep[0][1]包含Paris标记的上下文嵌入。
  • hidden_rep[0][2]包含is标记的上下文嵌入。以此类推,hidden_rep[0][6]包含[SEP]标记的上下文嵌入。

这样一来,我们就可以像使用BERT模型那样使用ALBERT模型了。此外,我们还可以针对下游任务对ALBERT模型进行微调,这与对BERT模型进行微调的方式类似。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector系列力扣刷题日志(136.只出现一次的数字,118.杨辉三角,26.删除有序数组中的重复项,260.只出现一次的数字 |||)

目录 136.只出现一次的数字 118.杨辉三角 26.删除有序数组中的重复项 260.只出现一次的数字 ||| vector的详细介绍及用法这里就不过多赘述了,可以参考上一篇博客:vector的介绍及使用说明 136.只出现一次的数字 题目: 给你一个 非空 整数…

深入理解鸿蒙生命周期:从应用到组件

在开发鸿蒙(HarmonyOS)应用时,理解生命周期的概念至关重要。生命周期不仅关乎应用的性能优化,还涉及到资源管理和用户体验等多个方面。本文将详细解析鸿蒙操作系统中应用、页面和组件的生命周期,帮助开发者更好地掌握这…

炸裂,PG的FDW又进化了!

📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACD…

Python 用pygame简简单单实现一个打砖块

# -*- coding: utf-8 -*- # # # Copyright (C) 2024 , Inc. All Rights Reserved # # # Time : 2024/3/30 14:34 # Author : 赫凯 # Email : hekaiiii163.com # File : ballgame.py # Software: PyCharm import math import randomimport pygame import sys#…

C++:加减乘除运算符(14)

就是常用的一些算数符 正1010负-10-10加102030减10 - 20-10 乘 10 * 20200除10 / 200.5 加 简单的加法运算 #include<iostream> using namespace std;int main() {// 加减乘除int a1 10;int b1 20;cout << a1 b1 << endl;system("pause");ret…

鸿蒙OS开发实战:【ArkTS 实现MQTT协议(2)】

软件说明 协议传输通道仅为TCPSocket基于HarmonyOS SDK API 9开发开发语言&#xff1a;ArkTS&#xff0c;TypeScript 应用操作说明 测试首页 “连接” : 用于连接远端服务器。具备“连接 & 断开” 两个功能“设置” : 用于添加更多主题“订阅” & “解除” : 仅用于…

LLM:函数调用(Function Calling)

1 函数调用 虽然大模型能解决很多问题&#xff0c;但大模型并不能知晓一切。比如&#xff0c;大模型不知道最新消息(GPT-3.5 的知识截至 2021年9月&#xff0c;GPT-4 是 2023 年12月)。另外&#xff0c;大模型没有“真逻辑”。它表现出的逻辑、推理&#xff0c;是训练文本的统计…

第九节:时间队列(终结篇)

一、概述 在常规的时间管理中是时间到了触发某个任务&#xff0c;这样一个时间点对应一个任务。在特殊的场景下&#xff0c;任务不断放送到时间队列&#xff0c;时间一到&#xff0c;全部任务执行并释放。如图&#xff1a; 二、时间队列组件 SMB提供了TimeFragment组件来构建…

Domino中的Web博客还能这么用

大家好&#xff0c;才是真的好。 最近时间比较空余&#xff08;闲得慌&#xff09;&#xff0c;计划做一个网站出来。虽然网站很不流行&#xff0c;但对80后程序员来说&#xff0c;毕竟容易实现和感觉亲切。 在Domino平台上做一个网站实在是太容易了&#xff0c;但除了手动开…

【Linux】IP协议

目录 IP报头格式 网段划分 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 IP报文分片 1.粗粒度谈谈分片 a. 确保将所有的分片全部聚到一起&#xff08;相同的标识&#xff09; b. 片偏移排序&#xff08;完成组转&#xff09; 2.分片细节 数据链路层 M…

http模块 服务器端如何响应(获取)静态资源?

一、静态资源与动态资源介绍&#xff1a; &#xff08;1&#xff09;静态资源 内容长时间不改变的资源。eg&#xff1a;图片、视频、css js html文件、字体文件... &#xff08;2&#xff09;动态资源 内容经常更新的资源。eg&#xff1a;百度首页、淘宝搜索列表... 二、服…

引领向量数据库技术新变革,Milvus 2.4 正式上线

备受关注的 Milvus 2.4 正式上线! 作为向量数据库赛道的领军者,Zilliz 一直致力于推动向量技术的进步与创新。本次发布中,Milvus 新增支持基于 NVIDIA 的 GPU 索引—— CUDA 加速图形索引(CAGRA),突破了现有向量搜索的能力。 GPU 索引是向量数据库技术中的重要里程碑,…

【码银送书第十六期】大模型在金融行业的应用场景和落地路径

作者&#xff1a;林建明 来源&#xff1a;IT阅读排行榜 本文摘编自《AIGC重塑金融&#xff1a;AI大模型驱动的金融变革与实践》&#xff0c;机械工业出版社出版 文章转自&#xff1a;大模型在金融行业的应用场景和落地路径 这是最好的时代&#xff0c;也是最坏的时代。尽管…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

【随笔】Git -- 高级命令(上篇)(六)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而&#xff0c;当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…

解决win10 cmd下运行python弹出windows应用商店

Windows 10 的五月更新为 Microsoft Store 应用商店带来了 Python 3.7 原因是这个环境变量“C:\Users\hongc\AppData\Local\Microsoft\WindowsApps”的优先级比我们创建的python环境变量优先级高 所以我们只需要删除这个环境变量即可 但是为了不影响正常功能 推荐将Python的…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中&#xff0c;我们深入探讨了数据预处理的重要性&#xff0c;并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值&#xff0c;以及降低数据的…

每日一题(相交链表 )

欢迎大家来我们主页进行指导 LaNzikinh-CSDN博客 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节…

【蓝桥杯第十三届省赛B组】(详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…