BERT模型原理的详细介绍

article/2025/9/15 12:36:37

文章目录

  • 参考文章
  • 1. BERT模型
    • 1.1 模型结构
    • 1.2 输入表示
    • 1.3 预训练任务
      • 1.3.1 Task 1:Masked Language Model
      • 1.3.2 Task 2:Next Sentence Prediction
    • 1.4 微调(fine-tuning)
      • 基于句子对的分类任务
      • 基于单个句子的分类任务
      • 问答任务
      • 命名实体识别
    • 2. 总结

参考文章

【NLP】Google BERT模型原理详解 - rumor的文章 - 知乎
BERT详解 - 大师兄的文章 - 知乎

在大体了解以后可以将源码debug一下,这里推荐一个pytorch的bert源码

  • 由于我的github时而可以时而不可以,这里给一个github镜像网站的地址,大家可以自行再到github官网寻找

1. BERT模型

BERT的全称是Bidirectional Encoder Representation from Transformers,即双向TransformerEncoder,因为Decoder是不能获要预测的信息的。

BERT = Encoder of Transformer

模型的主要创新点都在pre-train方法上,即用了Masked LMNext Sentence Prediction两种方法分别捕捉词语句子级别的representation

1.1 模型结构

BERT的网络架构使用的是《Attention is all you need》中提出的多层Transformer结构,其最大的特点是抛弃了传统的RNNCNN,通过Attention机制将任意位置的两个单词的距离转换成1,有效的解决了NLP中棘手的长期依赖问题。
Transformer的结构在NLP领域中已经得到了广泛应用,并且作者已经发布在TensorFlowtensor2tensor库中。

Transformer的网络架构如图1所示,Transformer是一个encoder-decoder的结构,由若干个编码器和解码器堆叠形成。
1 1 1的左侧部分为编码器,由Multi-Head Attention和一个全连接组成,用于将输入语料转化成特征向量。
右侧部分是解码器,其输入为编码器的输出以及已经预测的结果,由Masked Multi-Head Attention, Multi-Head Attention以及一个全连接组成,用于输出最后结果的条件概率。

关于Transformer的详细解析参考我之前总结的文档。

在这里插入图片描述

图1的左侧部分时一个transformer block,即transformer的Encoder,对应到图2 BERT中的一个Trm

BERT对比这两个算法的优点是只有BERT表征会基于所有层中的左右两侧语境

BERT能做到这一点得益于Transformer中Attention机制将任意位置的两个单词的距离转换成了1。
在这里插入图片描述

BERT提供了简单和复杂两个模型,对应的超参数分别如下:

  • B E R T B A S E BERT_{BASE} BERTBASE : L=12,H=768,A=12,参数总量110M;

  • B E R T L A R G E BERT_{LARGE} BERTLARGE : L=24,H=1024,A=16,参数总量340M;

  • L:网络层数,即Transformer blocks的数量

  • A:表示Multi-Head Attention中self-Attention的数量

  • H:filter的尺寸

1.2 输入表示

BERT的输入的编码向量(长度是512)是3各嵌入特征的单位和,如图4,这三个词嵌入的特征是

  1. WordPiece 嵌入:WordPiece是指将单词划分成一组有限的公共子词单元,能在单词的有效性和字符的灵活性之间取得一个这种的平衡。图4示例中的playing拆成playing
  2. 位置嵌入(Position Embedding):位置嵌入是将单词的位置信息编码成特征向量,位置嵌入是向模型中引入单词位置关系的至关重要的一环。
  3. 分割嵌入(Segment Embedding):用于区分两个句子,例如B是否是A的下文(对话场景,问答场景等)。对于句子对,第一个句子的特征值是0,第二个句子的特征值是1.

最后,说明一下图4中的两个特殊符号[CLS][SEP],其中[CLS]表示该特征用于分类模型,对非分类模型,该符合可以省去。[SEP]表示分句符号,用于断开输入语料中的两个句子。
在这里插入图片描述

1.3 预训练任务

BERT是一个多任务模型,它的任务由两个自监督任务组成,即MLMNSP

1.3.1 Task 1:Masked Language Model

第一步预训练的目标就是语言模型,从上下文模型结构中可以看到这个模型的不同,即Bidirectional。

为什么要如此bidirectional?

