# Natural Language Processing 自然语言处理

# 什么是自然语言处理

NLP 是语言学和机器学习的一个领域,专注于理解与人类语言相关的所有内容。NLP 任务的目的不仅是单独理解单个单词,而且能够理解这些单词的上下文。

以下是常见 NLP 任务的列表,以及每个任务的一些示例

  • Classifying whole sentences 对整个句子进行分类:获取评论的情绪,检测电子邮件是否为垃圾邮件,确定句子在语法上是否正确或两个句子在逻辑上是否相关
  • Classifying each word in a sentence 对句子中的每个单词进行分类:识别句子的语法组成部分(名词、动词、形容词)或命名实体(人、位置、组织)
  • Generating text content 生成文本内容:根据提示自动生成文本,使用屏蔽的单词填充文本中的空白
  • Extracting an answer from a text 从文本中提取答案:给定问题和上下文,根据上下文中提供的信息提取问题的答案
  • Generating a new sentence from an input text 从输入文本生成新句子:将文本翻译成另一种语言,对文本进行总结

NLP 并不局限于书面文本。它还解决了语音识别和计算机视觉中的复杂挑战,例如生成音频样本的脚本或图像的描述。

# 为什么它具有挑战性?

计算机处理信息的方式与人类不同。例如,当我们读到 “I am hungry” 这句话时,我们很容易理解它的含义。同样,给定两个句子,如 “我饿了” 和 “我很伤心”,我们能够很容易地确定它们有多相似。对于机器学习 (ML) 模型,此类任务更加困难。文本的处理方式必须使模型能够从中学习。由于语言很复杂,我们需要仔细考虑必须如何进行这种处理。关于如何表示文本已经做了很多研究,我们将在下一章中介绍一些方法。

# transformer

# 历史

1663749139344

从广义上讲,它们可以分为三类:

  • GPT-like (also called auto-regressive 自回归 Transformer models)
  • BERT-like (also called auto-encoding 自编码 Transformer models)
  • BART/T5-like (also called sequence-to-sequence 序列到序列 Transformer models)

# Transformers 是语言模型

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

这种类型的模型对它所训练的语言有统计的理解,但它对特定的实际具体任务不是很有用。因此,一般的预训练模型然后经历一个称为 transfer learning 迁移学习的过程。在此过程中,模型以监督方式进行微调 - 即使用人工注释的标签 - 针对给定任务。

任务的一个例子是预测句子中的下一个单词,并阅读了前 n 个单词。这称为 causal language modeling 因果语言建模,因为输出取决于过去和现在的输入,而不是未来的输入。

1663749517117

另一个示例是 masked language modeling 屏蔽语言建模,其中模型预测句子中的屏蔽单词。

1663749546181

# Transformers 是大模型

除了一些异常的(如 DistilBERT)之外,实现更好性能的一般策略是通过增加模型的大小以及它们被预训练的数据量。

从头开始训练耗时,污染环境(二氧化碳)

# Transfer Learning 迁移学习

Pretraining 预训练是从头开始训练模型的行为:权重随机初始化,训练在没有任何先验知识的情况下开始。

1663749697873

此预训练通常在大量数据上完成。因此,它需要非常大的数据语料库,并且训练可能需要长达数周的时间。

另一方面,Fine-tuning 微调是在模型经过预训练后完成的训练。若要执行微调,请首先获取预先训练的语言模型,然后使用特定于任务的数据集执行其他训练。等等 - 为什么不直接为最终任务进行训练呢?有几个原因:

  • 预训练的模型已在与微调数据集有一些相似之处的数据集上进行训练。因此,微调过程能够利用初始模型在预训练期间获得的知识(例如,对于 NLP 问题,预训练模型将对您用于任务的语言有某种统计理解)。
  • 由于预训练的模型已经在大量数据上进行了训练,因此微调需要更少的数据来获得不错的结果。
  • 出于同样的原因,获得良好结果所需的时间和资源要低得多。

例如,可以利用在英语上训练的预训练模型,然后在 arXiv 语料库上对其进行微调,从而产生基于科学 / 研究的模型。微调只需要有限数量的数据:预训练模型获得的知识是 “转移的”,因此称为迁移学习。

1663749866983

因此,微调模型具有较低的时间、数据、财务和环境成本。迭代不同的微调方案也更快、更容易,因为训练比完整的预训练限制要小。

