Transformer实战——从词袋模型到Transformer:NLP技术演进
Transformer实战——从词袋模型到Transformer:NLP技术演进
- 0. 前言
- 1. NLP 方法的演变
- 2. 传统 NLP 方法
- 2.1 语言建模与生成
- 3. 利用深度学习
- 3.1 RNN 模型中的词序
- 3.2 LSTM 和 GRU
- 3.3 上下文词嵌入与迁移学习
- 4. Transformer 架构
- 4.1 注意力机制
- 4.2 多头注意力机制
- 4.3 Transformer 与迁移学习
- 5. 多模态学习
- 小结
- 系列链接
0. 前言
在过去数年间,自然语言处理 (Natural Language Processing
, NLP
) 领域已经取得了突破性进展。经历了多个不同的范式,进入了 Transformer
架构时代。我们能够更加有效地表示单词或句子,从而解决 NLP
任务。另一方面,文本输入与其他模态(如图像)的融合应用也逐渐兴起。对话式人工智能 (Artificial Intelligence
, AI
) 迎来了一个新的时代,开发出了能够像人类一样回答问题、描述概念,甚至一步步解决数学方程式的聊天机器人。毫无疑问,Transformer
模型是这一巨大进步的关键因素之一。
寻找不同自然语言之间、自然语言与图像之间、自然语言与编程语言之间,甚至更广泛地,自然语言与任何其他模态之间的跨语义理解,为我们打开了一扇新大门,使我们能够将自然语言作为主要输入,执行人工智能领域中的许多复杂任务。最简单的例子是,通过简单描述我们想要在图片中寻找的内容,模型就能给出正确结果。
模型通过持续学习和改进,逐渐能够用于处理不同任务。最初,使用分布式语义和 n-gram
语言模型理解单词和文档的意义,这些方法存在一些局限性。另一方面,随着新的跨模态技术的兴起,新的语言模型训练方法,特别是大型语言模型 (Large Language Model
, LLM
)的出现,使得许多不同的应用场景得以实现。
经典的深度学习 (Deep Learning
, DL
) 架构显著提升了 NLP
任务的性能,并克服了传统方法的局限性。循环神经网络 (Recurrent Neural Network, RNN) 和卷积神经网络 (Convolutional Neural Network
, CNN
) 是广泛使用的深度学习架构,但这些模型也面临着不同的挑战。近年来,Transformer
模型逐渐成为处理 NPL
任务的标准架构,消除了其他模型的缺点。它不仅能够解决单语种任务,还在多语种、多任务处理方面表现出色。在本节中,我们将首先探讨注意力机制,简要概述 Transformer
架构,并对比 Transformer
模型与其它 NLP
模型的区别。
1. NLP 方法的演变
NLP
在过去数年间发生了突破性进展,近年来,NLP
的发展主要以 Transformer
架构为基础。Transformer
架构是从各种基于神经网络的 NLP
方法演变成的一种基于注意力的编码器-解码器架构,并且仍在不断发展。Transformer
架构及其变体因以下特征而变得越来越受欢迎:
- 通过自注意力机制实现的上下文词嵌入
- 注意力机制解决了将输入句子所有信息强制编码为一个上下文向量中的问题
- 优异的子词分词算法,用于处理未见过的单词或稀有单词
- 可并行化的架构,使得训练和微调速度更快
- 模型压缩(蒸馏、量化等)
- 迁移学习 (
Transfer Learning
,TL
) 能力,模型可以轻松适应新任务或新语言 - 跨语言、多语言和多任务学习能力
- 多模态训练
传统 NLP
方法如 n-gram
语言模型、基于 TF-IDF
的模型、BM25
信息检索模型和独热编码的文档-词矩阵用于解决一系列 NLP
任务,包括序列分类、语言生成和机器翻译。然而,这些传统方法存在多种局限性,例如处理稀疏数据、稀有单词和长期依赖关系时存在问题。为了解决这些挑战,提出了基于深度学习的方法,如 RNN
、CNN
和前馈神经网络 (Feed-Forward Neural Network
, FFNN
),以及若干变体。
随着语料库规模的增加,TF-IDF
模型的维度会迅速增加,导致维度灾难问题。2013
年,word2vec (由两层 FFNN
组成的词编码模型)通过生成紧凑且密集的词向量(即词嵌入)解决了维度灾难问题。word2vec
模型通过将无监督文本数据转化为有监督数据(自监督学习),即通过使用邻近的上下文词来预测目标词,能够快速且高效的创建静态词嵌入。而 GloVe
模型则认为,基于计数的模型在某些情况下优于神经网络模型,利用语料库的全局和局部统计信息,通过基于词与词之间的共现统计信息来学习词嵌入。
词嵌入在一些句法和语义任务中非常有效,如下图所示,图中展示了嵌入向量之间的距离如何用于基于向量的推理。例如,可以从 “Man
” 和 “Woman
” 之间的距离来推断出泛化的性别关系,即语义关系 (semantic relation
)。然后,可以通过将演员 “Actor
” 一词的向量与前述的距离量相加,得到女演员 “Actress
” 的向量。同样,还可以学习到句法关系 (syntactic relation
),比如单词的复数形式,例如给定 “Actor
”、“Actors
” 和 “Actress
” 的向量,可以估算出 “Actresses
” 的向量。
词嵌入逐渐成为深度学习模型的基本组成部分,使用 RNN
和 CNN
架构作为序列到序列 (seq2seq
) 问题中的编码器和解码器,其中每个词元 (token
) 通过嵌入表示。早期模型面临的主要挑战是多义词(具有多个含义的词),由于每个词都具有一个固定的表示,因此词的多义性被忽略,这对句子语义而言是一个严重的问题。
神经网络模型,如通用语言模型微调 (Universal Language Model Fine-tuning
, ULMFiT
) 和基于语言模型的词嵌入 (Embeddings from Language Model
, ELMo
),能够编码句子级别的信息,并缓解了多义词问题,这不同于静态的词嵌入,而属于一个新概念——上下文词嵌入 (contextual word embedding
)。
ULMFiT
和 ELMo
方法基于长短时记忆网络 (Long Short Term Memory
, LSTM
)网络,是 RNN
的一种变体。它们还利用了预训练和微调的概念,通过使用在一般任务和通用文本数据集上预训练的模型,并在目标任务上进行监督微调,实现了迁移学习 (Transfer Learning
, TL
),这是迁移学习首次应用于 NLP
领域。
与此同时,注意力机制在 NLP
领域产生了深远影响,并在序列到序列问题中取得了巨大成功。早期的方法会将从整个输入序列获得的最后状态(称为上下文向量或思维向量)传递给输出序列,而不进行关联,得益于注意力机制,输入的某些部分可以与输出的某些部分关联起来。
2017
年,提出了基于 Transformer
的编码器-解码器模型,因其创新性地使用注意力机制而取得成功。该模型基于 FFNN
,摒弃了 RNN
的循环结构,仅使用注意力机制,克服了其他方法所面临的许多困难,并成为一种新的范式。
2. 传统 NLP 方法
尽管传统模型已经略显过时,但它们仍然能为创新设计提供启示。其中最重要的一种是分布式方法,至今仍在使用。分布语义是一种通过分析词语的分布性证据来解释词语意义的理论,而不是依赖于预定义的词典定义或其他静态资源。这种方法认为,频繁出现在相似语境中的词语往往具有相似的意义。例如,像“猫”和“狗”这两个词经常出现在类似的语境中,这表明它们可能有相关的意义。
使用分布式方法的一个好处是,它能够追踪词汇在不同时间段或不同领域、词义下的语义演变,而这是仅依赖词典定义所无法做到的。
传统的自然语言处理方法依赖于词袋模型 (Bag of Word
, BoW
) 和 n-gram
语言模型来理解词语和句子。词袋模型,也称为向量空间模型 (Vector Space Model
, VSM
),通过独热编码 (one-hot encoding
) 表示词语和文档,独热编码技术用来解决各种自然语言处理任务,如文本分类、词语相似性、语义关系抽取和词义消歧。另一方面,n-gram
语言模型对词语序列分配概率,用来计算给定序列属于某个语料库的可能性,或基于给定语料库生成随机序列。
除了这些模型之外,为了对单词赋予重要性,常常使用词频-逆文档频率 (Term Frequency-Inverse Document Frequency
, TF-IDF
) 度量。IDF
有助于减少高频词的权重,比如停用词和功能词,因为这些词在理解文档内容时区分度较低。单词的区分度还取决于领域——例如,一篇关于深度学习的文章列表可能会在几乎每篇文档中都出现 “network
” 一词。文档频率是通过计算某个词语出现在多少篇文档中来得出的,这可以用来缩小所有单词的权重,词频则是词语在文档中出现的原始计数。
基于 TF-IDF
的 BoW
模型的优缺点如下:
优点 | 缺点 |
---|---|
易于实现 | 维度灾难 |
结果易于解释 | 无法处理未见过的单词 |
领域适应性强 | 忽略单词顺序 |
缓解高频词干扰 | 对大词汇表处理较慢 |
使用词袋方法表示一个句子可能不切实际,因为它需要将字典中的每个单词表示为向量中的一个独立维度,无论该单词是否出现在句子中。这会产生一个高维向量,其中有很多零值元素,使得操作起来较为困难,并且需要大量内存来存储。
潜在语义分析 (Latent Semantic Analysis
, LSA
) 广泛应用于解决 BoW
模型的维度问题。LSA
是一种线性方法,捕捉词语之间的配对相关性 (pairwise correlations
)。基于 LSA
的概率方法可以被视为一个单层的隐变量,目前的深度学习模型包含多个隐藏层,且具有数十亿的参数。除此之外,基于 Transformer
的模型能够比传统模型更好地发现潜在表示。
传统的 NLP
任务流程通常从一系列准备步骤开始,如分词、词干提取、名词短语检测、短语块划分和停用词删除。在这些步骤完成后,使用加权方案构建文档-词项矩阵,其中 TF-IDF
是最常用的选择。然后,该矩阵可以作为输入,供各种机器学习模型使用,包括情感分析、文档相似性、文档聚类以及计算查询与文档之间的相关性得分等。类似地,词项可以表示为矩阵,并用作词元 (token
) 分类任务的输入,如命名实体识别和语义关系抽取。分类阶段通常涉及应用监督学习算法,如支持向量机 (Support Vector Machine
, SVM
)、随机森林、逻辑回归和朴素贝叶斯等。
2.1 语言建模与生成
传统的语言生成任务通常依赖于 n-gram
语言模型,也称为马尔科夫过程。这些是基于前一个词汇子集来估计一个词(事件)概率的随机模型。n-gram
模型有三种主要类型:单元模型 (unigram
)、双元模型 (bigram
) 和 n-gram
(广义)模型:
- 单元模型假设所有词是独立的,并且不形成链条。词汇中某个词的概率通过该词在总词数中的频率计算
- 双元模型,也称为一阶马尔科夫过程,根据前一个词来估计当前词的概率。这个概率是通过两个连续词的联合概率与第一个词的概率的比值来计算的
n-gram
模型,也称为N
阶马尔科夫过程,根据前面n-1
个词来估计当前词的概率
在本节中,我们介绍了传统 NLP
模型的基本范式,接下来,我们将讨论神经语言模型如何影响 NLP
领域,并解决传统模型的局限性。
3. 利用深度学习
基于神经网络的语言模型在解决特征表示和语言建模问题方面非常有效,因为它们允许在大规模数据集上训练更先进的神经网络架构,从而能够学习紧凑且高质量的语言表示。
2013
年,word2vec
模型引入了一种简单且有效的架构,用于学习连续的词表示,在多种句法和语义语言任务(如情感分析、同义句检测和关系抽取)中优于其他模型。word2vec
的低计算复杂度也是其流行的重要原因之一。由于嵌入方法的成功,词嵌入表示受到了广泛关注,并且广泛应用于现代 NLP
模型中。
word2vec
及类似模型通过基于邻近词预测的神经网络架构来学习词嵌入。这种方法不同于传统的 BoW
方法,后者依赖基于计数的技术来捕捉分布式语义。GloVe
模型的作者讨论了基于计数的方法与基于预测的方法哪个更适合分布式词表示,并声称这两种方法没有显著差异。
FastText
是另一种广泛使用的模型,它通过将每个词表示为字符 n-gram
的集合来融合子词信息,每个 n-gram
由一个常量向量表示。然后,词通过其子向量的总和来表示。这使得 FastText
能够计算未见过的词(或稀有词)的词表示,并学习词的内部结构,如后缀和词缀,这对于形态丰富的语言特别有用。同样,现代的 Transformer
架构也利用了子词信息,并采用了多种子词分词方法,如 WordPiece
、SentencePiece
或字节对编码 (Byte-Pair Encoding
, BPE
)。
3.1 RNN 模型中的词序
传统的 BoW
模型不考虑词序,因为它们将所有单词视为独立的单元并将它们放入一个集合中。与此不同,循环神经网络 (Recurrent Neural Network, RNN)模型通过逐步吸收前一个词元 (token
) 的信息来学习每个词元的表示,最终获得整个句子的表示。
像其他神经网络模型一样,RNN
模型处理由分词算法生成的词元,分词算法将原始文本分解为原子单位,称为词元 (token
)。然后,这些词元与数值向量(称为词元嵌入)相关联,这些嵌入通过在训练过程中学习获得。或者,也可以使用一些经典词嵌入算法,如 word2vec
或 FastText
,提前生成词元嵌入。
下面是一个简单的 RNN
架构,处理句子 “The dog is happy.
”,其中 x0
是 “the
” 对应的词向量嵌入,x1
是 “dog
” 对应的词向量嵌入,以此类推。下图展示了 RNN
如何展开成一个顺序结构,对于句子 “The dog is happy.
”,网络处理的是一个包含五个词元的序列,每个单元的隐藏状态充当网络的记忆,并在各个时间步之间共享,它编码了所有前面时间步以及当前时间步的信息:
RNN
架构具有以下优势:
- 可变长度输入:
RNN
能够处理可变长度的输入,无论输入的句子大小如何。例如,可以向网络输入包含3
个单词或300
个单词的句子,而无需改变参数 - 关注词序:RNN按顺序逐词处理序列,关注单词在序列中的位置
- 适用于多种模式:可以使用相同的递归框架训练机器翻译模型或情感分析模型:
- 一对多模式:
RNN
可以重新设计为一对多模型,用于语言生成或音乐生成 - 多对一模式:可以用于文本分类或情感分析
- 多对多模式:多对多模型用于解决编码器-解码器问题,如机器翻译、问答、文本摘要或命名实体识别(NER)等序列标注问题。
- 一对多模式:
RNN
架构具有以下缺陷:
- 长期依赖问题:当我们处理非常长的文档,并试图连接相距较远的单词时,同样需要关注并编码这些单词之间的所有无关单词
- 容易出现梯度爆炸或梯度消失问题:在处理长文档时,更新最初几个单词的权重会变得非常困难,这可能导致由于梯度爆炸/消失问题使得模型无法训练
- 难以应用并行训练:并行化将主问题拆分为更小的问题并同时执行解决方案,但RNN采用经典的顺序处理方法。每一层的计算依赖于前一层的结果,无法应用并行化处理
- 长序列计算速度慢:
RNN
对于短文本问题非常高效,但处理较长文档时速度较慢、尽管RNN
理论上能够关注到相距较远的多个时间步的信息,但在实际应用中,长文档和长期依赖问题几乎无法完全解决
3.2 LSTM 和 GRU
长短期记忆 (Long Short-Term Memory
, LSTM
) 网络和门控循环单元 (Gated Recurrent Unit
, GRU
) 是为了解决长期依赖问题而设计的 RNN
类型。LSTM
的一个关键特点是使用单元状态 (cell state
),由专门的门控机制控制,处理遗忘、输入或更新操作。LSTM
的结构如下图所示:
这种设计能够决定以下几个方面:
- 在单元状态中存储什么样的信息
- 哪些信息将被遗忘或删除
在原始 RNN
中,为了学习当前词元的状态,它会递归地处理之前所有词元的状态。从早期时间步传递完整的信息会导致梯度消失问题,从而使得模型变得不可训练。我们可以这样理解:携带信息的难度随着每一步的增加而呈指数级增长。例如,假设携带前一个词元的信息难度是 2
个单位;如果是携带前两个词元的信息,难度就是 4
个单位;如果是携带前 10
个词元的信息,难度就会增加到 1,024
个单位。
LSTM
中的门控机制允许架构在某一时刻跳过一些无关的词元,或者记住长期状态以便学习当前词元的状态。GRU
在许多方面与 LSTM
相似,主要区别在于 GRU
不使用单元状态。相反,GRU
通过将单元状态的功能转移到隐藏状态,简化了架构,且只包含两个门:更新门和重置门。更新门决定了来自前一个和当前时刻的信息有多少会被传递到下一时刻。这一特性帮助模型保持来自过去的相关信息,从而最小化了梯度消失问题的风险。重置门则用来检测无关数据,并使模型遗忘这些信息。
在传统的 RNN
的 seq2seq
中,需要将所有信息压缩成一个单一的表示。这种方法可能会使得输出词元难以专注于输入词元的特定部分,应用注意力机制的 RNN
能够有效地解决这个问题。
3.3 上下文词嵌入与迁移学习
传统的词嵌入(如 word2vec
)是许多神经语言理解模型的重要组成部分。然而,在语言建模任务中使用这些嵌入会导致同一个词(例如 “bank
” )在任何上下文中都具有相同的表示。例如,无论 “bank
” 是指金融机构还是指河岸,传统向量表示都会使用相同的词嵌入。而在自然语言处理中,上下文对于人类和机器理解词的意义都至关重要。
ELMo
和 ULMFiT
实现了上下文词嵌入并在 NLP
中有效应用迁移学习 (Transfer Learning
, TL
),在多种语言理解任务(如问答、命名实体识别、关系抽取等)中取得了良好的结果。这些上下文词嵌入不仅捕捉了单词的意义,也考虑了单词出现的上下文。与传统的词嵌入(每个词使用静态表示)不同,而上下文嵌入则使用双向 LSTM
来编码一个词,考虑到单词所在的整个句子。
研究表明,一旦完成预训练,预训练的词嵌入可以在其他 NLP
任务中重用。ULMFiT
在 NLP
任务中引入了一种有效的迁移学习方法,可以应用于任何 NLP
任务,并提出了对语言模型进行微调的技术。ULMFiT
的过程包括三个阶段。第一阶段是在大规模语料库上预训练一个通用领域的语言模型,以捕捉不同层次的通用语言特征;第二阶段是在目标任务数据集上微调预训练语言模型,通过判别性微调来学习任务特定的特征;最后阶段是在目标任务上对分类器进行微调,并采用渐进式策略。这种方法在适应高层次特征的同时,保持低层次特征的表示不变。
4. Transformer 架构
Transformer
模型因其在各种 NLP
问题中表现出色而备受关注,涵盖了从文本分类到文本生成等多个领域。注意力机制是 Transformer
模型中的重要组成部分,并发挥着至关重要的作用。在 Transformer
模型之前,注意力机制通常作为一种帮助提升传统深度学习模型(如 RNN
)性能的工具。
4.1 注意力机制
注意力机制通过将输入序列中的特定词元与输出序列中的特定词元相连接,从而创建更高级的模型。例如,假设在英语到中文翻译任务中,输入句子 (The school holds a meeting to address the student enrollment issue.
) 中的关键词短语是 “The school
”。在输出句子(学校召开会议应对生源问题)中,"学校"这个词组与输入短语有强关联,同时与输入中的其余部分建立较弱的连接,如下图所示:
注意力机制使得模型在诸如翻译、问答和文本摘要等序列到序列 (seq2seq
) 任务中变得更加成功。注意力机制的提出是为了解决 RNN
模型在神经机器翻译 (Neural Machine Translation
, NMT
) 等任务中存在信息瓶颈的问题。这些基于编码器-解码器的模型以词元 (token
) ID
的形式接收输入,并循环处理输入(编码器)。随后,处理过的中间表示传递给另一个循环单元中(解码器),以提取结果。这种信息的流动方式就像滚雪球一样,糅合了所有信息,解码器部分难以“展开”这些信息,因为它看不到所有的依赖关系,只能接收中间表示(上下文向量)作为输入。
为了解决这个问题,Bahdanau
提出了注意力机制,通过对中间隐藏值加权,使得每个解码步骤中模型对输入的关注程度有所不同。权重调整了模型在解码每一步时对输入的注意力分配,注意力机制帮助模型在 NMT
等多对多处理任务中取得良好效果。随后,研究人员提出了多种不同的注意力机制,包括加性注意力、乘法注意力、通用注意力和点积注意力。缩放点积注意力是一种对点积注意力进行改进的方法,是带有缩放参数的修改版本,这种注意力类型是 Transformer
模型的基础,也被称为多头注意力机制。下表展示了不同类型的注意力机制原理:
注意力机制 | 注意力分数方程 |
---|---|
基于内容的注意力机制 | s o c r e ( s t , h i ) = c o s i n e [ s t , h i ] socre(s_t,h_i)=cosine[s_t,h_i] socre(st,hi)=cosine[st,hi] |
加性注意力机制 | s o c r e ( s t , h i ) = v a T t a n h ( W a [ s t ; h i ] ) socre(s_t,h_i)=v_a^Ttanh(W_a[s_t;h_i]) socre(st,hi)=vaTtanh(Wa[st;hi]) |
基于位置的注意力 | a t , i = s o f t m a x ( W a s t ) a_{t,i}=softmax(W_as_t) at,i=softmax(Wast) |
通用注意力机制 | s o c r e ( s t , h i ) = s t T W a h i socre(s_t,h_i)=s_t^TW_ah_i socre(st,hi)=stTWahi |
点积注意力机制 | s o c r e ( s t , h i ) = s t T h i socre(s_t,h_i)=s_t^Th_i socre(st,hi)=stThi |
缩放点积注意力机制 | s o c r e ( s t , h i ) = s t T h i n socre(s_t,h_i)=\frac {s_t^Th_i}{\sqrt n} socre(st,hi)=nstThi |
在上表中, h h h 和 s s s 分别表示隐藏状态和状态本身,而 W W W 表示与注意力机制相关的权重。
注意力机制不仅限于 NLP
,还被广泛应用于多种其它领域,从计算机视觉到语音识别,下图展示了注意力机制在计算机视觉中的应用:
4.2 多头注意力机制
多头注意力机制是 Transformer
架构的一个关键部分:
在深入了解缩放点积注意力机制之前,需要先对自注意力机制有一个清晰的理解。自注意力是一种基本形式的缩放自注意力机制,使用输入矩阵并在各个项之间生成注意力分数。
下图中的 Q Q Q 称为查询 (query
), K K K 称为键 (key
), V V V 称为值 (value
)。图中包含三种矩阵,分别是 θ \theta θ、 ϕ \phi ϕ 和 g g g,在生成 Q Q Q、 K K K 和 V V V 之前会与X相乘。查询 ( Q Q Q) 和键 ( K K K) 之间的乘积结果生成一个注意力分数矩阵。这也可以看作是一个数据库,在这个数据库中,使用查询和键来查找不同项之间的关系,并通过值评估来衡量它们的关联性。注意力分数与 V V V 矩阵的乘积生成自注意力机制的最终结果,之所以称其为自注意力机制,主要是因为 Q Q Q、 K K K 和 V V V 都是从 X X X 计算得来的:
缩放点积注意力机制与自注意力(点积)机制非常相似,唯一不同的是缩放点积注意力机制使用了一个缩放因子。另一方面,多头机制确保模型可以在所有层级上关注输入的不同方面。Transformer
模型关注编码器的结果和来自前一层的隐藏值。Transformer
模型的架构没有循环的逐步流程,而是使用位置编码来获取输入序列中每个词元的位置信息。嵌入向量(随机初始化的)和位置编码的固定值会拼接在一起,作为输入传递到第一个编码器部分的网络层中,并在整个架构中传播,如下图所示:
位置编码是通过在不同频率下计算正弦和余弦波来获得的:
下图展示了一个缩放点积注意力机制的可视化结果:
在不同的上下文中,it
指代不同的实体。如上图所示,it
指代的是 cat
。Transformer
架构的另一个改进在于并行处理能力,传统的顺序循环模型,如 LSTM
和 GRU
,并不具备这种能力,因为它们是逐个处理输入词元。相比之下,前馈层的计算速度更快,因为单次矩阵乘法比循环单元要快得多。多头注意力层的堆叠有助于更好地理解复杂的句子。
在注意力机制的解码器部分,采用了与编码器类似的方法,但进行了少量修改。多头注意力机制与编码器部分相同,但编码器堆栈的输出也会被使用,这些编码结果传递给每个解码器堆栈的第二个多头注意力层。这一修改在解码时引入了编码器的输出,帮助解码器在解码时利用编码器的信息。同时,并且在训练过程中有助于更好的梯度流动,避免在各个层之间出现梯度消失的问题。解码器层末尾的最终 Softmax
层用于为不同的应用场景提供输出,例如 NMT
。
该架构有两个输入,分别记为 inputs
和 outputs(shifted right)
。其中一个输入 (inputs
) 在训练和推理过程中始终存在,而另一个输入(由模型产生的输出)则仅在训练时出现。在推理过程中不使用模型的预测结果,目的是防止模型在推理过程中产生连锁错误输出。具体而言,假设一个神经翻译模型正在尝试将一句话从英语翻译成法语——在每一步,它都会对一个单词进行预测,并使用这个预测的单词来预测下一个单词。但如果它在某一步出现错误,之后所有的预测也都会是错误的。为了防止模型出现这样的错误,我们会提供正确的单词作为偏移输入。
下图展示了一个具有两个编码器和两个解码器层的 Transformer
模型示例:
Transformer
架构中的另一个重要改进是基于一种简单的通用文本压缩方案,用来防止输入端出现未见过的词元。通过使用字节对编码 (Byte-Pair Encoding
) 和句子切分编码 (SentencePiece Encoding
) 等技术,来提高 Transformer
在处理未见过的词元时的表现,还能在模型遇到形态学上相似的词元时提供指导。此类词元在过去可能未出现过,且在训练中很少使用,但推理过程中可能会遇到。在某些情况下,部分词元可能已经出现在训练数据中;这种情况通常出现在形态学丰富的语言中,如土耳其语、德语、捷克语和拉脱维亚语。例如,模型可能见过单词 training
但未见过 trainings
。在这种情况下,模型可以将 trainings
分解为 training + s
,分解后的两个部分是常见的。
4.3 Transformer 与迁移学习
迁移学习 (Transfer Learning
, TL
) 是人工智能领域的一种技术,旨在使模型能够在不同任务之间进行重用。例如,针对任务 A
训练的模型,可以通过微调 (fine-tuning
) 被重用于另一个任务 B
。在 NLP
领域,可以通过使用类似 Transformer
的架构来实现,这些架构能够通过语言建模捕获语言本身的理解。这类模型称为语言模型,它们为所训练的语言提供了一个模型。迁移学习并不是一种新技术,它已经在计算机视觉等多个领域得到了应用。例如,ResNet
、Inception
、VGG
和 EfficientNet
可以作为预训练模型,经过微调后应用于不同的计算机视觉任务。
在 NLP
中,使用像 Word2vec
、GloVe
和 Doc2vec
这样的模型也可以实现浅层迁移学习。之所以称为“浅层”,是因为在这种迁移学习中,并没有一个可转移的完整模型,而是将预训练的词向量或词元向量进行迁移。可以使用这些词元或文档嵌入模型,并结合分类器,或者将它们与其他模型(如 RNN
)结合使用,而不是使用随机初始化的嵌入。
在 NLP
中,使用基于 Transformer
的模型进行迁移学习是可行的,因为这些模型能够在没有标签数据的情况下学习语言本身。语言建模是一项用于训练可迁移权重的任务,适用于多种问题。掩码语言建模 (Masked Language Modeling
, MLM
) 是用来学习语言本身的一种方法,与 Word2vec
的基于窗口的模型用于预测中心词类似,在掩码语言建模中,也采取类似的方式。给定一个概率,每个词都可能会被掩码,并用一个特殊的词元(如 [MASK]
)替换。语言模型(例如基于 Transformer
的模型)必须预测出这些被掩码的词。与 Word2vec
不同,掩码语言模型不使用窗口,输入的是一个完整的句子,模型的输出必须是填充了掩码单词的完整句子。
BERT
是使用 Transformer
架构进行语言建模的第一个模型,它基于 Transformer
架构的编码器部分。BERT
通过前面描述的方法实现掩码语言建模,并在训练语言模型后完成下游任务。BERT
是一个可迁移的语言模型,适用于不同的 NLP
任务,如词元分类、序列分类,甚至问答任务。
在语言模型训练完成后,可以通过微调解决不同任务。上下文嵌入使得模型能够根据词语所在的上下文来正确理解每个单词的含义。例如,cold
在两个不同的句子中可能有不同的意义:cold-hearted human
(冷酷的人)和 cold weather
(寒冷的天气)。
如上图所示,预训练阶段还包括另一个目标——下一句子预测 (next-sentence prediction
)。每篇文档由彼此相连的句子组成,而训练一个模型以理解语言的另一个重要部分是理解句子之间的关系,换句话说,就是它们是否相关。为实现这一任务,BERT
引入了特殊的词元,如 [CLS]
和 [SEP]
。其中,[CLS]
是一个起始词元,位于句子的最前面,对应的输出向量作为整篇文本的语义表示。在序列分类任务(如下一句子预测)中,位于该标记输出位置(位置 0
)上的分类器用来进行分类预测。同时有可以用于捕捉句子的语义——例如,在使用 Siamese BERT
模型时,通过余弦相似度等度量比较不同句子的 [CLS]
词元。而 [SEP]
用于分隔两个句子,例如输入句子 A
和 B
,要在句子 A
,B
间增加 [SEP]
词元。预训练完成后,如果需要微调 BERT
来处理序列分类任务,如情感分析,则会在 [CLS]
的输出嵌入上使用分类器。还需要注意的是,在微调过程中,所有的 TL
模型可以选择冻结或不冻结;冻结意味着固定模型中的所有权重和偏置,并在训练不会被调整。在情感分析的示例中,如果模型被冻结,则只训练分类器,而不是整个模型。
5. 多模态学习
多模态学习在人工智能中是指数据涉及多个模态,而不是仅仅依赖单一模态(如仅图像、仅文本等)。例如,输入或输出包含图像和文本两种信息,或者跨模态问题,其输入和输出的模态不同。
在深入探讨使用 Transformer
的多模态学习之前,首先有必要介绍它们如何用于图像。Transformer
接收的输入是一个序列,但与文本不同,图像并不是一维序列,一种方法是将图像转换为多个图块 (patch
)。每个图块会被线性映射为一个向量,并应用位置编码。下图展示了视觉 Transformer
(ViT
) 的架构及其工作原理:
类似 BERT
的架构,可以应用分类头来处理图像分类等任务。同时,这种方法也可以用于其它输入类型的应用。
单独使用 Transformer
处理图像或文本可以创建一个能够理解文本或图像的模型。但如果我们希望拥有一个能够同时理解文本和图像,并且在它们之间建立联系的模型,那么就需要在训练过程中加入约束。CLIP
是一个能够理解图像和文本的模型,可以用于语义搜索,其中输入可以是文本/图像,输出也可以是文本/图像。下图展示了 CLIP
模型如何通过使用双编码器进行训练:
从 CLIP
架构中可以明显看出,它对于文本和图像模态的零样本预测非常有用。DALL-E
和基于扩散的模型(如 Stable Diffusion
)也属于多模态模型。Stable Diffusion
的工作流程如下图所示:
Stable Diffusion
使用文本编码器将文本转换为稠密向量,随后扩散模型尝试创建相应图像的向量表示。解码器尝试解码这个向量表示,最终生成一幅与文本输入语义相似的图像。
多模态学习不仅能够使用不同的模态来处理始终与图像-文本相关的任务,还可以与其他模态结合使用,如语音、数值数据和图数据等。
小结
在本节中,我们介绍了 NLP
方法和架构的演变,从 BoW
到 Transformer
,回顾了如何实现基于 BoW
、RNN
和 CNN
的方法,理解了 Word2Vec
的概念及其如何帮助通过浅层 TL
改进传统的深度学习方法。我们还探讨了 Transformer
架构的基础,并以 BERT
为例进行了介绍。我们了解了 TL
及其在 BERT
中的应用。还介绍了多模态学习的基本概念,并简要介绍了 ViT
。同时,也讨论了 CLIP
和 Stable Diffusion
等模型。
系列链接
Transformer实战——词嵌入技术详解
Transformer实战——循环神经网络详解