如果使用预训练模型处理其他任务,那人们想要的肯定不止词左边的信息,而是左右两边的信息。
而考虑到这点的模型ELMo只是将left-to-rightright-to-left分别训练拼接起来。

Masked Language Model(MLM)和核心思想取自Wilson Taylor在1953年发表的一篇论文[7]。
所谓MLM是指在训练的时候随机从输入语料中mask掉一些单词,然后通过上下文进行预测该单词。
该任务非常像我们在中学时期经常做的完形填空。正如传统的语言模型算法和RNN匹配那样,MLM的这个性质和Transformer的结构是非常匹配的。

BERT的实验中,15%WordPiece Token会被随机Mask掉。
在训练模型时,一个句子会被多次喂到模型中用于参数学习,但是Google并没有在每次都mask掉这些单词,而是在确定要Mask掉的单词之后,80%的时候会直接替换为[MASK],10%替换为其他任意单词,10%的时候保留原始Token

- 80%:my dog is hairy -> my dog is [mask]
- 10%:my dog is hairy -> my dog is apple
- 10%:my dog is hairy -> my dog is hairy

为什么这样做?

如果句子中的某个Token100%被mask掉,那么在fine-tuning的时候模型就会有一些没有见过的单词。
加入随机Token的原因是因为Transformer要保持对每个输入token的分布式表征,否则模型就会记住这些[mask]token ’hairy‘

至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有10% * 15% = 1.5%,负面影响较小。

另外文章指出,每次只预测15%的单词,模型收敛会较慢

1.3.2 Task 2:Next Sentence Prediction

Next Sentence Prediction(NSP)的任务是判断句子B是否是句子A的下文。
如果是输出"IsNext",否则输出"NotNext"。
训练数据的生成方式是从平行语料中随机抽取的连续两句话,其中50%保留抽取的两句话,它们符合IsNext关系,另外50%的第二句话随机从语料中提取,它们的关系是NotNext。这个关系保存在图4中的[CLS]符号

1.4 微调(fine-tuning)

在海量语料训练完BERT之后,便可以将其应用到NLP的各个任务中。
对应于NSP任务来说,其条件概率表示为 P = s o f t m a x ( C W T ) P = softmax(CW^T) P=softmax(CWT),其中 C C CBERT输出中的[CLS]符号, W W W是可学习的权值矩阵

对于其他任务来说,我们也可以根据BERT的输出信息做出相应的预测。
图5展示BERT在11各不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。

这些任务类似于我们做过的文科试卷,其中有选择题,简答题等等
图5中其中Tok表示不同的Token, E E E表示嵌入向量, T i T_i Ti表示第 i i i 个Token在经过BERT处理之后得到的特征向量。

在这里插入图片描述
可以调整的参数和取值范围有:

  • Batch size: 16, 32
  • Learning rate (Adam): 5e-5, 3e-5, 2e-5
  • Number of epochs: 3, 4

因为大部分参数都和预训练时一样,精调会快一些,所以作者推荐多试一些参数。

基于句子对的分类任务

  • MNLI:给定一个前提 (Premise) ,根据这个前提去推断假设 (Hypothesis) 与前提的关系。该任务的关系分为三种,蕴含关系 (Entailment)、矛盾关系 (Contradiction) 以及中立关系 (Neutral)。所以这个问题本质上是一个分类问题,我们需要做的是去发掘前提和假设这两个句子对之间的交互信息。
  • QQP:基于Quora,判断 Quora上的两个问题句是否表示的是一样的意思。
  • QNLI:用于判断文本是否包含问题的答案,类似于我们做阅读理解定位问题所在的段落。
  • STS-B:预测两个句子的相似性,包括5个级别。
  • MRPC:也是判断两个句子是否是等价的。
  • RTE:类似于MNLI,但是只是对蕴含关系的二分类判断,而且数据集更小。
  • SWAG:从四个句子中选择为可能为前句下文的那个。

基于单个句子的分类任务

  • SST-2:电影评价的情感分析。
  • CoLA:句子语义判断,是否是可接受的(Acceptable)。

对于GLUE数据集的分类任务(MNLI,QQP,QNLI,SST-B,MRPC,RTE,SST-2,CoLA),BERT的微调方法是根据[CLS]标志生成一组特征向量 C C C,并通过一层全连接进行微调。损失函数根据任务类型自行设计,例如多分类的softmax或者二分类的sigmoid

