NLP step by step -- 了解Transformer

Transformer模型

Transformer相关历史

首先我们先看一下有关Transformer模型的发展历史,下面的图是基于Transformer架构的一些关键模型节点:

图片来源于Hugging Face

图片来源于Hugging Face

Transformer 架构 于 2017 年 6 月推出。原本研究的重点是翻译任务。随后推出了几个有影响力的模型,包括

  • 2018 年 6 月: GPT, 第一个预训练的 Transformer 模型,用于各种 NLP 任务并获得极好的结果

  • 2018 年 10 月: BERT, 另一个大型预训练模型

  • 2019 年 2 月: GPT-2, GPT 的改进(并且更大)版本

  • 2019 年 10 月: DistilBERT, BERT 的提炼版本,速度提高 60%,内存减轻 40%,但仍保留 BERT 97% 的性能

  • 2019 年 10 月: BARTT5, 两个使用与原始 Transformer 模型相同架构的大型预训练模型(第一个这样做)

  • 2020 年 5 月, GPT-3, GPT-2 的更大版本,无需微调即可在各种任务上表现良好(Zero-shot)

Transformer是语言模型

上面提到的所有 Transformer 模型(GPT、BERT、BART、T5 等)都被训练为语言模型。这意味着他们已经以无监督学习的方式接受了大量原始文本的训练。无监督学习是一种训练类型,其中目标是根据模型的输入自动计算的。这意味着不需要人工来标记数据!

这种类型的模型可以对其训练过的语言进行统计理解,但对于特定的实际任务并不是很有用。因此,一般的预训练模型会经历一个称为迁移学习的过程。在此过程中,模型在给定任务上以监督方式(即使用人工注释标签)进行微调。

微调的案例

1. 一个例子是阅读 n 个单词的句子,预测下一个单词。这被称为因果语言建模,因为输出取决于过去和现在的输入。

示例图片来源于Hugging Face

2.第二个案例是mask建模

示例图片来源于Hugging Face

Transformer架构

Transformer模型主要由两个块组成

  • Encoder (左侧): 编码器接收输入并构建其表示(其特征)。

  • Decoder (右侧): 解码器使用编码器的表示(特征)以及其他输入来生成目标序列。

图片来源于Hugging Face

这些部件中的每一个都可以独立使用,具体取决于任务:

  • Encoder-only models: 适用于需要理解输入的任务,如句子分类和命名实体识别。

  • Decoder-only models: 适用于生成任务,如文本生成。

  • Encoder-decoder models 或者 sequence-to-sequence models: 适用于需要根据输入进行生成的任务,如翻译等任务。

Transformer架构最初是为翻译而设计的。在训练期间,Encoder 接收特定语言的输入(句子),而Decoder 需要输出对应语言的翻译。在Encoder中,注意力层可以使用一个句子中的所有单词(正如我们刚才看到的,给定单词的翻译可以取决于它在句子中的其他单词)。然而,Decoder是按顺序工作的,并且只能注意它已经翻译过的句子中的单词。例如,当我们预测了翻译目标的前三个单词时,我们将它们提供给Encoder,然后Decoder使用Encoder的所有输入来尝试预测第四个单词。

为了在训练过程中加快速度(当模型可以访问目标句子时),Decoder会被输入整个目标,但不允许获取到要翻译的单词(如果它在尝试预测位置2的单词时可以访问位置2的单词,Decoder就会偷懒,直接输出那个单词,从而无法学习到正确的语言关系!)。例如,当试图预测第4个单词时,注意力层只能获取位置1到3的单词。

最初的Transformer架构如下所示,Encoder位于左侧,Decoder位于右侧:

图片来源于Hugging Face

注意,解码器块中的第一个注意力层关联到解码器的所有(过去的)输入,但是第二注意力层使用编码器的输出。因此,它可以访问整个输入句子,以最好地预测当前单词。这是非常有用的,因为不同的语言可以有语法规则将单词按不同的顺序排列,或者句子后面提供的一些上下文可能有助于确定给定单词的最佳翻译。

Encoder模型

“编码器”模型指仅使用编码器的Transformer模型。在每个阶段,注意力层都可以获取初始句子中的所有单词。这些模型通常具有“双向”注意力,被称为自编码模型。

这些模型的预训练通常围绕着以某种方式破坏给定的句子(例如:通过随机遮盖其中的单词),并让模型寻找或重建给定的句子。

“编码器”模型最适合于需要理解完整句子的任务,例如:句子分类、命名实体识别(以及更普遍的单词分类)和阅读理解后回答问题。

该系列模型的典型代表有:

Decoder模型

“解码器”模型通常指仅使用解码器的Transformer模型。在每个阶段,对于给定的单词,注意力层只能获取到句子中位于将要预测单词前面的单词。这些模型通常被称为自回归模型。

“解码器”模型的预训练通常围绕预测句子中的下一个单词进行。

这些模型最适合于涉及文本生成的任务。

该系列模型的典型代表有:

Encoder-Decoder模型

编码器-解码器模型(也称为序列到序列模型)同时使用Transformer架构的编码器和解码器两个部分。在每个阶段,编码器的注意力层可以访问初始句子中的所有单词,而解码器的注意力层只能访问位于输入中将要预测单词前面的单词。

这些模型的预训练可以使用训练编码器或解码器模型的方式来完成,但通常涉及更复杂的内容。例如,T5通过将文本的随机跨度(可以包含多个单词)替换为单个特殊单词来进行预训练,然后目标是预测该掩码单词替换的文本。

序列到序列模型最适合于围绕根据给定输入生成新句子的任务,如摘要、翻译或生成性问答。

该系列模型的典型代表有:

参考文章:

本章简介 - Hugging Face NLP Course

知乎原文链接:

NLP step by step -- 了解Transformer - 知乎 (zhihu.com)

相关推荐

  1. 从零实现诗词GPT大模型:了解Transformer架构

    2024-04-26 14:40:01       14 阅读
  2. Transformer

    2024-04-26 14:40:01       35 阅读
  3. Transformer

    2024-04-26 14:40:01       26 阅读
  4. Transformer

    2024-04-26 14:40:01       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-26 14:40:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-26 14:40:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-26 14:40:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-26 14:40:01       20 阅读

热门阅读

  1. Redis系列:HyperLogLog实现海量数据基数统计

    2024-04-26 14:40:01       17 阅读
  2. 大文件的分片上传和断点上传

    2024-04-26 14:40:01       17 阅读
  3. js将后端返回的blob请求下载

    2024-04-26 14:40:01       15 阅读
  4. Haystack

    Haystack

    2024-04-26 14:40:01      16 阅读
  5. SpringBoot集成rabbitMq

    2024-04-26 14:40:01       16 阅读
  6. python的练习

    2024-04-26 14:40:01       12 阅读
  7. 多线程(74)分段锁

    2024-04-26 14:40:01       13 阅读
  8. Ubuntu20.04下 Django框架搭建、部署、上线项目

    2024-04-26 14:40:01       14 阅读
  9. 一文掌握python面向对象魔术方法(二)

    2024-04-26 14:40:01       13 阅读
  10. C++ 中容器的种类

    2024-04-26 14:40:01       14 阅读
  11. 静态网卡配置centos、kali、ubantu

    2024-04-26 14:40:01       12 阅读