注意力机制是极为精巧的数据处理技术,它使得模型在处理一个序列时,不但关注序列的不同位置,还关注序列内部元素彼此之间的关系。自注意力机制是注意力机制的一种拓展,它提供了一种更为灵活且强大的方式来处理序列数据,允许模型在序列的任何位置之间建立直接的依赖关系。自注意力机制的引入,特别是在Transformer模型中,已然成为NLP领域的一个里程碑,极大地推动了预训练语言模型的发展。
下面通过一个简单的例子来阐明自注意力机制的核心要素,随后再简要介绍其在Transformer模型中的实现。
假设你遇到如下填空题,如图2-5所示,这是一个典型的注意力机制概念图。
买苹果还是买______
图2-5 “苹果”的注意力机制概念图
如果没有更多的上下文,你很难确定这个空格应该填什么内容。但是如果上下文是家里的水果吃完了,那么你可以推测这个空格应填一种水果,比如“橘子”。如果上下文是妻子的手机坏了,那么你可以推测这个空格应填“华为”或者“小米”,因为此时“苹果”指的是手机。
通过图2-5的演示,我们可以将注意力理解为关键词与上下文的关联关系。假设通过注意力机制将空格内容与手机联系起来,那么填空的内容即为选择不同手机品牌的概率问题。如果注意力机制将空格内容与水果联系起来,那么填空的内容即为选择不同水果的概率问题。而不同品牌或水果出现的概率,与提供的训练样本数据相关。
注意力机制最早出现在论文“Neural Machine Translation by Jointly Learning to Align and Translate”中。该论文提出了一种新的神经机器翻译模型,结合了编码器-解码器架构与注意力机制,使得模型能够关注输入序列中与当前输出最相关的部分。最初引入的注意力机制主要用于加权编码器的输出,以便解码器能够聚焦输入序列中与当前生成词最相关的部分。此机制通常作为编码器-解码器架构的组成部分使用。
论文“Neural Machine Translation by Jointly Learning to Align and Translate”的注意力机制分为两部分,分别为学习全局对应关系和学习局部对应关系。
模型采用一个单一的注意力机制来学习源语言与目标语言之间的全局对应关系。具体来说,模型首先对源语言和目标语言的每个词进行词嵌入编码,得到词向量。然后,使用注意力机制计算每个目标语言词与所有源语言词的相似度。最后,根据注意力权重对源语言词进行加权求和,得到一个与目标语言词相关的上下文向量。
模型首先使用第一个阶段的上下文向量作为查询向量,然后使用源语言词向量作为键向量和值向量,最后通过使用注意力机制计算每个目标语言词与所有源语言词的局部对应关系。
自注意力机制如何抓取句子中的关键信息?其基本原理是词语间相似性的比较。在注意力机制中,每个词语会与其他词语进行相似性比较,并根据相似性的大小决定该词语在句子中的重要性。这种相似性比较能够帮助模型更好地理解句子中的语义关系,从而更准确地捕捉句子的语义信息。
它的具体原理可以分三部分进行解释,分别是词嵌入转换、相似度计算、空间变换。
(1)词嵌入转换
将文本信息转换成向量表示,这一步是为了让计算机能够理解文本信息,因为计算机只能处理数字信息。好的词嵌入模型能够让计算机更好地理解文本,从而更好地捕捉文本的语义信息。
(2)相似度计算
计算一句话中每个词与其他词的相似度。这一步是为了找到一句话中每个词与其他词的关联程度。
(3)空间变换
针对词嵌入向量数据进行不同的变换,寻找最合适的变换方式,以更好地捕捉词与词之间的语义关系。
下面用一个简单的例子来说明这个过程。假设输入以下句子:
老婆手机坏了,买一台苹果还是安卓?
首先,计算机会从文本中提取词语,并将这些词语转换为向量表示。高质量的词嵌入模型能够更好地帮助计算机理解文本,进而更准确地捕捉语义信息。我们使用预训练模型BERT-base-Chinese,并通过PCA将词向量降维至二维,从而对这两句话中的词语进行可视化处理。图2-6展示了词嵌入向量的可视化效果。
图2-6 二维空间的词嵌入向量的可视化效果
注意力机制在处理序列(如文本)时,模型能够动态聚焦于序列中的某些部分。该机制使模型能够识别并赋予句子中的关键词更高权重,从而提高信息处理的效率与效果。其处理流程大致分为以下4步。
1)相似度计算。模型计算句中每个词(称为“查询”)与所有其他词(称为“键”)之间的相似度,通常通过点积或其他相关性度量实现。
2)标准化。接下来,使用Softmax函数对这些相似度分数进行标准化,使每个词对应的所有分数之和等于1。这一步的目的是将原始相似度分数转换为概率分布,突出句子中与当前词最相关的词。
3)加权和。对每个词进行标准化评分后,对句子中所有词的“值”进行加权求和,生成加权表示。此步骤聚焦于与当前词最相关的部分,降低或忽略与当前词关系较弱部分的影响。
4)输出。最终,模型为句子中的每个词生成加权表示,这些表示捕捉了句子中各词之间的相互关系及其对当前词的相对重要性。
我们对上述词嵌入向量进行了相似度计算,词语之间的相似度计算结果如图2-7所示。
图2-7 相似度计算结果
通过Softmax的标准化,我们可以得到每个词语对于其他词语的权重,通过“加权和”计算,实现基于注意力的词相关性的更新,词嵌入和注意力权重嵌入的对比如图2-8所示。
图2-8 词嵌入和注意力权重嵌入的对比
图2-8左侧展示了原始词嵌入模型的输出,右侧则为通过注意力机制计算的权重。通过对比可知,增加注意力权重后产生了三方面的变化。
❑“一台手机坏了”的位置更紧密,使得与其他词组的分组更加明显。
❑“买”和“安卓”词语的关系更紧密。
❑“安卓”和“苹果”的位置关系更紧密,可通过纵坐标的数值变化判断。
上面的案例仅是一个简单的注意力权重计算模拟。实际上,在Transformer模型中,注意力机制通过多头注意力机制(Multi-Head Attention)实现。多头注意力机制使模型能够同时关注输入序列的不同部分,从而提升模型的表达能力和泛化能力。