SWAG的微调方法与GLUE数据集类似,只不过其输出是四个可能选项的softmax

P i = e V ⋅ C i ∑ j = 1 4 e V ⋅ C i (1) P_i = \frac{e^{V \cdot C_i}}{\sum_{j=1}^4e^{V \cdot C_i}}\tag{1} Pi=j=14eVCieVCi(1)

问答任务

SQuAD v1.1:给定一个句子(通常是一个问题)和一段描述文本,输出这个问题的答案,类似于做阅读理解的简答题。如图5.©表示的,SQuAD的输入是问题和描述文本的句子对。输出是特征向量,通过在描述文本上接一层激活函数为softmax的全连接来获得输出文本的条件概率,全连接的输出节点个数是语料中Token的个数。

命名实体识别

CoNLL-2003 NER:判断一个句子中的单词是不是Person,Organization,Location,Miscellaneous或者other(无命名实体)。微调CoNLL-2003 NER时将整个句子作为输入,在每个时间片输出一个概率,并通过softmax得到这个Token的实体类别。

2. 总结

优点

  1. 使用Transformer的结构将已经走向瓶颈期的Word2Vec带向了一个新的方向,并再一次炒火了《Attention is All you Need》这篇论文;
  2. 11个NLP任务的精度大幅提升足以震惊整个深度学习领域;
  3. 无私的开源了多种语言的源码和模型,具有非常高的商业价值。
  4. 迁移学习又一次胜利,而且这次是在NLP领域的大胜,狂胜。

BERT算法还有很大的优化空间,例如我们在Transformer中讲的如何让模型有捕捉Token序列关系的能力,而不是简单依靠位置嵌入。BERT的训练在目前的计算资源下很难完成,论文中说 [公式] 的训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。非常幸运的是谷歌开源了各种语言的模型,免去了我们自己训练的工作。

缺点
2.2 缺点

作者在文中主要提到的就是MLM预训练时的mask问题:

  • [MASK]标记在实际预测中不会出现,训练时用过多[MASK]影响模型表现
  • 每个batch只有15%的token被预测,所以BERT收敛得比left-to-right模型要慢(它们会预测每个token)

http://chatgpt.dhexx.cn/article/f446rVxD.shtml

相关文章

BERT和GPT模型简介

1. 引言 从现在的大趋势来看,使用某种模型预训练一个语言模型看起来是一种比较靠谱的方法。从之前 AI2 的 ELMo,到 OpenAI 的 fine-tune transformer,再到 Google 的 BERT、GPT,全都是对预训练的语言模型的应用。 本文将主要介绍…

BERT模型简介

基础架构-Transformer的Encoder: 由下到上,依次三个部分为输入、注意力机制和前馈神经网络 基础的Bert,六个encoder,六个decoder。 输入部分 input token embedding segment embedding position embedding bert预训练的NSP&am…

BERT 模型详解

BERT 结构 上图是 BERT 的结构图,左侧的图表示了预训练的过程,右边的图是对于具体任务的微调过程 BERT 的输入 BERT 的输入可以包含一个句子对 (句子 A 和句子 B),也可以是单个句子。同时 BERT 增加了一些有特殊作用的标志位: …

如何从零开始训练BERT模型

我的许多文章都专注于 BERT——这个模型出现并主导了自然语言处理 (NLP) 的世界,标志着语言模型的新时代。 对于那些之前可能没有使用过 Transformer 模型(例如 BERT 是什么)的人,这个过程看起来有点像这样: pip 安装…

BERT模型详解

Auto-Regressive & Auto-Encoding 在介绍当下最火热的BERT模型之前,我们先来看两个概念,Auto-Regressive和Auto-Encoding。 Auto-Regressive Auto-Regressive如上图所示,其实很像是一个语言模型,遵循的是链式法则&#xff0…

BERT(预训练Transformer模型)

目录 一、前言 二、随机遮挡,进行预测 三、两句话是否原文相邻 四、两者结合起来 五、总结 六、参考链接 一、前言 Bert在18年提出,19年发表,Bert的目的是为了预训练Transformer模型encoder网络,从而大幅提高准确率 Bert …

详细介绍BERT模型

