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

article/2025/9/15 14:23:00

BERT模型介绍,特点,资源

  • 一、背景介绍
  • 二、BERT与语言模型
    • 1.feature-based
    • 2.fine-tuning
    • 3.BERT的语言模型
  • 三、BERT整体概览
      • 1. BERT框架
      • 2. BERT模型结构
        • 2.1输入部分
        • 2.2 BERT的预训练任务
        • 任务1:Masked Language Model(MLM)
        • 任务2:Next Sentence Prediction(NSP)
      • 3. 训练:fine-tune
  • 四、总结
  • 五、相关资料

一、背景介绍

BERT模型是在2018年被提出( Pre-training of Deep Bidirectional Transformers for Language Understanding),预训练领域的里程碑之作,在多项nlp任务上达到了state-of-art,也开启了预训练模型的新篇章。字面注解是关于语言理解的深度双向transformers的预训练模型。它可以学习文本的语义信息,通过向量形式的输出可以用于分类,语义相识度等任务。它是一种预训练语言模型,也就说,它自己已经在大规模预料上训练好的参数,我们在用的时候只需要在这个基础上训练更新参数。不像其他的语言模型,它是在无监督的预料上,在模型的每一层都会文本左右相关的信息进行训练,关于语言模型可参考第二部分。总的来说,你可以在加最后的额外一层,比如全连接进行分类或者更多的语言推理任务(问答等)

二、BERT与语言模型

语言模型被用来学习文本句子的语义信息具体通过一些文本转化成数学表达比如经典的词向量Wordvec等表示,由于其被认为可以获得部分语义信息,改进了很多的nlp处理任务的效果。 包括句子级的任务例如句子推断,句子间的关系,也可以字符级别的任务比如实体识别。现有的技术将语言表示模型用于下游任务的手段: feature-based和fine-tuning。这两种方法都共享了同样的目标函数在预训练阶段,都用单向的语言模型来学习常规语言表示。

1.feature-based

feature-based只变化了最后一层的参数。通常feature-based方法包括两步:(1)首先在大的语料A上无监督地训练语言模型,训练完毕得到语言模型然后构造task-specific model例如序列标注模型。(2)采用有标记的语料B来有监督地训练task-sepcific model,将语言模型的参数固定,语料B的训练数据经过语言模型得到LM embedding,作为task-specific model的额外特征ELMo是这方面的典型工作

2.fine-tuning

Fine-tuning方式是指在已经训练好的语言模型的基础上,加入少量的task-specific parameters, 例如对于分类问题在语言模型基础上加一层softmax网络,然后在新的语料上重新训练来进行fine-tune。除了最后一层,所有的参数都变化了。GPT的训练方式即采用这种(图1),
  图1

图 1 Transformer LM + fine-tuning模型示意图

首先语言模型采用了Transformer Decoder的方法来训练,采用文本预测作为语言模型训练任务,完成训练后,加一层Linear Project来完成分类/相似度计算等NLP任务。因此总结来说,LM + Fine-Tuning的方法工作也包括两步:
构造语言模型,采用大的语料A来训练语言模型

(1)在语言模型基础上增加少量神经网络层来完成specific task例如序列标注、分类等,

(2)然后采用有标记的语料B来有监督地训练模型,这个过程中语言模型的参数并不固定,依然是trainable variables.

3.BERT的语言模型

现有的方法不足以表现出语言表示的全部威力,限制是因为标准语言模型都是没有方向的,例如在OpenAI GPT中,作者用了一个从左到右的结构,通过前k-1个词预测第k个词,从前往后,不断前进,属于单向的预测,这中做法在一些用到与文本双向有关信息理解的时候,不一定最优。BERT改进了这一点,预训练阶段用到:遮蔽语言模型MLM。这可以用到文本的左右的相关信息,训练出一个双向transformer模型。除了双向语言模型之外BERT用到了"预测下一句" 任务句子间联合训练文本对的表示。BERT论文采用了LM + fine-tuning的方法,同时也讨论了BERT + task-specific model的方法。

三、BERT整体概览

1. BERT框架

BERT整体框架包含pre-train和fine-tune两个阶段。pre-train阶段模型是在无标注的标签数据上进行训练,fine-tune阶段,BERT模型首先是被pre-train模型参数初始化,然后所有的参数会用下游的有标注的数据进行训练。

两个阶段

图 2 BERT框架

2. BERT模型结构

BERT的模型结构是一个多层的双向transformer结构的encoder部分。首先来看看BERT输入长什么样子,然后讨论这样的输入训练什么样的模型任务。

2.1输入部分

BERT的输入的编码向量(长度是512)是3个嵌入特征的单位和(图3)。

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

在这里插入图片描述

图 3 BERT输入部分

2.2 BERT的预训练任务

BERT预训练是采用多任务的方式,包括遮蔽语言模型(MLM)和下一个句子预测(NSP)。

任务1:Masked Language Model(MLM)

Masked Language Model(MLM),所谓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‘。至于单词带来的负面影响,因为一个单词被随机替换掉的概率只有15%*10% =1.5%,这个负面影响其实是可以忽略不计的。
另外文章指出每次只预测15%的单词,因此模型收敛的比较慢。

任务2:Next Sentence Prediction(NSP)

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

3. 训练:fine-tune

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

