注意力机制与变换器 课前小测验 自然语言处理领域中最重要的一项任务是机器翻译,这是像谷歌翻译这样的工具的基础。在这一部分中,我们将专注于机器翻译,或者更广泛地说,任何序列到序列的任务(也称为句子转换)。 使用RNNs实现序列到序列的方法是通过两个递归网络,其中一个是编码器,它将输入序列压缩成一个隐藏状态;另一个是解码器,它将这个隐藏状态展开为翻译结果。这种方法存在一些问题: 编码器网络的最终状态很难记住句子的开头,因此对于长句来说,模型的质量较差。 序列中的所有词对结果的影响相同。但实际上,在输入序列中,某些词对后续输出的影响往往比其他词更大。 注意力机制提供了一种方法来衡量每个输入向量对RNN每个输出预测的上下文影响。其实现方式是创建输入RNN和输出RNN之间的一些捷径。
自然语言处理领域中最重要的一项任务是机器翻译,这是像谷歌翻译这样的工具的基础。在这一部分中,我们将专注于机器翻译,或者更广泛地说,任何序列到序列的任务(也称为句子转换)。
使用RNNs实现序列到序列的方法是通过两个递归网络,其中一个是编码器,它将输入序列压缩成一个隐藏状态;另一个是解码器,它将这个隐藏状态展开为翻译结果。这种方法存在一些问题:
注意力机制提供了一种方法来衡量每个输入向量对RNN每个输出预测的上下文影响。其实现方式是创建输入RNN和输出RNN之间的一些捷径。这样,在生成输出符号yt时,我们会考虑所有输入隐藏状态hi,但使用不同的权重系数αt,i。

Bahdanau等,2015年中的带有加性注意力机制的编码器-解码器模型,摘自这篇博客文章
注意力矩阵{αi,j}表示特定输入词在生成输出序列中的某个词时所起的作用程度。以下是一个此类矩阵的例子:

Bahdanau等,2015年中的图(图3)
注意力机制负责当前或接近当前自然语言处理领域的最先进水平。然而,添加注意力机制大大增加了模型参数的数量,导致了RNN的扩展问题。RNN扩展的关键限制在于模型的递归性质使其难以批量并行化训练。在RNN中,序列中的每个元素需要按顺序处理,这意味着无法轻松并行化。

谷歌博客中的图
注意力机制的采用加上这种约束导致了如今最先进的变换器模型的诞生,如我们今天使用的BERT到Open-GPT3。
变换器背后的主要思想之一是避免RNN的顺序性质,并创建一种可以在训练过程中并行化的模型。这通过实现两个想法来实现:
位置编码的想法如下:
作者提供的图像
位置嵌入的结果是将原始标记及其在序列中的位置嵌入在一起。
接下来,我们需要在序列中捕获一些模式。为此,变换器使用自注意力机制,本质上是对同一序列作为输入和输出应用注意力。应用自注意力使我们能够考虑到句子中的上下文,并看到哪些词相互关联。例如,它允许我们看到哪些词由指代词(如它)引用,并且还考虑到上下文:

谷歌博客中的图像
在变换器中,我们使用多头注意力以赋予网络捕捉多种不同类型的依赖关系的能力,例如长期与短期词语关系、共指与其他关系等。
TensorFlow笔记本包含有关变换器层实现的更多细节。
在变换器中,注意力用于两个地方:
编码器-解码器注意力非常类似于本节开头描述的RNN中使用的注意力机制。此动画图解释了编码器-解码器注意力的作用。

由于每个输入位置独立映射到每个输出位置,变换器可以比RNN更好地并行化,这使得可以构建更大且更具表现力的语言模型。每个注意力头可以学习不同的词间关系,从而改善下游自然语言处理任务。
BERT(来自变换器的双向编码器表示)是一个非常大的多层变换器网络,对于BERT-base有12层,而对于BERT-large则有24层。该模型首先在一个大型文本数据集(维基百科+书籍)上使用无监督训练(预测句子中的被屏蔽单词)进行预训练。在预训练期间,模型吸收了大量的语言理解能力,这些能力可以在使用其他数据集进行微调时加以利用。这一过程称为迁移学习。

继续在以下笔记本中学习:
在这节课中,你了解了变换器和注意力机制,这些都是自然语言处理工具箱中必不可少的工具。有许多变换器架构的变体,包括BERT、DistilBERT、BigBird、OpenGPT3等,可以进行微调。HuggingFace包提供了训练这些架构的存储库,支持PyTorch和TensorFlow。
声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。