从词向量到 Transformer:NLP 模型演进笔记
NLP
前言
自然语言处理 (Natural Language Processing, NLP) 是人工智能领域的重要研究方向, 融合了语言学、计算机科学、机器学习、数学、认知心理学等多个学科领域的知识,是一门集计算机科学、人工智能和语言学于一体的交叉学科,它包含自然语言理解和自然语言生成两个主要方面, 研究内容包括字、词、短语、句子、段落和篇章等多种层次,是机器语言和人类语言之间沟通的桥梁。它旨在使机器理解、解释并生成人类语言,实现人机之间有效沟通,使计算机能够执行语言翻译、情感分析、文本摘要等任务。
常见模型
Basic Embedding Model
NNLM
Word2vec
FastText
CNN-based Model
TextCNN
DCNN
GCNN
VDCNN
RNN-based Model
LSTM
Bi-LSTM
Seq2Seq
Attention-based Model
AT Seq2Seq
ATAE-LSTM
ABCNN
Transformer-based Model
Transformer
GPT
BERT
XLM
RoBERTa
T5
RNN
前言
循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。
对循环神经网络的研究始于二十世纪 80-90 年代,并在二十一世纪初发展为深度学习算法之一,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的循环神经网络。
循环神经网络具有记忆性、参数共享并且图灵完备(Turing completeness),因此在对序列的非线性特征进行学习时具有一定优势。循环神经网络在自然语言处理(Natural Language Processing, NLP),例如语音识别、语言建模、机器翻译等领域有应用,也被用于各类时间序列预报。引入了卷积神经网络(Convolutional Neural Network, CNN)构筑的循环神经网络可以处理包含序列输入的计算机视觉问题。
Word2vec
前言
对于复杂的自然语言任务进行建模,概率模型应运而生成为首选的方法,但在最开始的时候,学习语言模型的联合概率函数存在致命的维数灾难问题。假如语言模型的词典大小为100000,要表示10个连续词的联合分布,模型参数可能就要有 个。相应的,模型要具备足够的置信度,需要的样本量指数级增加。为了解决这个问题,最早是1986年Hinton等提出分布式表示(Distributed Representation),基本思想是将词表示成n维连续的实数向量。分布式表示具备强大的特征表示能力,n维向量,每维有k个值,便能表示 个特征。
词向量是NLP深度学习研究的基石,本质上遵循这样的假设:语义相似的词趋向于出现在相似的上下文。因此在学习过程中,这些向量会努力捕捉词的邻近特征,从而学习到词汇之间的相似性。有了词向量,便能够通过计算余弦距离等方式来度量词与词之间的相似度。
Mikolov等对词向量的广泛普及功不可没,他们用CBOW和Skip-gram模型训练出来的词向量具有神奇的语意组合特效,词向量的加减计算结果刚好是对应词的语意组合,譬如v(King) - v(Man) + v(Woman) = v(Queen)。这种意外的特效使得Word2vec快速流行起来。至于为什么会有这种行为呢?有意思的是Gittens等做了研究,尝试给出了理论假设:词映射到低维分布式空间必须是均匀分布的,词向量才能有这个语意组合效果。
CBOW和Skip-gram是Word2vec的两种不同训练方式。CBOW指抠掉一个词,通过上下文预测该词;Skip-gram则与CBOW相反,通过一个词预测其上下文。
以CBOW为例。CBOW模型是一个简单的只包含一个隐含层的全连接神经网络,输入层采用one-hot编码方式[^one-hot],词典大小为V;隐含层大小是N;输出层通过softmax函数得到词典里每个词的概率分布。层与层之间分别有两个权重矩阵 和 。词典里的每个单词都会学习到两个向量vc和vw,分别代表上下文向量和目标词向量。因此,给予上下文c,出现目标词w的概率是:p(w|c),该模型需要学习的网络参数θ 。
[^one-hot]: One-hot 编码为每个类别创建一个二进制向量,其中只有一个元素为 1,其余元素为 0。1 的位置表示该类别。比如“I”:[1, 0, 0]
词向量是用概率模型训练出来的产物,对训练语料库出现频次很低甚至不曾出现的词,词向量很难准确地表示。词向量是词级别的特征表示方式,单词内的形态和形状信息同样有用,研究者提出了基于字级别的表征方式,甚至更细粒度的基于 Byte 级别的表征方式。2017 年,Mikolov 等提出用字级别的信息丰富词向量信息。此外,在机器翻译相关任务里,基于 Byte 级别的特征表示方式 BPE 还被用来学习不同语言之间的共享信息,主要以拉丁语系为主。2019 年,Lample 等提出基于 BERT 优化的跨语言模型 XLM,用 BPE 编码方式来提升不同语言之间共享的词汇量。
虽然通过词向量,一个单词能够很容易找到语义相似的单词,但单一词向量,不可避免一词多义问题。对于一词多义问题,最常用有效的方式便是基于预训练模型,结合上下文表示单词,代表模型有 ELMo、GPT 和 BERT,都能有效地解决这个问题。
词,可以通过词向量进行表征,自然会有人思考分布式表示这个概念是否可以延伸到句子、文章、主题等。词袋模型 Bag-of-Words 忽略词序以及词语义,2014 年 Mikolov 等将分布式向量的表示扩展到句子和文章,模型训练类似 word2vec。关于句子的向量表示,2015 年 Kiros 等提出 skip-thought,2018 年 Logeswaran 等提出改进版 quick-thought。
Transformer
前言
Transformer 架构:主要由输入部分(输入输出嵌入与位置编码)、多层编码器、多层解码器以及输出部分(输出线性层与 Softmax)四大部分组成。
Transformer 的原理
输入线性变换:对于输入的 Query(查询)、Key(键)和 Value(值)向量,首先通过线性变换将它们映射到不同的子空间。这些线性变换的参数是模型需要学习的。
分割多头:经过线性变换后,Query、Key和Value向量被分割成多个头。每个头都会独立地进行注意力计算。
缩放点积注意力:在每个头内部,使用缩放点积注意力来计算Query和Key之间的注意力分数。这个分数决定了在生成输出时,模型应该关注Value向量的部分。
注意力权重应用:将计算出的注意力权重应用于Value向量,得到加权的中间输出。这个过程可以理解为根据注意力权重对输入信息进行筛选和聚焦。
拼接和线性变换:将所有头的加权输出拼接在一起,然后通过一个线性变换得到最终的Multi-Head Attention输出。
Scaled Dot-Product Attention(缩放点积注意力):它是 Transformer 模型中多头注意力机制的一个关键组成部分。
Query、Key 和 Value 矩阵:
Query矩阵(Q):表示当前的关注点或信息需求,用于与Key矩阵进行匹配。
Key矩阵(K):包含输入序列中各个位置的标识信息,用于被Query矩阵查询匹配。
Value矩阵(V):存储了与Key矩阵相对应的实际值或信息内容,当Query与某个Key匹配时,相应的Value将被用来计算输出。
点积计算:
通过计算Query矩阵和Key矩阵之间的点积(即对应元素相乘后求和),来衡量Query与每个Key之间的相似度或匹配程度。
缩放因子:
由于点积操作的结果可能非常大,尤其是在输入维度较高的情况下,这可能导致softmax函数在计算注意力权重时进入饱和区。为了避免这个问题,缩放点积注意力引入了一个缩放因子,通常是输入维度的平方根。点积结果除以这个缩放因子,可以使得softmax函数的输入保持在一个合理的范围内。
Softmax 函数:
将缩放后的点积结果输入到softmax函数中,计算每个Key相对于Query的注意力权重。Softmax函数将原始得分转换为概率分布,使得所有Key的注意力权重之和为1。
加权求和:
使用计算出的注意力权重对Value矩阵进行加权求和,得到最终的输出。这个过程根据注意力权重的大小,将更多的关注放在与Query更匹配的Value上。
BERT
BERT:BERT 是一种基于 Transformer 的预训练语言模型,它的双向性来自 MLM 预训练目标,这使得模型可以同时考虑输入序列的前后上下文信息。
输入层(Embedding):
Token Embeddings:将单词或子词转换为固定维度的向量。
Segment Embeddings:用于区分句子对中的不同句子。
Position Embeddings:由于 Transformer 模型本身不具备处理序列顺序的能力,所以需要加入位置嵌入来提供序列中单词的位置信息。
编码层(Transformer Encoder):BERT 模型使用双向 Transformer 编码器进行编码。
输出层(Pre-trained Task-specific Layers):
MLM 输出层:用于预测被掩码(masked)的单词。在训练阶段,模型会随机遮盖输入序列中的部分单词,并尝试根据上下文预测这些单词。
NSP 输出层:用于判断两个句子是否为连续的句子对。在训练阶段,模型会接收成对的句子作为输入,并尝试预测第二个句子是否是第一个句子的后续句子。
参考资料:
Deep Learning for NLP · 解读NLP深度学习的各类模型 https://zhuanlan.zhihu.com/p/655971476
2023年!自然语言处理(NLP)10 大预训练模型 https://cloud.tencent.com/developer/article/2234046
循环神经网络 https://baike.baidu.com/item/%E5%BE%AA%E7%8E%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/23199490
深度学习笔记(四)——循环神经网络(Recurrent Neural Network, RNN) https://blog.csdn.net/ADwenwen/article/details/125349227
神经网络算法 - 一文搞懂 Transformer https://mp.weixin.qq.com/s?__biz=MjM5NzEyMzg4MA==&mid=2649506240&idx=4&sn=3f17bcb808952ad514e94fda47840a55&chksm=bf23912302c837b064b0cf9027a61f225bf40e5edde524d3119713ca9b68cdb78435cc61eb94&scene=27
神经网络算法 - 一文搞懂 Transformer(总体架构 & 三种注意力层)
【官方双语】直观解释注意力机制,Transformer 的核心 | 【深度学习第 6 章】 https://www.bilibili.com/video/BV1TZ421j7Ke