本章将介绍自然语言处理领域的革命性进展。注意力(Attention)机制的提出,从根本上解决了传统序列模型(如RNN/LSTM)在处理长距离依赖关系时的“遗忘”问题。在此基础上诞生的Transformer架构,完全摒弃了循环结构,为并行计算和模型扩展打开了大门。而BERT模型则通过创新的双向预训练范式,将NLP模型对语言的理解能力推向了前所未有的新高度,开启了预训练大模型的时代。

注意力机制 (Attention)

Transformer

        ▪ 核心 -> 自注意力 (Self-Attention)

        ▪ 结构 -> 编码器-解码器 (Encoder-Decoder)

 BERT

        ▪ 任务 -> 掩码语言模型 (Masked LM)

        ▪ 任务 -> 下一句预测 (NSP)

一、注意力机制

1. 注意力

传统的基于RNN的Encoder-Decoder模型在处理机器翻译等任务时,通常会将整个输入句子编码成一个固定长度的向量。这个向量成为了连接编码器和解码器的唯一桥梁,也因此构成了一个“信息瓶颈”。对于长句子而言,这个固定长度的向量很难包含所有重要的信息,导致模型在翻译后期容易“遗忘”句子开头的信息。

注意力机制的核心思想是打破这种信息瓶颈。它允许解码器在生成输出序列的每一步时,都能够“回顾”并“关注”到编码器输出的所有部分。具体来说,解码器会根据当前要生成的词,为编码器的每个输出状态计算一个“注意力权重”,权重越高的部分表示与当前生成任务越相关。然后,解码器将所有编码器状态根据这些权重进行加权求和,得到一个动态的上下文向量,并利用这个向量来预测下一个词。

核心思想:通过输入数据的权重分布,决定哪部分需被重点关注

这个过程可以抽象为Query, Key, Value模型:

• Query (Q): 来自解码器的当前状态,代表“我需要什么信息”。

• Key (K): 来自编码器的各个状态,代表“我能提供什么信息”。

• Value (V): 同样来自编码器的各个状态,是实际的信息内容。 通过计算Query和所有Key的相似度,得到注意力权重,再用这些权重去加权所有的Value,就得到了最终的上下文信息。

2. 自注意力

二、Transformer

核心组件:

• 编码器 (Encoder) 和 解码器 (Decoder) 栈: Transformer由多个相同的编码器和解码器层堆叠而成。每个编码器层包含一个自注意力模块和一个前馈神经网络,每个解码器层则额外包含一个对编码器输出进行注意的模块。

• 多头自注意力 (Multi-Head Self-Attention): 这是Transformer的核心。它不是只进行一次注意力计算,而是将Query, Key, Value向量线性投影到多个不同的“表示子空间”中,在每个子空间并行地进行注意力计算。最后将所有“头”的输出拼接起来并再次进行线性变换。这使得模型能够同时关注来自不同位置、不同方面的信息。例如,一个头可能关注语法关系,另一个头可能关注语义关系。

• 位置编码 (Positional Encoding): 由于Transformer模型本身不包含任何循环或卷积结构,它无法感知到词语在句子中的顺序。为了解决这个问题,模型在输入词嵌入的基础上,加入了位置编码向量。这些向量是根据词语在序列中的绝对或相对位置计算得出的,为模型提供了关于词序的关键信息。

三、 BERT

与GPT系列使用Transformer的解码器不同,BERT只使用了Transformer的编码器部分。其核心创新在于通过两个巧妙的预训练任务,实现了真正意义上的双向语言表示学习。

BERT的预训练任务:

1. 掩码语言模型 (Masked Language Model, MLM): 这个任务类似于完形填空。在训练时,BERT会随机地将输入句子中15%的词用一个特殊的 [MASK] 标记替换掉,然后让模型根据该词的左右双向上下文来预测被遮盖的原始词语。这种双向性使得BERT能够学习到比传统单向语言模型(只能看到左侧上下文)更深刻、更全面的词语表示。

2. 下一句预测 (Next Sentence Prediction, NSP): 这个任务旨在让BERT理解句子之间的关系。训练时,模型会接收一对句子A和B,并需要判断句子B是否是句子A在原文中的下一句。其中,50%的训练样本是真实的连续句子对,另外50%则是随机抽取的句子对。通过这个二元分类任务,BERT学习到了捕捉句子级别关系(如连贯性、因果关系等)的能力。

通过在这两个任务上的大规模预训练,BERT学习到的深度语言表示可以被方便地“微调 (fine-tune)”以适应各种下游NLP任务,如文本分类、命名实体识别、问答等,并取得了当时最先进的性能。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