再读bert(Bidirectional Encoder Representations from Transformers)

再读 BERT,仿佛在数字丛林中邂逅一位古老而智慧的先知。初次相见时,惊叹于它以 Transformer 架构为罗盘,在预训练与微调的星河中精准导航,打破 NLP 领域长久以来的迷雾。而如今,书页间跃动的不再仅是 Attention 机制精妙的数学公式,更是一场关于语言本质的哲学思辨 —— 它让我看见,那些被编码的词向量,恰似人类思维的碎片,在双向语境的熔炉中不断重组、淬炼,将离散的文字升华为可被计算的意义。BERT 教会我们,语言从来不是孤立的字符堆砌,而是承载着文化、逻辑与情感的多维载体,每一次模型的迭代与优化,都是人类向理解语言本质更深处的一次虔诚叩问,在这过程中,我们既是技术的创造者,也是语言奥秘的永恒探索者。

论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

Github:https://github.com/google-research/bert?tab=readme-ov-file

1.引言与核心创新

  • 背景

现有预训练模型(如 ELMo、GPT)多基于单向语言模型,限制深层双向表征能力。

  • 创新点

(1)提出BERT,通过MLMNSP预训练任务,实现真正的深层双向 Transformer 表征。

(2)证明预训练模型可通过简单微调(仅添加输出层)适配多任务,无需复杂架构设计。

2.模型架构与输入表征

  • 模型结构:

BERT(Bidirectional Encoder Representations from Transformers)由Google 提出并基于 Transformer 架构进行开发的预训练语言模型。如图所示, BERT 模型是由多个 Transformer 的编码器逐层叠加而成。 BERT 模型包括两种标准配置,其中 Base 版本包含 12 层 Transformer 编码器,而 Large版本包含 24 层 Transformer 编码器,其参数总数分别为 110M 和 340M。

BERT 模型的关键特点是能够全方位地捕捉上下文信息。与传统的单向模型(GPT-1 等自回归模型)相比, BERT 能够从两个方向考虑上下文,涵盖了某个词元之前和之后的信息。传统的模型往往只从一个固定的方向考虑上下文,这在处理复杂的语义关系和多变的句子结构时可能会遇到困难。例如,在问答系统中,单一方向可能导致模型不能完全理解问题的上下文,从而影响其回答的准确性。此外,在情感分析、关系抽取、语义角色标注、文本蕴涵和共指解析等任务中,单向方法可能无法充分捕获复杂的语义关系和上下文依赖,限制了其性能。为了应对这些挑战, BERT 通过预测遮蔽的词元来全面理解句子中的上下文,从而在许多 NLP 任务中实现了显著的性能增强。

  • Transformer 配置

模型

层数 (L)

隐层大小 (H)

注意力头 (A)

参数总量

BERT BASE

12

768

12

110M

BERT LARGE

24

1024

16

340M

  • 输入表征

采用WordPiece 分词(30k 词汇表),添加特殊 token:

[CLS]:序列分类标识,对应隐层用于分类任务。

[SEP]:句子对分隔符,段嵌入(Sentence A/B)区分句子归属。

输入嵌入 = 词嵌入 + 段嵌入 + 位置嵌入。

3.训练任务设计

BERT 模型的训练过程通常分为预训练(Pre-training)与微调训练(Finetuning)等两部分。

3.1 预训练

在预训练阶段, BERT 模型在大量未标注的文本数据上进行训练,目标是学习文本之间的深层次关系和模式。具体来说,它使用了两种训练策略:

i)掩码语言模型 (Masked Language Model);

ii)预测下一句(Next Sentence Prediction)。

任务 1:掩码语言模型(MLM)

掩码策略:随机选择 15% tokens,其中:

80% 替换为[MASK](如my dog is [MASK]),

10% 替换为随机词(如my dog is apple),

10% 保留原词(如my dog is hairy)。

目标:通过双向注意力预测原词,缓解预训练与微调时[MASK]未出现的不匹配问题。

任务 2:下一句预测(NSP)