这个过程也将比从头开始训练(除非你有很多数据)获得更好的结果,这就是为什么你应该总是尝试利用一个预先训练的模型 —— 一个尽可能接近你手头任务的模型 —— 并对其进行微调。

# 一般架构

# 介绍

模型主要由两个部分组成:

  • Encoder 编码器(左):编码器接收输入并构建其表示形式(其特征 features)。这意味着模型经过优化,可以从输入中获取理解。
  • Decoder 解码器(右):解码器使用编码器的表示(特征)以及其他输入来生成目标序列。这意味着模型已针对生成输出进行了优化

1663749955897

每一部分都可以独立使用,具体取决于任务:

  • 仅编码器模型:适用于需要了解输入的任务,例如句子分类和命名实体识别。
  • 仅解码器模型:适用于生成任务,如文本生成。
  • 编码器 - 解码器模型或序列到序列模型:适用于需要输入的生成任务,如翻译或 summarization 总结(还是概括?)。

# 注意层 Attention layers

Transformer models 模型的一个关键特征是它们使用称为注意力层的特殊层构建。现在,需要知道的是,在处理每个单词的表示时,该层将告诉模型特别注意传递的句子中的某些单词(并且或多或少地忽略其他单词)。

同样的概念也适用于与自然语言相关的任何任务:一个词本身具有意义,但该含义受到上下文的深刻影响,上下文可以是正在研究的单词之前或之后的任何其他单词(或单词)。

# 原始架构 The original architecture

Transformer 架构最初是为翻译而设计的。在训练期间,编码器接收特定语言的输入(句子),而解码器接收所需目标语言的相同句子。在编码器中,注意力层可以使用句子中的所有单词(因为给定单词的翻译可能取决于句子中之后和之前的内容)。然而,解码器按顺序工作,只能注意到 / 用它已经翻译的句子中的单词(即 只有当前生成的单词之前的单词)。例如,当我们预测了已翻译目标的前三个单词时,我们将它们交给解码器,然后解码器使用编码器的所有输入来尝试预测第四个单词。

为了在训练期间加快速度(当模型可以访问目标句子时),整个目标句子被一次性送入解码器,但不允许使用未来的单词(如果它在尝试预测位置 2 的单词时可以访问位置 2 的单词,那么问题不会很难!)例如,当尝试预测第四个单词时,注意力层只能访问位置 1 到 3 中的单词。

原始的 Transfor1mer 架构如下所示,编码器在左侧,解码器在右侧:

1663750819658

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

attention mask 注意力掩码也可以在编码器 / 解码器中使用,以防止模型注意一些特殊单词 - 例如,在批处理句子时用于使所有输入具有相同的长度的特殊填充词。

# Encoder models

编码器模型仅使用 Transformer 的编码器。在每个阶段,注意力层可以访问初始句子中的所有单词。这些模型通常被描述为具有 “双向” 注意力 “bi-directional” attention,并且通常称为 auto-encoding models 自编码模型。

这些模型的预训练通常围绕着以某种方式破坏给定的句子(例如,通过屏蔽其中的随机单词)并赋予模型查找或重建初始句子的任务。

编码器模型最适合需要理解完整句子的任务,例如句子分类、命名实体识别(以及更一般的单词分类)和提取性问题回答。

该系列模型的代表包括:

  • ALBERT
  • BERT
  • DistilBERT
  • ELECTRA
  • RoBERTa

# Decoder models

解码器模型仅使用 Transformer 的解码器。在每个阶段,对于给定的单词,注意力层只能访问句子中位于它前面的单词。这些模型通常称为 auto-regressive models 自回归模型。

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

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

该系列模型的代表包括:

  • CTRL
  • GPT
  • GPT-2
  • Transformer XL

# Sequence-to-sequence models

Encoder-decoder 编码器 - 解码器模型(也称为序列到序列模型 sequence-to-sequence models )使用 Transformer 架构的两个部分。在每个阶段,编码器的注意力层可以访问初始句子中的所有单词,而解码器的注意力层只能访问位于输入中给定单词之前的单词。

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

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

该系列模型的代表包括:

  • BART
  • mBART
  • Marian
  • T5

# 总结 Summary

Transformer 模型如何在高层次上工作,并讨论了迁移学习和微调的重要性。一个关键方面是,您可以使用完整的架构或仅使用编码器或解码器,具体取决于您要解决的任务类型。下表对此进行了总结:

1663751641014