BERT模型详解

article/2025/9/15 14:11:04

Auto-Regressive & Auto-Encoding

在介绍当下最火热的BERT模型之前,我们先来看两个概念,Auto-Regressive和Auto-Encoding。

在这里插入图片描述

Auto-Regressive

Auto-Regressive如上图所示,其实很像是一个语言模型,遵循的是链式法则,即根据 t t t时刻之前的词预测当前的 x t x_t xt,目标函数为 l o g p ( x ∣ θ ) = l o g ∑ t = 1 T p ( x t ∣ x 1 : t − 1 , θ ) log{p(x|\theta)}=log\sum_{t=1}^T{p(x_t|x_{1:{t-1}},\theta)} logp(xθ)=logt=1Tp(xtx1:t1,θ)​​。其实在Seq2Seq模型中,如果我们不对Decoder部分使用teacher forcing,那它就是一个Auto-Regressive。

Auto-Regressive的优点:是无偏差的,因为它严格遵循链式法则

Auto-Regressive的缺点:是一个单向模型,在预测当前词的时候看不到后面的信息

Auto-Encoding

最原始的Auto-Encoding是将原本的输入 x x x​经过一个模型得到一个输出 x ^ \hat{x} x^​,然后我们希望 ∑ ∣ ∣ x − x ^ ∣ ∣ 2 \sum||x-\hat{x}||_2 xx^2​最小化。而另外一种叫做Denosing的Auto-Encoder,即我们的输入是 x + δ x+\delta x+δ​。如上图所示,输入中的[MASK]就是我们的噪声 δ \delta δ​,我们希望模型能够还原这些[MASK]。它的目标函数是 l o g p ( x ∣ x 1 : t − 1 , θ ) ≈ ∑ t = 1 T m t p ( x t ∣ x 1 : t − 1 , θ ) log{p(x|x_{1:{t-1}},\theta)}\approx{\sum_{t=1}^T{m_t p(x_t|x_{1:{t-1}},\theta)}} logp(xx1:t1,θ)t=1Tmtp(xtx1:t1,θ)​​,之所以是约等号,是因为它并不遵循链式法则​,是一个双向的模型。

Auto-Encoding的优点:双向模型
Auto-Encoding的缺点:1、有偏差(discrepancy)

​ 2、没有考虑[MASK]词之间的关系,即[MASK]之间是independent的

BERT

BERT的全称是Bidirectional Encoder Representation from Transformer,由此可见,BERT模型的主要部分是Transformer中的Encoder。

BERT是一个预训练模型,对于一个预训练模型,要考虑的问题通常有两个:

  1. model structure,即模型结构
  2. pre-train task,即用什么任务来做预训练

BERT模型结构

BERT就是利用了Transformer中的Encoder,模型结构上没有太大创新。

BERT模型有两种,一种叫 B E R T b a s e BERT_{base} BERTbase​,另一种叫做 B E R T l a r g e BERT_{large} BERTlarge​,这两者只是模型复杂度上的不同。

B E R T b a s e BERT_{base} BERTbase L a y e r : 12 Layer:12 Layer:12 H i d d e n _ d i m : 768 Hidden\_dim:768 Hidden_dim:768 A t t n _ H e a d : 12 Attn\_Head:12 Attn_Head:12 T o t a l _ P a r a m : 110 M Total\_Param: 110M Total_Param:110M

B E R T l a r g e BERT_{large} BERTlarge​: L a y e r : 24 Layer:24 Layer:24​, H i d d e n _ d i m : 1024 Hidden\_dim:1024 Hidden_dim:1024​, A t t n _ H e a d : 16 Attn\_Head:16 Attn_Head:16​, T o t a l _ P a r a m : 340 M Total\_Param: 340M Total_Param:340M

BERT的预训练任务

这一部分是BERT的核心,BERT之所以取得了巨大的成功,源于其设计的预训练任务和在预训练中使用了大量的文本。接下来我们分别介绍。

Mask Language Model(MLM)

MLM任务是BERT的核心,它的intuition其实就来自于我们高中英语非常常见的一种题型:完形填空。在模型中,作者将输入的文本进行MASK填充,具体细节如下:

  1. 在句子开头加入[CLS]token,两个句子之间加入[SEP]token
  2. 随机选择输入中 15 % 15\% 15%的token进行[MASK]填充
  3. 在这 15 % 15\% 15%选中的部分中, 80 % 80\% 80%是真的填充为[MASK], 10 % 10\% 10%被填充任意随机的token,剩下 10 % 10\% 10%​保持不变。
  4. 最后我们以训练好的[CLS]token的embedding作为当前文本的特征向量

在这里插入图片描述

Next Sentence Prediction(NSP)

MLM任务是在token级别进行学习,而NSP任务就是学习句子之间的特征。首先,我们来看一下BERT输入的构成

在这里插入图片描述

我们可以看到,除了Transformer中原有的Token Embedding和Position Embedding之外,BERT中增加了一个Segment Embedding。 Segment Embedding是用来区分每个token属于A句子还是B句子,而NSP的任务就是预测同时输入的A句和B句是不是上下句的关系,最后仍然使用[CLS]token映射到二维进行标签分类。

BERT的Fine-tune

BERT模型能做的下游任务很多,但是不包括文本生成任务。因为文本生成的时候模型是不能看到当前位置以及之后的信息的,而BERT只使用了Encoder部分,做的是Self-Attention,因此不适于用来做文本生成任务。

