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

article/2025/9/15 14:29:24

本文的目的是向NLP爱好者们详细解析一个著名的语言模型-BERT。 全文将分4个部分由浅入深的依次讲解。

1.Bert简介

BERT是2018年10月由Google AI研究院提出的一种预训练模型。

BERT的全称是Bidirectional Encoder Representation from Transformers。BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩: 全部两个衡量指标上全面超越人类,并且在11种不同NLP测试中创出SOTA表现,包括将GLUE基准推高至80.4% (绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进5.6%),成为NLP发展史上的里程碑式的模型成就。
 

2.关于Bert的模型架构

总体架构:如下图所示, 最左边的就是BERT的架构图,可以很清楚的看到BERT采用了Transformer Encoder block进行连接, 因为是一个典型的双向编码模型。
 

BERT01

BERT02


3.1 关于Bert训练过程中的关键点

1)四大关键词: Pre-trained, Deep, Bidirectional Transformer, Language Understanding

a. Pre-trained: 首先明确这是个预训练的语言模型,未来所有的开发者可以直接继承!

整个Bert模型最大的两个亮点都集中在Pre-trained的任务部分。

b. Deep

Bert_BASE:Layer = 12, Hidden = 768, Head = 12, Total Parameters = 110M

Bert_LARGE:Layer = 24, Hidden = 1024, Head = 16, Total Parameters = 340M

对比于Transformer: Layer = 6, Hidden = 2048, Head = 8,是个浅而宽,说明Bert这样深而窄的模型效果更好(和CV领域的总体结论基本一致)。

C. Bidirectional Transformer: Bert的个创新点,它是个双向的Transformer网络。

Bert直接引用了Transformer架构中的Encoder模块,并舍弃了Decoder模块, 这样便自动拥有了双向编码能力和强大的特征提取能力。

D. Language Understanding: 更加侧重语言的理解,而不仅仅是生成(Language Generation)
 

3.2 Bert的语言输入表示包含了3个组成部分: (见上面第二张图)

词嵌入张量: word embeddings

语句分块张量: segmentation embeddings

位置编码张量: position embeddings

最终的embedding向量是将上述的3个向量直接做加和的结果。
 

3.3: Bert的预训练中引入两大核心任务 (这两个任务也是Bert原始论文的两个最大的创新点)

a 引入Masked LM(带mask的语言模型训练)

a.1 在原始训练文本中,随机的抽取15%的token作为即将参与mask的对象。

a.2 在这些被选中的token中,数据⽣生成器器并不不是把他们全部变成[MASK],⽽而是有下列列3个选择:

a.2.1 在80%的概率下,用[MASK]标记替换该token, 比如my dog is hairy -> my dog is [MASK]

a.2.2 在10%的概率下, ⽤⼀个随机的单词替换该token, 比如my dog is hairy -> my dog is apple

a.2.3 在10%的概率下, 保持该token不变, 比如my dog is hairy -> my dog is hairy

a.3 Transformer Encoder在训练的过程中, 并不知道它将要预测哪些单词? 哪些单词是原始的样? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词? 正是在这样一种高度不确定的情况下, 反倒逼着模型快速学习该token的分布式上下文的语义, 尽最大努力学习原始语言说话的样子!!! 同时因为原始文本中只有15%的token参与了MASK操作, 并不会破坏原语言的表达能力和语言规则!!!

b 引入Next Sentence Prediction (下⼀句话的预测任务)

b.1 目的是为了服务问答,推理,句⼦主题关系等NLP任务。

b.2 所有的参与任务训练的语句都被选中参加。

·50%的B是原始⽂本中实际跟随A的下⼀句话。(标记为IsNext,代表正样本)

·50%的B是原始⽂本中随机抽取的⼀句话。(标记为NotNext,代表负样本)

b.3 在该任务中,Bert模型可以在测试集上取得97-98%的准确率。
 

3.4 关于基于Bert的模型微调(fine-tuning)

只需要将特定任务的输入,输出插入到Bert中,利用Transformer强大的注意力机制就可以模拟很多下游任务。(句子对关系判断,单文本主题分类,问答任务(QA),单句贴标签(命名实体识别))

微调的若干经验:

batch size:16,32

epochs:3,4

learning rate:2e-5,5e-5

全连接层添加:layers:1-3,hidden_size:64,128

BERT03

4、Bert模型本身的优点和缺点。 


优点: Bert的基础建立在transformer之上,拥有强大的语言表征能力和特征提取能力。在11项 NLP基准测试任务中达到了state of the art。同时再次证明了双向语言模型的能力更加强大。

缺点:
1)可复现性差,基本没法做,只能拿来主义直接用!
2)训练过程中因为每个batch_size中的数据只有15%参与预测,模型收敛较慢,需要强大的算力支撑!
 

引申:

1)深度学习就是表征学习 (Deep learning is representation learning)

·整个Bert在11项语言模型大赛中,基本思路就是双向Transformer负责提取特征,然后整个网络加一个全连接线性层作为fine-tuning微调。但即便如此傻瓜式的组装,在NLP中著名的难任务-NER(命名实体识别)中,甚至直接去除掉了CRF层,照样大超越BiLSTM + CRF的组合效果, 这去哪儿说理去???

2)规模的极端重要性 (Scale matters)

不管是Masked LM,还是下一句预测Next Sentence Prediction,都不是首创的概念,之前在其他的模型中也提出过,但是因为数据规模+算力局限没能让世人看到这个模型的潜力,那些Paper也就不值钱了。但是到了谷歌手里, 不差钱的结果就是Paper值钱了!!

3)关于进一步的研究展示了Bert在不同的层学习到了什么。

·低的网络层捕捉到了短语结构方面的信息。

·单词和字的特征表现在3-4层,句法信息的特征表现在6-9层,句⼦语义信息的特征表现在10-12层。

·主谓一致的特征表现在8-9层 (属于句法信息的一种)。

 

推荐学习:

Python人工智能20个小时玩转NLP自然语言处理
视频http://yun.itheima.com/course/832.html?stt
资料链接:https://pan.baidu.com/s/1yPGqA74OLowslsru7GlLBQ 
提取码:uy72


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

相关文章

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华为软挑(初赛笔记) …

2023华为软件精英挑战赛笔记心得(Python实现)

第一次参加华为软挑,问了周围一圈人没人组队,看了眼题目,感觉挺有意思的,就打算自己写来跑一下,不求分数,主要是想学点东西,顺便记录一下。(最后跑了195w,自己的能力也就…