前提人类使用自然语言交流而计算机只能理解二进制代码。为了让计算机处理文字信息需要将文字转化为数学表达形式。在机器学习领域常用的one-hot编码方式虽然简单直接但并不适合自然语言处理任务。这种编码会导致特征空间过于稀疏无法体现词语之间的语义关联例如苹果和香蕉都属于水果类别语义上应该具有相似性因此需要采用词嵌入技术通过降维和特征提取来学习词语的语义特征。然而仅靠词嵌入还不足以完整理解语言。词语的含义会随着上下文语境而变化这就是序列建模需要解决的问题理解当前词往往需要结合上下文语境。优秀的语言模型必须能够捕捉这种上下文相关的语义变化。RNNRecurrent Neural Network循环神经网络RNN是最早提出的序列模型其结构如下图所示。模型将文本中的每个词 x 依次输入从前面的词开始处理先提取当前词的特征再将已处理词的特征向量传递给下一层进行分析。这种机制通过引入时序关系有效解决了文本处理的上下文问题但仍存在以下不足梯度爆炸/消失问题处理长文本需要深层网络容易引发梯度爆炸或消失。梯度爆炸可通过梯度裁剪gradient clipping缓解使用tanh或ReLU激活函数则可延缓梯度消失原因前文已述。单向语境限制模型仅能捕捉前文信息无法获取后文对当前词义的影响。长文本处理缺陷模型在传递信息时会将所有已处理词的特征向量完整传输至下一层。但实际上影响当前层的关键信息可能来自较早的某个词这种全量传递机制会导致长文本理解偏差降低模型表现。BRNNBidirectional RNN双向循环神经网络虽然增强了后文信息的捕捉能力但仍保留了传统循环神经网络的其他固有缺陷。Deep RNN深度RNN深度循环神经网络在原本RNN基础上堆叠几层增强模型的表现能力。Gated Recurrent UnitGRU门控循环单元通过引入记忆单元改进了传统RNN的结构。该单元能够选择性存储前文的关键输出而非全盘接收所有历史信息。这一设计有效解决了RNN在处理长文本时的缺陷通过过滤无效信息来减轻当前层的分析负担显著提升了模型对长序列的处理能力。下图展示了记忆单元的具体结构。记忆单元用以下等式决定是否更新当前记忆单元。LSTMlong short term memoryLSTM是GRU的复杂版本GRU只用一个门控来决定是否更新记忆单元LSTM用遗忘门和更新门来决定是否更新当前记忆单元。尽管LSTM在长文本处理方面有所改进但其与RNN一样采用串行计算模式。这种计算方式类似于计算机组成原理中的串行加法器存在明显的性能瓶颈每个单元的计算必须等待前序单元完成导致时间成本较高。正是这一局限性制约了LSTM的实际应用。而本期介绍的transformer架构则实现了并行计算它的出现直接引发了大模型研发的狂潮。TransformerTransformer模型的核心架构基于自注意力机制self-attention这种设计能有效捕捉全文语义关联是一种高效的特征提取方法。该架构自问世以来其庞大的参数量导致单次训练成本高达百万美元级别对普通研究者构成较高门槛。造成参数量巨大的主要原因有二其一自注意力机制保持输入输出维度一致支持多层堆叠其二基础文本特征提取维度设置为768维并可进一步扩展。Self-attention注意力机制衡量的是对特定信息的关注程度即在上下文语境中某些词语对当前词语特征理解的重要性。最初计算两个词语间的注意力权重时直接采用它们特征向量的点积运算。为什么点积能有效计算注意力分配点积可以反映两个向量的相关性当向量元素符号相反时点积结果为负值相关性较低当向量元素符号相同时点积结果为正相关性较高若同号向量的元素值较大则点积结果更高表示更强的相关性。从几何角度看点积公式可表示为a·b |a||b|cosθ。其中cosθ体现向量方向关系对应前述的符号相关性向量模长|a|和|b|则表征特征强度二者共同决定了最终的注意力权重。直接使用向量点积计算注意力会导致模型无法区分关注目标和内容特征使注意力机制退化为简单的相似度匹配难以处理复杂语境。为此引入了queryq和keyk矩阵当前词的特征向量先通过 q 矩阵转换相当于发出查询再与其他词经 k 矩阵转换后的特征向量进行点积相当于用钥匙验证匹配程度。这样就能计算当前词对所有其他词的相对重要性。由于注意力权重需要归一化总和为1后续会通过softmax层进行标准化处理。此外还引入了valuev矩阵最终输出是特征向量经v矩阵转换后与注意力权重的加权组合。v矩阵的作用在于增强模型对复杂语境的表征能力。这种并行计算的注意力机制显著提升了模型的运算效率。多头注意力机制多头注意力机制的基本原理是将输入维度进行拆分计算。以768维的q、k、v为例采用四头注意力时系统会将其均分为四个192维的子向量然后分别进行独立的注意力计算。位置信息由于缺乏位置信息上述机制无法区分类似我爱你和你爱我的语义差异。虽然模型会认为这两个句子中的我和你是相同的但实际上它们在语境中的角色完全不同。为此我们需要引入位置编码机制。一种简单的实现方式是采用one-hot编码来表示位置信息然后通过全连接层将其映射到与输入向量相同的维度。Transformer架构该架构如下图所示。通过前面的学习可知词嵌入向量和位置向量叠加后作为输入x经过多头注意力机制处理再通过BN层进行归一化。同时模型加入了残差连接构成最基本的模型单元。整个架构就是由多个这样的单元堆叠而成。Transformer架构中左侧部分称为编码器右侧部分称为解码器。拆分后编码器部分形成了分类领域的顶尖模型BERT解码器部分则衍生出生成领域的领先模型GPT。这种分工的主要原因在于采用迁移学习策略将上下游任务拆分进行独立训练。BertBERT模型的输入由词嵌入向量、位置向量和段落向量叠加而成。需要注意的是标点符号也会被当作独立的词嵌入输入。每个词对应一个token经过特征提取后每个token都会映射到高维特征空间中的一个向量。段落向量作为段落编码帮助模型区分不同句子。在词嵌入向量中有一些特殊的token比如CLS在第一个输入用于指示模型开始分类也有句号token标识句子结尾。BERT的一个显著特点是输入序列的首个 token 必须是 CLS嵌入这是分类任务的固定规范。CLS的特殊性在于它能捕捉全局语义关系。BERT是Transformer的编码器pooler output 的输入是一个二维矩阵。由于BERT用于分类任务需要输出一维向量常见处理方法有以下四种仅输出CLS向量平均池化最大池化其他处理方法经过 Pooler output之后输出向量经过一个分类头即可完成分类任务。训练方式Bert通常采用自监督预训练随机遮盖掉给定文段中某些字之后模型预测遮盖部分的字类似完形填空方式训练。也可以采用预测下一段话方式给模型读入句子前半部分让模型预测下半部分。