对于其它任务来说,我们也可以根据BERT的输出信息作出对应的预测。图5展示了BERT在11个不同任务中的模型,它们只需要在BERT的基础上再添加一个输出层便可以完成对特定任务的微调。这些任务类似于我们做过的文科试卷,其中有选择题,简答题等等。下图中4其中Tok表示不同的Token, E表示嵌入向量, 表示第 T i T_i Ti个Token在经过BERT处理之后得到的特征向量。

在这里插入图片描述

图 4 BERT在不同任务上的fine-tune示意图

微调的任务,这里以(a)和(d)举例说明:

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

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

四、总结

BERT很受欢迎不是没有原因的,使用Transformer的结构将已经走向瓶颈期的Word2Vec带向了一个新的方向,11个NLP任务的精度大幅提升足以震惊整个深度学习领域;BERT算法还有很大的优化空间,包括依靠位置嵌入和预训练任务MLM这种方式都有其优化空间,以及其参数设置。BERT的训练在目前的计算资源下很难完成,论文中说训练需要在64块TPU芯片上训练4天完成,而一块TPU的速度约是目前主流GPU的7-8倍。预训练模型开源也发展原来越成熟,比如Hugging Face提供了各种预训练语言模型,在第五部分中给出链接,有的既有tensorflow也有pytorch版本,关于hugging face怎么用实际操作已经有很多资料了,官网例子也很详细,配置环境处理好输入输出,直接可以下载拿fine-tune用于咱们的下游任务。

五、相关资料

(1)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
https://arxiv.org/pdf/1810.04805.pdf
(2)Transformer:Attention Is All You Need
https://arxiv.org/abs/1706.03762
(3)Hugging Face,https://huggingface.co/
https://github.com/huggingface/


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

相关文章

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…

Vue3中shallowReactive 与 shallowRef 的用法

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

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

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

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

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

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

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

2020华为软挑热身赛

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

华为软挑赛2023-初赛笔记

前言 比赛介绍 官方链接: 2023华为软件精英挑战赛——普朗克计划 (huaweicloud.com) 赛题介绍 场景介绍 官方赛题介绍: 2023华为软件精英挑战赛初赛赛题及相关材料发布_2023华为软件精英挑战赛_华为云论坛 (huaweicloud.com) 比赛场景如图所示 简单来说,在一…

【C++】2018华为软挑:模拟退火+贪心FF解决装箱问题

本文的主要工作是补充这篇博客的缺失代码,使之能够运行。 2018华为软挑--模拟退火FF解决装箱问题【C代码】_小马哥MAX的博客-CSDN博客算法简介: 装箱问题是一个NP完全问题,求解全局最优解有很多种方法:遗传算法、禁忌搜索…

2020华为软挑热身赛-这些坑我帮你踩过了(华为软件精英挑战赛编程闯关)

本文始发于个人公众号【两猿社】。 声明,为保证比赛公平,本文不会提供比赛源码,仅提供思路与踩坑经验。 他来了,他来了,他带着面试绿卡走来了。 他来了,他来了,他带着20w大奖走来了。 一年一度…

2018华为软挑参赛体验

第一次接触到这个比赛应该是研究生刚入学的时候,在教研室看到了师姐的一份简历,上面就有华为软挑的参赛经历。研一利用空余时间加强C和STL的学习,看完了《C primer》《Effective STL》,自己也写了一些demo,感觉这个比赛…

2022华为软挑编程问题报错总结

for i in number_feature: TypeError: ‘int’ object is not iterable的错误 错误原因:是因为在python里,整型(int)数据是不能直接用于迭代的,而是应该用range()函数 改为如下图:

2021华为软挑部分答疑——哪些你有错却总是找不到的地方,我来带你找啦(含标准输入代码)

前期工作: 2021华为软挑初探——代码实现 2021华为软挑再探——代码实现 1 关于打包 在windows系统下,先把你写的程序写在src里面的CodeCraft-2021里面 然后在这个页面,将这三个文件压缩就可以上传啦: 2 关于标准输入 标准输…

华为软挑2019

参加软挑的一些感悟 写在前边的话 我本科一直在做嵌入式相关的项目,这是第一次参加软件类的竞赛,不得不说过程确实很刺激,最后止步杭厦赛区50强也很是遗憾,明明很接近,最后输在了代码效率上,本地成绩很好的 python代码 ,上传测评运行时间超限(官测环境比本地性能好&…

2021华为软挑初探——代码实现

其他工作: 2021华为软挑部分答疑——哪些你有错却总是找不到的地方,我来带你找啦(含标准输入代码) 2021华为软挑再探——代码实现 这几天华为软挑好多人也是做的热火朝天,作为一个渣渣小孙也来探探,不探…

2020华为软挑总结

文章目录 一、热身赛编程闯关:评价标准:问题分析 二、初赛问题描述评价标准:问题分析思路一:思路二:思路三:针对思路三的提速: 最终结果: 三、code记录初赛两篇不错的总结三、复活赛…

2022华为软挑比赛(初赛笔记)

文章目录 2022华为软挑(初赛笔记)1. 赛题要求2. 解决方案2.1 挑选适合的边缘节点2.2 第一轮:最大分配2.3 第二轮:均值分配 总结 本文仓库地址: Github-CodeCraft-2022 2022华为软挑(初赛笔记) …