谷歌团队在 2017年6月提出了 Transformer 架构,目标是翻译任务。接着又出现了一些有影响力的模型:
- 2018 年 6 月:GPT 模型,第一个预训练的 Transformer 模型,被用于微调适应各种 NLP 任务;
- 2018 年 10月:BERT 模型,一个大型预训练的模型,可用于文本摘要;
- 2019 年 2 月:GPT-2 模型,GPT 的改进模型,其模型的参数量更大;
- 2019 年10 月:DistilBERT 模型,其速度提高 60%,内存占用减少 40%,保留 BERT 97% 的性能;
- 2019 年 10 月:BART 和 T5 模型,使用了 Transformer 的原始架构;
- 2020 年 5 月:GPT-3 模型,比 GPT-2 更大的预训练模型,无需微调即可在各种任务上表现出色。
- … 其他
这些并不没有列出所有的模型,不过这些模型大致可分为三类:
- GPT-like 系列的 auto-regressive Transformer 模型,即:根据上文预测下一个可能的单词,或者根据下文预测前一个可能的单词,也被叫做自回归语言模型,这类模型适合做文本生成类的 NLP 任务,比如机器翻译、文本摘要的生成;
- BERT-like 系列的 auto-encoding Transformer 模型,它通过随机把输入中的某个单词 Mask,模型来预测、恢复被 Mask 的词,也被叫做掩码语言模型;
- BART/T5-like 系列的 sequence-to-sequence Transformer 模型,输入一个句子来预测下一个句子。
1. Transformer 基本架构
Transformer 结构主要包含两部分,左侧的编码器 Encoder 和右侧的解码器 Decoder,其中:
- 编码器负责接收输入,理解输入,构建对其的表征;
- 解码器则使用编码器的的理解、以及其他输入来构建目标文本。
现在我们可以理解 Transformer 编码器能够理解文本内容,而解码器则可以生成文本。所以,在应用 Transformer 模型时,可以:
- 只使用 Encoder 部分。适用于一些文本理解类的任务,例如对句子进行分类、命名实体识别、词性标注等任务;
- 只使用 Decoder 部分。适用一些文本生成类的任务,例如:歌词生成、诗歌生成等任务;
- 使用 Encoder 和 Decoder 部分,适用于需要输入的生成类任务,例如:文本摘要任务、对联生成。
只使用 Transformer Encoder 的模型叫做编码器模型。使用编码器的模型通常会随机掩盖序列中的某个词,让模型去预测掩盖的词,这样的模型也叫做自编码模型。我们知道做这种完形填空是需要理解上下文的,所以这种模型更加适合做理解输入的任务,例如:句子分类、命名实体识别、抽取式问答任务。该系列代表的模型有:
- ALERT
- BERT
- DistilBERT
- ELECTRA
- RoBERTa
只使用 Transformer Decoder 的模型叫做解码器模型,其通常用于根据上文或下文预测下一个词,也叫做自回归模型。它加适合文本生成类的任务。该系列模型代表有:
- CTRL
- GPT
- GPT-2
- Transformer-XL
使用了 Transformer 的编码器和解码器的预训练模型也叫做 sequence-to-sequence 模型,序列到序列的模型适合文本生成类的任务,例如:文本摘要、翻译、生成式问答等,其代表预训练模型有:
- BART
- mBART
- Marian
- T5
2. 注意力层
原始的 Transformer 架构如下图所示:
Transformer 模型的一个很重要的方面是在整个结构中使用了注意力层。了解过注意力机制的同学应该知道,注意力机制能使得模型更多的关注某些输入,而减低对其他的输入的关注。在上图中,编码器中使用了自注意力,而解码器中使用自注意力、编码器和解码器之间的注意力机制。在注意力机制中也会使用到掩码,例如:在自注意力机制中,一个词的表示应该和其之前的词有关,而不会和其之后的词的有关,所以,使用掩码将当前词以后位置的词掩盖,避免注意力计算。而在编码器和解码器之间的注意力计算时,由于编码器输入的是一个批次的文本数据,而这些文本数据长度不一,为了对齐文本会以 0 来填充,为了避免对 0 进行注意力计算,也会对一些 0 位置进行掩码,避免注意力计算。
https://huggingface.co/course/chapter1/1?fw=pt