基于 Encoder-Decoder 架构的大语言模型
基于 Encoder-Decoder 架构的大语言模型
Encoder-Decoder 架构
为了弥补 Encoder-only 架构在文本生成任务上的短板,Encoder-Decoder 架构在其基础上引入了一个解码器(Decoder),并采用交叉注意力机制来实现编码器与解码器之间的有效交互。
- 工作流程
其中分词器和输出文本只在训练阶段存在,而实现“自回归”的红色虚线只在推理阶段存在。
具体来说,解码器包含了输出编码、特征解码以及输出生成三个部分。
输出编码与编码器中的输入编码结构相同,包含分词、向量化以及添加位置编码三个过程,将原始输入文本转换化为带有位置信息的向量序列。
特征解码部分与特征编码部分在网络结构上也高度相似,包括掩码自注意力(MaskedSelf-Attention)模块,交叉注意力模块和全连接前馈模块。其中掩码自注意力模块确保模型只关注上文,不会“预见”未来的信息,从而可以在无“下文泄露”的条件下,进行“自回归”的训练和推理。而交叉注意力模块则负责处理从编码模块向解码模块传递相关信息。
输出生成部分则由一个线性层以及一个Softmax层组成,负责将特征解码后的向量转换为词表上的概率分布,并从这个分布中采样得到最合适的Token作为输出。
Encoder-Decoder 架构
上述的是一种典型的编码器-解码器(Encoder-Decoder)架构,这种架构广泛应用于序列到序列(Seq2Seq)的任务中,比如机器翻译、文本摘要、问答系统等。这种架构的核心思想是将输入序列编码成一个固定大小的上下文向量,然后解码器根据这个向量和部分输出序列来生成目标序列。
以下是描述的架构中各个组件的功能:
-
编码器(Encoder):
- 由多个编码模块堆叠而成。
- 每个编码模块包含:
- 自注意力模块(Self-Attention Module):允许模型在编码时考虑输入序列中的所有位置,捕捉序列内部的依赖关系。
- 全连接前馈模块(Feed-Forward Neural Network):对自注意力模块的输出进行进一步的处理,通常包含两个线性变换和激活函数。
-
上下文向量(Context Vector):
- 编码器的输出,包含了输入序列的丰富语义信息,用于后续的解码过程。
-
解码器(Decoder):
- 同样由多个解码模块堆叠而成。
- 每个解码模块包含:
- 带掩码的自注意力模块(Masked Self-Attention Module):通过掩码机制防止未来信息的“泄露”,确保解码过程的自回归特性。这意味着在生成当前词时,模型只能看到已经生成的词,而不能看到未来的词。
- 交叉注意力模块(Cross-Attention Module):允许解码器关注编码器的输出,实现编码器与解码器之间的信息交互,这对于生成与输入序列高度相关的输出至关重要。
- 全连接前馈模块(Feed-Forward Neural Network):对交叉注意力模块的输出进行进一步的处理。
T5 语言模型
1. T5 模型结构
T5 模型的核心思想是将多种 NLP 任务统一到一个文本转文本的生成式框架中。
通过不同的输入前缀,T5 能够指示模型执行不同的任务并生成相应的输出。这种方法类似于早期的提示(Prompt)技术,通过构造合理的输入前缀,T5 模型能够针对特定任务进行优化,而无需对模型架构进行根本性的改变。这种灵活性显著提高了模型的实用性,使其能够适应各类新的 NLP 任务。
在模型架构方面,T5 采用了与原始 Transformer 相同的编码器和解码器结构。每个编码器和解码器由多个编码模块和解码模块堆叠而成。T5 提供了多个版本,包括 T5-Small、T5-Base、T5-Large、T5-3B 和 T5-11B,参数数量从约 6000 万到 110 亿不等,适应不同的计算需求和应用场景。
2. T5 预训练方式
为了获取高质量的预训练数据集,Google Research 团队从大规模网页数据集 Common Crawl 中提取了大量网页数据,经过清理和过滤,最终生成了 C4 数据集(Colossal Clean Crawled Corpus),其规模约为 750GB。T5 提出的预训练任务名为 Span Corruption,模型需要对原始输入中选择的 15% 的连续 Token 进行预测,这些被掩码的片段可能包括短语或子句,要求模型理解更深层次的句子结构和上下文之间的复杂依赖关系。这一设计显著提升了 T5 在文本摘要、问答系统和文本补全等生成任务中的表现。
3. T5 下游任务
基于预训练阶段学到的知识,T5 模型能够在零样本(Zero-Shot)情况下,利用 Prompt 工程技术直接适配多种下游任务。同时,T5 也可以通过微调(Fine-Tuning)来适配特定任务,尽管微调需要更多的计算资源和训练时间,通常只在对精度要求较高的场景中应用。
BART(Bidirectional and Auto-Regressive Transformers)模型
BART模型结构
- 架构:BART遵循原始的Transformer架构,包含编码器和解码器,每个部分由多个编码模块和解码模块堆叠而成。
- 版本:BART有两个版本,BART-Base和BART-Large。
- BART-Base:包含6个编码模块和6个解码模块,隐藏层维度为768,自注意力头的数量为12,总参数数量约为1.4亿。
- BART-Large:包含12个编码模块和12个解码模块,隐藏层维度为1024,自注意力头的数量为16,总参数数量约为4亿。
BART预训练方式
- 数据来源:BART使用了与RoBERTa相同的语料库,包括BookCorpus、英语维基百科、CC-News、OpenWebText和Stories等,总数据量达到约160GB。
- 预训练任务:BART通过破坏文本的方式进行预训练,包括Token Masking、Token Deletion、Text Infilling、Sentence Permutation和Document Rotation等任务,以训练模型恢复原始文本的能力。
预训练任务的具体形式
- Token Masking:随机替换部分Token为[MASK],训练模型推断被删除的Token。
- Token Deletion:随机删除部分Token,训练模型推断被删除Token的位置和内容。
- Text Infilling:选择连续的Token段替换为[MASK],训练模型推断span及其长度。
- Sentence Permutation:打乱句子顺序,训练模型推理前后句关系。
- Document Rotation:随机选取Token作为新起点,训练模型找到合理起始点。
Encoder-Decoder 架构代表模型参数和语料大小表
模型 | 发布时间 | 参数量(亿) | 语料规模 |
---|---|---|---|
T5 | 2019.10 | 0.6-110 | 750GB |
mT5 | 2020.10 | 3-130 | 9.7TB |
T0 | 2021.10 | 30-110 | 约 400GB |
BART | 2019.10 | 1.4-4 | 约 20GB |
mBART | 2020.06 | 0.4-6.1 | 约 1TB |