【大模型基础_毛玉仁】2.3 基于 Encoder-only 架构的大语言模型
更多内容:XiaoJ的知识星球
目录
- 2.3 基于Encoder-only 架构的大语言模型
- 2.3.1 Encoder-only 架构
- 2.3.2 BERT 语言模型
- 1)BERT 模型结构
- 2)BERT 预训练方式
- 3)BERT 下游任务
- 2.3.3 BERT 衍生语言模型
- 1)RoBERTa 语言模型
- 2)ALBERT 语言模型
- 3)ELECTRA 语言模型
2.3 基于Encoder-only 架构的大语言模型
2.3.1 Encoder-only 架构
Encoder-only 架构的核心在于能够覆盖输入所有内容的双向编码模型(Bidirectional Encoder Model)。
在处理输入序列时,双向编码模型融合了从左往右的正向注意力以及从右往左的反向注意力,能够充分捕捉每个 Token 的上下文信息,因此也被称为具有全面的注意力机制。
双向编码器为每个词生成动态的上下文嵌入(Contextual Embedding),使得模型能更精准理解词之间的依赖性和语义,有效处理词语的多义性问题。使得双向编码器在句子级别的任务上表现出色,显著超过了静态词嵌入方法的性能。
Encoder-only 架构基于双向编码模型,选用了 Transformer 架构中的编码器部分。虽然 Encoder-only 模型不直接生成文本,但其生成的上下文嵌入对于深入理解输入文本的结构和含义至关重要。
当前, BERT及其变体,如 RoBERTa、ALBERT等,都是基于 Encoder-only 架构的主流大语言模型。
2.3.2 BERT 语言模型
BERT(Bidirectional Encoder Representations from Transformers)
-
是一种基于 Encoder-only 架构的预训练语言模型。
-
其核心在于通过双向编码模型深入挖掘文本的上下文信息,而为下游任务提供优秀的上下文嵌入。
1)BERT 模型结构
BERT 模型的结构与 Transformer 中的编码器几乎一致,由多个编码模块堆叠,每个编码模块包含一个多头自注意力模块和一个全连接前馈模块。
根据参数量的不同,BERT 模型共有 BERT-Base 和 BERT-Large 两个版本。
2)BERT 预训练方式
BERT 使用小说数据集 BookCorpus 和英语维基百科数据集进行预训练。
在预训练任务上,BERT 开创性地提出了掩码语言建模(Masked Language Model, MLM) 和 下文预测(Next Sentence Prediction, NSP) 两种任务来学习生成上下文嵌入。其完整的预训练流程如下。
图 2.7: BERT 预训练任务。
BERT 预训练任务步骤:
(1)构造样本序列:
BERT 先基于给定的原始文本构造多个样本序列,每个样本序列由原始文本中的两个句子组成,这两个句子有 50% 的概率是来自原文的连续句子,另外 50% 的概率是随机挑选的两个句子。随后,对样本序列分词, 在序列开头添加标签 [CLS],在每个句子结尾添加标签 [SEP]。
(2)判断句子连续性:
接着,BERT 利用模型判断样本序列中的两个句子是否为连续的。这一任务训练 BERT 识别和理解句子之间的关系,捕捉句子层面的语义特征。
(3)掩码预测:
最后,BERT 随机选样本序列中约 15% 的 Token 进行遮掩,将其替换为标签 [MASK] 或者随机单词。模型需要预测这些被替换的 Token 的原始内容。要求模型根据周围的上下文信息来推断缺失的 Token。预测过程使用的交叉熵损失函数驱动了 BERT 模型中参数的优化,使其能够学习到 文本的双向上下文表示。
值得注意的是,在 MLM 任务的训练过程中,BERT 仅针 对那些被随机替换的 Token 进行学习,即只计算这些 Token 的预测损失来更新模型参数。
通过这两种预训练任务的结合,使 BERT 在理解语言的深度和广度上都有显著提升。BERT 不仅能够捕捉到 Token 的细粒度特征,还能够把握长距离的依赖关系和句子间的复杂联系,为各种下游任务提供了坚实的语言理解基础。
3)BERT 下游任务
BERT 可以应用于各种自然语言处理任务,包括但不限于:
文本分类(如情感分析)、问答系统、文本匹配(如自然语言推断)、语义相似度计算。
(1) [CLS] 标签设计
由于 BERT 的输出是输入中所有 Token 的向量表示,因此总长度不固定,无法直接应用于各类下游任务。
为解决这一问题,BERT 设计了 [CLS] 标签(即Classification Token,分类标记)来提取整个输入序列的聚合表示。[CLS] 标签汇总整个输入序列的信息,生成一个固定长度的向量表示,从而实现对所有 Token 序列信息的概括,便于处理各种下游任务。
(2)任务处理
文本分类任务中:
-
将输出中 [CLS] 标签对应的向量提取出来,传递给一个全连接层,从而用于分类。
-
例如判断整个句子的情绪是积极、消极或是中立的。
问答系统任务中:
-
需要输入问题以及一段相关的文本,即“[CLS] 问题 [SEP] 文 本 [SEP]”。
-
最终取出 [CLS] 标签的对应向量,并传递给两个全连接层,用于判断答案是否存在于相关文本中。如果存在,这两个全连接层分别用于输出答案的起始和结束位置。
-
通过这种方式,BERT 能够从提供的段落中准确提取出问题的答案。
语义相似度任务中:
-
过构造“[CLS] 文本 1[SEP] 文本 2[SEP]”的方式,
-
结合一个 线性层来直接输出两个文本之间的相似度;
-
也可以不添加额外的组件,直接提取 [CLS] 标签对应的向量,再利用额外的相似度度量方法(例如余弦相似度)来计算多段文本之间的相似度。
2.3.3 BERT 衍生语言模型
1)RoBERTa 语言模型
RoBERTa(Robustly Optimized BERT Pretraining Approach)
-
中文解释:鲁棒优化 BERT 预训练方法。
-
旨在解决BERT在训练程度上不充分问题,以提升预训练语言模型的性能。
-
在BERT的基础上采用:更大数据集、更长的训练时间、更细致的超参数调整。
(1) RoBERTa 模型结构
RoBERTa 在结构上与BERT基本一致,基于多层堆叠的编码模块,每个编码 模块包含多头自注意力模块和全连接前馈模块。RoBERTa同样有两个版本,分别 是RoBERTa-Base和RoBERTa-Large。
RoBERTa-Base与BERT-Base对标,RoBERTa-Large 则与BERT-Large 对标。
(2) RoBERTa 预训练方式
RoBERTa 移除了 BERT 中的下文预测任务,并将 BERT 原生的静态掩码语言建模任务更改为动态掩码语言建模。
具体而言,
BERT 在数据预处理期间对句子进行掩码,随后在每个训练epoch(一次完整训练过程)中,掩码位置不再变化。
而RoBERTa则将训练数据复制成10个副本,分别进行掩码。
在同样训练40个epoch 的前提下,BERT在其静态掩码后的文本上训练了40次,而RoBERTa将 10 个不同掩码后的副本分别训练了4次。从而增加模型训练的多样性,有助于模型学习到更丰富的上下文信息。
这些改进使得RoBERTa在理解上下文和处理长文本方面表现出色,尤其在捕捉细微的语义差异和上下文依赖性方面。
2)ALBERT 语言模型
ALBERT(A Lite BERT):轻量级 BERT 模型
-
旨在通过参数共享和嵌入分解技术来减少模型的参数量和内存占用,从而提高训练和推理效率。
-
通过参数因子分解技术和跨层参数共享技术显著减少了参数的数量。
(1) ALBERT 模型结构
ALBERT的结构与BERT以及RoBERTa都类似,由多层堆叠的编码模块组成。
但是ALBERT通过参数因子分解以及跨层参数共享,在相同的模型架构下,显著减少了模型的参数量。
参数因子分解:
在BERT 中:
-
Embedding 层的输出向量维度 E 与隐藏层的向量维度H 是一致的,这意味着Embedding 层的输出直接用作后续编码模块的输入。
-
具体来说, BERT-Base 模型对应的词表大小V 为3,0000左右,并且其隐藏层的向量维度H设置为768。因此,BERT的Embedding层需要的参数数量是V ×H,大约为2,304万。
ALBERT中:
-
将Embedding层的矩阵先进行分解,将词表对应的独热编码向量通过一个低维的投影层下投影至维度E,再将其上投影回隐藏状态的维度H。
-
具体来说,ALBERT选择了一个较小的Embedding层维度,例如128,并将 参数数量拆解为V ×E+E×H。按照这个设计,ALBERT的Embedding层大约 需要394万个参数
跨层参数共享:
以经典的 BERT-Base 模型为例,模型中共有 12 层相同架构的编码模块,所有 Transformer 块的参数都是独立训练的。
ALBERT 为了降低模型的参数量,提出了跨层参数共享机制,只学习第一层编码模块的参数,并将其直接共享给其他所有层。
该机制一定程度上牺牲了模型性能,但显著提升了参数存储空间的压缩比, 从而实现更高效的资源利用。
ALBERT 共提出了四个版本的模型:
-
分别是 ALBERT-Base、ALBERT-Large、ALBERT-XLarge 以及 ALBERT-XXLarge。
-
ALBERT-Base 与 BERT-Base 对标,ALBERT Large 与 BERT-Large 对标,剩余两个更大。
(2) ALBERT 预训练方式
ALBERT 使用与 BERT 一致的数据集来进行预训练,即小说数据集 BookCorpus及英语维基百科数据集。
在预训练任务的选择上:
-
ALBERT 保留了 BERT 中的掩码语言建模任务,
-
并将下文预测任务替换为句序预测(Sentence Order Prediction, SOP),如图所示。
图 2.8: ALBERT 句序预测任务。
具体而言,ALBERT 从文本中选择连续的两个句子,将这两个句子直接拼接起来,或是先将这两个句子的顺序翻转后再进行拼接,并将拼接后的内容作为输入样本,而模型需要预测该样本中 的两个句子是正序还是反序。
与 BERT 相比,ALBERT 通过创新的参数共享和参数因子分解技术,在较好 地保持原有性能的同时显著减少了模型的参数数量,这使得它在资源受限的环境 中更加实用,处理大规模数据集和复杂任务时更高效,并降低了模型部署和维护 的成本。
3)ELECTRA 语言模型
ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)
-
中文解释:高效地学习一个能够准确分类Token替换的编码器。
-
旨在解决大规模预训练语言模型中的效率和可扩展性问题。
-
通过使用生成器-判别器架构,ELECTRA 能高效利用预训练数据,提高模型在下游任务中的表现。
(1) ELECTRA 预训练方式
在模型结构上,ELECTRA 在 BERT 原有的掩码语言建模基础上结合了生成对抗网络(Generative Adversarial Network, GAN)的思想,采用了一种生成器-判别器结构。
-
生成器(Generator):能进行掩码预测的模型(如BERT),负责将掩码后的文本恢复原状。
-
判别器(Discriminator):则使用替换词检测(Replaced Token Detection, RTD)预训练任务,检测生成器输出的内容中的每个 Token 是否是原文中的内容。
其完整的流程如图所示。
图 2.9: ELECTRA 预训练任务。
(2) ELECTRA 模型结构
根据生成器与判别器的不同规模,ELECTRA 共提出了三个版本的模型,分别 是 ELECTRA-Small、ELECTRA-Base 以及 ELECTRA-Large。
其中,ELECTRA-Small 和 ELECTRA-Base 使用与 BERT 一致的数据集来进行预训练,而 ELECTRA-Large 则使用了更多样化的训练数据,从而帮助模型学习更广泛的语言表示。
另外,在 BERT 中,只有 15% 的固定比例 Token 被掩码,模型训练的内容也仅限于这 15% 的 Token。
但在 ELECTRA 中,判别器会判断生成器输出的所有 Token 是否被替换过,因此能更好地学习文本的上下文嵌入。
Encoder-only 架构的语言模型小结:
上述基于 Encoder-only 架构的大语言模型在文本分类、情感分析等多个自然语言处理任务中取得了良好效果。表2.1从模型参数量及预训练语料等方面对上述模型进行总结。
表 2.1: Encoder-only 架构代表模型参数和语料大小表。
模型 | 发布时间 | 参数量(亿) | 语料规模 | 预训练任务 |
---|---|---|---|---|
BERT | 2018.10 | 1.1, 3.4 | 约 15GB | MLM+NSP |
RoBERTa | 2019.07 | 1.2, 3.5 | 160GB | Dynamic MLM |
ALBERT | 2019.09 | 0.12, 0.18, 0.6, 2.2 | 约 15GB | MLM+SOP |
ELECTRA | 2020.03 | 0.28, 2.2, 6.6 | 约 20-200GB | RTD |
可以看出这些经典模型参数大小止步于 6.6 亿,预训练任务也主要服务于自然语言理解。这些模型没有继续寻求参数量上的突破,并且通常只专注于判别任务,难以应对生成式任务,因此在当前愈发热门的生成式人工智能领域中可以发挥的作用相对有限。
声明:资源可能存在第三方来源,若有侵权请联系删除!