数据生成:50% 真实连续句对(标签 IsNext),50% 随机句对(标签 NotNext)。

目标:通过[CLS]隐层预测句对关系,提升句子级语义理解(如 QA、NLI 任务)。

3.2 微调

微调训练阶段是在预训练的 BERT 模型基础上,针对特定任务进行的训练。这一阶段使用具有标签的数据,如情感分析或命名实体识别数据。通过在预训练模型上加载特定任务的数据进行微调, BERT 能够在各种下游任务中达到令人满意的效果。

BERT 模型微调训练的目的是使其具备处理各种下游任务的能力,微调的任务包括:句子对分类任务、单句分类任务、问答任务和命名实体识别等。

微调训练中为了使 BERT 适应各种 NLP 任务,模型首先调整其输入和输出。例如,在基于句子对的分类任务中,假设要判断句子 A“这家餐厅的食物很美味。”和句子 B“菜品口味很棒,值得推荐。”之间的关系,模型的输入是这两个句子的组合,而输出可能是它们的关系分类,例如“相关”或“不相关”。而在命名实体识别任务中,如果输入句子为“任正非是华为的创始人”,输出则是每个词的实体类别,如“任正非”被标记为“PERSON”,“华为”被标记为“ORGANIZATION”。在针对不同的任务,如文本分类、实体识别或问答等,进行微调训练时,会在 BERT 模型上增添一个特定的输出层。这个输出层是根据特定任务的需求设计的。例如,如果是文本分类任务,输出层可能包含少量神经元,每个神经元对应一个类别。同时,通过反向传播对模型参数进行调整。微调的过程就像是对模型进行 “二次训练”。

4.实验结果与 SOTA 突破

  • GLUE 基准(11 任务)

任务

BERT LARGE 得分

前 SOTA

提升幅度

MNLI(自然语言推理)

86.7%

82.1%(GPT)

+4.6%

QNLI(问答推理)

92.7%

87.4%(GPT)

+5.3%

SST-2(情感分析)

94.9%

91.3%(GPT)

+3.6%

平均得分

82.1%

75.1%(GPT)

+7.0%

  • SQuAD 问答任务

v1.1(有答案):单模型 F1 值 93.2,ensemble 达 93.9,超过人类表现(91.2%)。

v2.0(无答案):F1 值 83.1,较前 SOTA 提升 5.1%,首次接近人类表现(89.5%)。

  • SWAG 常识推理:BERT LARGE 准确率 86.3%,远超 GPT(78.0%)和人类专家(85.0%)。

5.消融研究与关键发现

  • NSP 任务的重要性

移除 NSP 后,MNLI 准确率从 84.4% 降至 83.9%,QNLI 从 88.4% 降至 84.9%,证明句子级关系建模对 QA 和 NLI 至关重要。

  • 双向性 vs 单向性

单向模型(LTR,类似 GPT)在 SQuAD F1 值仅 77.8%,远低于 BERT BASE 的 88.5%;添加 BiLSTM 后提升至 84.9%,仍显著落后。

  • 模型规模的影响

增大参数(如从 110M 到 340M)持续提升性能,即使在小数据集任务(如 MRPC,3.5k 训练例)中,BERT LARGE 准确率 70.1%,较 BASE 的 66.4% 提升 3.7%。

6.对比现有方法

  • 与 GPT 对比

    • GPT 为单向 Transformer(仅左到右),BERT 通过 MLM 实现双向,且预训练数据多 3 倍(33 亿词 vs GPT 的 8 亿词)。
    • BERT 在 GLUE 平均得分比 GPT 高 7.0%,证明双向性和 NSP 的关键作用。
  • 与 ELMo 对比

    • ELMo 通过拼接单向 LSTM 输出实现双向,为特征基方法;BERT 为微调基,参数效率更高,且深层双向表征更优。

7.关键问题

问题 1:BERT 如何实现深层双向语义表征?

答案:BERT 通过 ** 掩码语言模型(MLM)下一句预测(NSP)** 任务实现双向表征。MLM 随机掩码 15% 的输入 tokens(80% 替换为 [MASK]、10% 随机词、10% 保留原词),迫使模型利用左右语境预测原词,避免单向模型的局限性;NSP 任务通过判断句对是否连续,学习句子级语义关系,增强模型对上下文依赖的建模能力。