文章目录 BERT简介BERT, OpenAI GPT, 和ELMo之间的区别相关工作BERT的改进 BERT 的详细实现输入/输出表示预训练BERT微调BERT BERT用在下游任务GLUE(一个自然语言任务集合)SQuAD v1.1(QA数据集)SQuAD v2.0SWAG 消融实验预训练任务的影响模型大小的影响基于特征的BERT方法 结论 …

BERT模型—2.BERT模型预训练与微调

文章目录 引言一、预训练语言模型1.为什么要进行预训练?2. BERT预训练-掩码预测任务3.BERT预训练-下句预测任务 二、BERT的文本处理—subword tokenizer1. 为什么要学习subword tokenizer?2. 词表生成与分词 三、BERT embedding四、BERT微调—句子分类任务五、BERT…

图解BERT模型:从零开始构建BERT

转载:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么,即:模型的输入、输出分别是什么,以及模型的预训练任务是什么;然后,分析模型的内部结构,图解如何将模…

BERT模型—1.BERT模型架构

文章目录 引言一、Bert模型总览二、注意力机制1.Seq2seq中的注意力操作2.注意力的一般形式(三步曲)3. transformer中的自注意力机制—Self.Attention4. transformer的多头注意力机制5. scaling6. 模型优化技巧:残差连接 三、BERT其他结构特性…

【科研】BERT模型理论详解

原文:https://cloud.tencent.com/developer/article/1389555 本文首先介绍BERT模型要做什么,即:模型的输入、输出分别是什么,以及模型的预训练任务是什么;然后,分析模型的内部结构,图解如何将模…

BERT模型的详细介绍

1.BERT 的基本原理是什么? BERT 来自 Google 的论文Pre-training of Deep Bidirectional Transformers for Language Understanding,BERT 是“Bidirectional Encoder Representations from Transformers”的首字母缩写,整体是一个自编码语言…

图解BERT模型

1. 模型的输入/输出 BERT模型的全称是:BidirectionalEncoder Representations from Transformer。从名字中可以看出,BERT模型的目标是利用大规模无标注语料训练、获得文本的包含丰富语义信息的Representation,即:文本的语义表示&…

BERT模型

BERT模型 Paper: https://arxiv.org/abs/1810.04805 BERT 全称为Bidirectional Encoder Representation from Transformers(来自Transformers的双向编码表示),谷歌发表的发的论文Pre-traning of Deep Bidirectional Transformers for Langu…

BERT模型的结构,特点和实践

BERT模型介绍,特点,资源 一、背景介绍二、BERT与语言模型1.feature-based2.fine-tuning3.BERT的语言模型 三、BERT整体概览1. BERT框架2. BERT模型结构2.1输入部分2.2 BERT的预训练任务任务1:Masked Language Model(MLM)任务2:Nex…

Bert算法:语言模型-BERT详细介绍

本文的目的是向NLP爱好者们详细解析一个著名的语言模型-BERT。 全文将分4个部分由浅入深的依次讲解。1.Bert简介 BERT是2018年10月由Google AI研究院提出的一种预训练模型。 BERT的全称是Bidirectional Encoder Representation from Transformers。BERT在机器阅读理解顶级水平…

Bert 模型学习

一、Bert 模型 BERT 模型的全称是 BidirectionalEncoder Representations from Transformer,基于 Transformer 的双向编码器表示,是一个预训练的语言表征模型,它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼…

【理论篇】是时候彻底弄懂BERT模型了(收藏)

引言 本文对BERT模型的理论进行了一个非常详尽的解释,相信看完本篇文章后,你对BERT模型的理解会上升🚀一个层次。 本文是理论篇,下篇是实战篇。 BERT的基本思想 BERT如此成功的一个原因之一是它是基于上下文(context-based)的嵌…

Hive !!!

文章目录 Hive数据处理方法论step1 了解产品/运营的需求step2 数据收集(数据准备)step3 数据处理(数据调研)step4 数据分析 Hive背景Hive简介引入原因安装hive注意事项一些代码Hive SQL VS SQL Hive的数据类型数据类型Hive架构 Hi…

Shark简介

简介 Shark是一个新的数据分析系统,在集群上进行查询处理和复杂分析。Shark使用一种新的分布式内存抽象,为SQL查询和复杂分析函数提供了统一的运行引擎,并能够有效的容错。这种新的分布式内存抽象使得shark执行SQL查询的速度比Hive快100倍&a…