Transformer 模型和 BERT 模型:概述

语言模型发展历程Language modeling history

多年来,语言建模一直在不断发展。过去十年的最新突破,包括使用神经网络来表示文本,比如2013年的Word2vec和N元语法,2014年开发的序列到序列模型,如RNN和LSTM帮助提高机器学习模型在NLP任务上的性能,例如翻译和文本分类,2015年注意力机制以及以注意力机制为基础的模型,如Transformer和BERT模型引起了广泛的热议。

Transformer基于2017年发布的一篇论文 《Attention is All You Need》

https://goo.gle/attentionpdf

文本呈现问题Problem of text presentation

尽管在Transformer之前的所有模型都能将单词表示为矢量,但这些矢量不包含上下文,单词的用法会随着上下文而变化。例如,river bank中的bank(河岸),与bankrobber中的bank(银行),两者可能会有相同的失量表示,以上这种情形存在于注意力机制面世之前。

Transformer是一种编码器-解码器模型A transformer is an encoder-decoder model

Transformer是一种使用注意力机制的编码器-解码器模型,它可以利用并行功能的优势,还可以同时处理大量数据,这是由其模型架构的特点决定的。

Transformer模型Transformer model

注意力机制有助于提高机器翻译应用的性能,Transformer模型是以注意力机制为核心而构建的。

Transformer模型由编码器和解码器组成,编码器对输入序列进行编码,再将它传递给解码器,然后解码器对表示形式进行解码,以完成相关的任务。

编码组件是相同数量的一些编码器组成的,以上提到的介绍Transfommer的研究论文中有六个编码器堆叠在一起,六不是一个神奇的数字,而仅仅是一个超参数。

编码器在结构上完全相同,但权重不同。每个编码器可以细分为两个子层,第一层称为自注意力层,编码的输入首先流经自注意力层,该层在对输入句子的中心单词进行编码时,会对单词的相关部分进行编码或查看。第二层称为前馈层,自注意力层的输出被馈送到前馈神经网络,完全相同的前馈神经网络独立应用于每个位置。解码器既有自注意力层,也有前馈层,但在两者之间还有一个编码器/解码器注意力层,用于帮助解码器专注于输入句子的相关部分。

在输入序列中嵌入单词后,每个嵌入矢量都流经编码器的两层,每个位置的单词都经过一个自注意力进程,然后再通过一个前馈神经网络,也就是每个矢量都分别流经的完全相同的网络。自注意力层中的这些路径之间存在依赖关系,但是,前馈层没有这些依赖关系。因此各种路径在流经前馈层时,可以并行执行。

在自注意力层中,输入嵌入被分解为查询矢量、键矢量和值矢量。这些矢量的计算基础是Transformer在训练过程中学习得来的权重。

所有这些计算在模型中以矩阵计算的形式并行发生。

一旦我们有了查询矢量、键矢量和值矢量,下一步就是将每个值矢量乘以softmax分数以准备对它们求和,这样做的目的是保持想要关注的单词的值不变,并通过将不相关的单词乘以很小的数。例如0.001,来降低它们的权重。

接下来我们必须对已经过加权计算的值矢量求和,从而生成自注意力层在该位置的输出。对于第一个单词,你可以将生成的矢量发送到前馈神经网络。

为了总结获得最终嵌入的这个过程,这里列出了我们采取的步骤,我们从自然语句开始嵌入句子中的每个单词

之后,计算多头注意力。图中示例中计算了八次,将嵌入的单词与各自的加权矩阵相乘,然后使用生成的QKV矩阵计算注意力。

最后,我们可以将这些矩阵串联以生成输出矩阵,这个输出矩阵与自注意力层最初得到的最终矩阵具有相同的维度。

预训练Transformer 模型Pre-trained transformer models

现在Transformer有多种变体版本,有些同时使用原始架构中的编码器和解码器组件。有些只使用编码器,而有些只使用解码器。

BERT 模型BERT model

一种流行的仅编码器架构是BERT,BERT是经过训练的Transformer模型之一,BERT代表Bidirectional Encoder Representations from Transformers,由Google于2018年开发。

从那以后,BERT诞生了多个变体版本。今天,BERT为Google搜索提供支持,我们可以看出,对于同一个搜索查询,在有BERT之前和之后的结果是多么地不同。

BERT 概述BERT overview

BERT的训练涉及到两个变体版本,一个模型包含BERT Base,它有12个Transformer,大约有1.1亿个参数,另一个模型包含BERT Large,有24层Transformer,有大约3.4亿个参数。BERT模型之所以强大,是因为它可以处理长输入上下文,它的训练以整个维基百科语料库以及BookCorpus为基础。BERT模型的训练经过了100万步,BERT接受了不同任务的训练,这意味着它具有多任务目标,这就是BERT如此强大的原因,因为它经受了多种任务的训练,它既适用于句子级别,也适用于词元级别。

BERT 版本BERT versions

这是最初发布的BERT的两个不同版本,一个是BERT Base,它有12层,另一个BERT Large则有24层,而原始的Transformer则仅有6层。

掩码语言建模Masked language modeling(MLM)

BERT经受了两种不同任务的训练,任务一称为掩码语言模型,在该任务中,句子被遮盖,模型经过训练来预测被遮盖的单词,如果你要从头开始训练BERT,则必须遮盖语料库中一定比例的单词推荐的遮盖百分比是15%,遮盖百分比要在遮盖太少和过多之间取个平衡值,遮盖太少会使训练过程的成本特别高,而遮盖太多则会失去模型所需的上下文。

下一句预测Next sentence prediction(NSP)

任务二是预测下一个句子,例如,给模型两组句子,BERT的目标是学习句子之间的关系,并根据第一个句子,预测下一个句子。例如,句子A可以是“一个人去了商店”,句子B是“他买了一加仑牛奶”,BERT负责分类判断,句子B是否是句子A之后的下一个句, 这是一个二元分类任务,有助于BERT在句子级别执行任务。

BERT 输入嵌入BERT input embeddings

为了训练BERT,对于输入的句子,你需要给模型提供三种不同的嵌入,嵌入有3种不同的类型,词元嵌入、片段嵌入和定位嵌入,词元嵌入是每个词元在输入语句中的嵌入表示,单词会转换为特定维度的矢量表示,BERT也可以解决。涉及文本分类的NLP任务,一个例子是判断两个句子的语义是否相似,例如“我的狗很可爱”和“他喜欢玩”,输入文本对会简单地串联起来并馈送给模型,BERT如何区分给定的成对文本中的输入?答案是使用片段嵌入。

有一个由SEP表示的特殊词元,用于分隔句子的两个不同分块,另一个问题是学习句子中单词的顺序,BERT由一些Transformer组成,BERT可处理长度达到512的输入序列,输入序列的顺序信息被纳入定位嵌入中,这使得BERT可以学习每个位置的矢量表示。

BERT可用于各种下游任务,尽管BERT接受的是大规模语言建模培训以及单句分类训练,它仍可用于常见NLP任务,例如句对分类、问答以及单句标记任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值