问题 2:BERT 在预训练中如何处理 “掩码 token 未在微调时出现” 的不匹配问题?

答案:BERT 采用混合掩码策略:在 15% 被选中的 tokens 中,仅 80% 替换为 [MASK],10% 随机替换为其他词,10% 保留原词。这种策略减少了预训练与微调时的分布差异,使模型在微调时更适应未出现 [MASK] 的真实场景,同时通过随机替换和保留原词,增强模型对输入噪声的鲁棒性。

问题 3:模型规模对 BERT 性能有何影响?

答案:增大模型规模(如从 BERT BASE 的 110M 参数到 LARGE 的 340M 参数)显著提升性能,尤其在小数据集任务中优势明显。实验显示,更大的模型在 GLUE 基准的所有任务中均表现更优,MNLI 准确率从 84.6% 提升至 86.7%,MRPC(3.5k 训练例)准确率从 66.4% 提升至 70.1%。这表明,足够的预训练后,更大的模型能学习更丰富的语义表征,即使下游任务数据有限,也能通过微调有效迁移知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始 保姆级教程 Ubuntu20.04系统安装MySQL8、服务器配置MySQL主从复制、本地navicat远程连接服务器数据库

从零开始:Ubuntu 20.04 系统安装 MySQL 8、服务器配置 MySQL 主从复制、本地 Navicat 远程连接服务器数据库 初始化服务器1. 更新本地软件包列表2. 安装 MySQL 服务器3. 查看 MySQL 安装版本4. 登录 MySQL 管理终端5. 设置 root 用户密码(推荐使用 nativ…

java怎么完善注册,如果邮箱中途更换,能否判断

解析在下面 附赠代码 private static class CodeInfo {String code;long timestamp;CodeInfo(String code, long timestamp) {this.code code;this.timestamp timestamp;}}// 存储验证码(邮箱 -> 验证码信息)(保证线程安全) 以免中途更改邮箱pri…

n8n 中文系列教程_01. 简单易懂的现代AI魔法,n8n的快速了解与概念科普(文末有彩蛋)

1. 教程简介 欢迎来到“无代码工具探索”课程,这是专为非技术人员设计的指南(当然,技术人员也可以从中受益)。我们的目标是通过无代码工具来提升工作效率,尤其是利用像 n8n 这样的灵活数据库平台。这些工具被誉为“现…

解码 Web Service:从技术原理到应用场景的深度剖析

Web Service 是一种基于网络的、分布式的计算技术,它允许不同的应用程序之间通过网络进行通信和交互。以下是关于 Web Service 的详细介绍: 一、定义与概念 Web Service 是一种可以通过 Web 协议(如 HTTP)进行访问的软件组件&am…

Nacos启动报错

Nacos启动是在单机模式下,不是集群模式 点击startup.cmd启动会报错 打开bin目录 rem是注释的意思,在nacos1.3.2之后,nacos默认的都是集群模式,我们这里单机测试就是用单机模式。 也可以修改MODE,如果选择不修改&…

uniapp-商城-26-vuex 使用流程

为了能在所有的页面都实现状态管理,我们按照前面讲的页面进行状态获取,然后再进行页面设置和布局,那就是重复工作,vuex 就会解决这样的问题,如同类、高度提炼的接口来帮助我们实现这些重复工作的管理。避免一直在造一样…

Git 命令速查手册

听说用美图可以钓读者? 一、基础操作核心命令 1. 仓库初始化与克隆 命令作用示例git init创建新仓库git init my-projectgit clone克隆远程仓库git clone [https://github.com/user/repo.git](https://github.com/user/repo.git)git remote add关联远程仓库git re…

信息量、香农熵、交叉熵、KL散度总结

信息量 对于一个事件而言,它一般具有三个特征: 小概率事件往往具有较大的信息量 大概率事件往往具有较小的信息量 独立事件的信息量相互可以相加 比如我们在买彩票这个事件中,彩票未中奖的概率往往很高,对我们而言一点也不稀…

使用C语言的cJSON中给JSON字符串添加转义

在 cJSON 库中,没有直接提供 一个函数来专门给 JSON 字符串添加转义(如将 " 转义为 \",\n 转义为 \\n 等)。 但 cJSON 在 序列化(cJSON_Print 或 cJSON_PrintUnformatted) 时会自动处理转义字符…

宇树机器狗go2—slam建图(1)点云格式

0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…

linux socket编程之udp(实现客户端和服务端消息的发送和接收)

目录 一.创建socket套接字(服务器端) 二.bind将prot与端口号进行绑定(服务器端) 2.1填充sockaddr_in结构 2.2bind绑定端口 三.直接通信(服务器端) 3.1接收客户端发送的消息 3.2给客户端发送消息 四.客户端通信 4.1创建socket套接字 4.2客户端bind问题 4.3直接通信即可…

第1期:Python基础语法入门

1.1 Python简介 Python是一种解释型、面向对象、动态数据类型的高级编程语言。它设计简洁,易于学习,适合初学者。Python广泛应用于数据科学、人工智能、Web开发、自动化脚本等领域。它的语法简洁易懂,强调代码的可读性。 1.2 安装Python与配…

使用EXCEL绘制平滑曲线

播主播主,你都多少天没更新了!!!泥在干什么?你还做这个账号麻?!!! 做的做的(哭唧唧),就是最近有些忙,以及…… 前言&…

当算力遇上马拉松:一场科技与肉身的极限碰撞

目录 一、从"肉身苦修"到"科技修仙" 二、马拉松的"新大陆战争" 三、肉身会被算法"优化"吗? 马拉松的下一站是"人机共生"时代 当AI能预测你的马拉松成绩,算法能规划最佳补给方案,智能装备让训练效率翻倍——你还会用传…

MLLMs for TSAD ?

项目链接:Multimodal LLMs Advance Time Series Analysis 代码链接:https://github.com/mllm-ts/VisualTimeAnomaly 出处:ICLR 2025 一 文章动机 多模态 LLM (MLLM) 通过 “视觉” 方式处理时序的潜力仍未充分探索; 人类检测 “时序异常” 的自然方式:可视化、文本描…

开发基于python的商品推荐系统,前端框架和后端框架的选择比较

开发一个基于Python的商品推荐系统时,前端和后端框架的选择需要综合考虑项目需求、开发效率、团队熟悉度以及系统的可扩展性等因素。 以下是一些推荐的框架和建议: 后端框架 Flask 优点: 轻量级:Flask的核心非常简洁,…

chili3d调试笔记2+添加web ui按钮

onclick 查找 打个断点看看 挺可疑的,打个断点看看 挺可疑的,打个断点看看 打到事件监听上了 加ui了 加入成功 新建弹窗-------------------------------------- 可以模仿这个文件,写弹窗 然后在这里注册一下,外部就能调用了 对了…

【重学Android】1.关于@Composer注解的一点知识笔记

最新因为一些原因,开始重新学习Android及kotlin编程,也觉得可以顺带记录下这个过程中的一些知识点,也可以用作日后自己查找复习。 Composable 注解在 Android 开发中的使用 Composable 是 Jetpack Compose(Android 的现代声明式…

qt+mingw64+cmake+libqrencode项目编译和搭建成功记录

最近要使用高拍仪拍照获取照片,然后识别照片中的二维码数据、使用QZxing只能识别出一个条码、另外一个条码准备测试用其他的开源项目(如libqrencode-4.1.1)来进行测试,故进行本文的项目环境搭建测试,最后成功。 本机开…

【今日三题】判断是不是平衡二叉树(递归) / 最大子矩阵(二维前缀和) / 小葱的01串(滑动窗口)

⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 判断是不是平衡二叉树(递归)最大子矩阵(二维前缀和)小葱的01串(滑动窗口) 判断是不是平衡二叉树(递归) 判断是不是平衡二叉…