BERT进行Fine-tuning后可以完成的downstream tasks有:

  1. Sentence Pair Classification:这个很好理解,因为BERT本身就是同时训练两个句子,因此对于pair分类任务肯定能够完成
  2. Single Sentence Classification:就是文本分类,由于文本分类我们只会输入一个句子,因此这里的Segment Embedding只有一种
  3. Question Answering:这里的问答任务特指Stanford的问答数据集SQuAD v1.1,这个任务是一个问题对应一篇短文,而这个问题的答案就在文章当中。对于这个任务,BERT要做的只是多训练两个权重。首先,输入还是不变,同时输入Question和Paragraph。然后,我们定位问题答案的方式是判断答案[START]和[END]的位置,也就是找到答案区间。因此,我们给Paragraph中每个训练好的embedding一个[START]权重,一个[END]权重,其实就是训练两个全连接层,然后经过softmax得到概率,选择概率最大的作为[START]和[END]。
  4. Single Sentence Tagging:比如NER、POS-Tagging任务等,这个任务也比较好实现。

BERT模型的变体

  1. AlBERT:主要是进行参数量的缩减,作者注意到参数量主要集中在Embedding层中 ∣ V ∣ ∗ ∣ H ∣ |V|*|H| VH的部分,因为 ∣ V ∣ |V| V是非常大的,因此提出使用矩阵分解将 ∣ V ∣ ∗ ∣ H ∣ |V|*|H| VH的矩阵分解为 ∣ V ∣ ∗ ∣ E ∣ + ∣ E ∣ ∗ ∣ H ∣ |V|*|E|+|E|*|H| VE+EH的两个矩阵,而 E < < H E<<H E<<H,这样就大大减少了参数量并且模型的表现下降很小。
  2. RoBERTa:依然是进行了一些优化,然后提出了NSP任务没啥卵用。
  3. KBERT
  4. KGBERT
  5. FINBERT
  6. SpanBERT

这些我们在这里不详述,感兴趣可再去详细了解。


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

相关文章

BERT(预训练Transformer模型)

目录 一、前言 二、随机遮挡&#xff0c;进行预测 三、两句话是否原文相邻 四、两者结合起来 五、总结 六、参考链接 一、前言 Bert在18年提出&#xff0c;19年发表&#xff0c;Bert的目的是为了预训练Transformer模型encoder网络&#xff0c;从而大幅提高准确率 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.为什么要进行预训练&#xff1f;2. BERT预训练-掩码预测任务3.BERT预训练-下句预测任务 二、BERT的文本处理—subword tokenizer1. 为什么要学习subword tokenizer?2. 词表生成与分词 三、BERT embedding四、BERT微调—句子分类任务五、BERT…

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

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

BERT模型—1.BERT模型架构

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

【科研】BERT模型理论详解

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

BERT模型的详细介绍

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

图解BERT模型

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

BERT模型

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

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

BERT模型介绍&#xff0c;特点&#xff0c;资源 一、背景介绍二、BERT与语言模型1.feature-based2.fine-tuning3.BERT的语言模型 三、BERT整体概览1. BERT框架2. BERT模型结构2.1输入部分2.2 BERT的预训练任务任务1&#xff1a;Masked Language Model(MLM)任务2&#xff1a;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&#xff0c;基于 Transformer 的双向编码器表示&#xff0c;是一个预训练的语言表征模型&#xff0c;它强调了不再像以往一样采用传统的单向语言模型或者把两个单向语言模型进行浅层拼…

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

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

Hive !!!

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

Shark简介

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

Vue3中shallowReactive 与 shallowRef 的用法

shallowReactive 与 shallowRef shallowReactive&#xff1a;只处理对象最外层属性的响应式&#xff08;浅响应式&#xff09;。 shallowRef&#xff1a;只处理基本数据类型的响应式, 不进行对象的响应式处理。 什么时候使用? 如果有一个对象数据&#xff0c;结构比较深, 但…

2018华为软挑--模拟退火+FF解决装箱问题【C++代码】

算法简介&#xff1a; 装箱问题是一个NP完全问题&#xff0c;求解全局最优解有很多种方法&#xff1a;遗传算法、禁忌搜索算法、蚁群算法、模拟退火算法等等&#xff0c;本次使用模拟退火&#xff0c;它的优点是在参数合适的情况下基本上可以100%得到全局最优解&#xff0c;缺点…

2020华为软挑热身赛代码开源-思路大起底(华为软件精英挑战赛编程闯关)

本文首发于个人公众号【两猿社】&#xff0c;后台回复【华为】&#xff0c;获取完整开源代码链接。 昵称&#xff1a;lou_shang_shi_bian_tai 成绩:0.032 社长没有针对硬件做任何优化&#xff0c;热身赛成绩也一般。但有些比赛的trick我想与大家一起分享&#xff0c;希望对继续…

2021华为软挑-成渝复赛复盘

成渝赛区 团队名&#xff1a;newWorld 初赛 rank 22&#xff0c;复赛 rank 22。 github源码&#xff1a;https://github.com/Yin-Freedom/codecraft_2021 赛题介绍 赛题网址&#xff1a;https://competition.huaweicloud.com/advance/1000041380/circumstance 本次赛题来源…

2020华为软挑热身赛

基于高斯贝叶斯分类的C优化器 摘要&#xff1a;2020华为软件挑战赛如期举行&#xff0c;本次挑战赛分为热身赛、初赛、复赛、总决赛4个部分&#xff0c;其中热身赛结合当前机器学习中分类问题以及鲲鹏服务器性能相关来出题。为了解决该问题&#xff0c;达到算法准确率和程序时…