人工智能【第24篇】BERT模型详解:预训练语言模型的里程碑

作者的话 :在前面的文章中,我们学习了Transformer架构。2018年,Google发布了BERT(Bidirectional Encoder Representations from Transformers),开启了预训练语言模型的新时代。BERT通过双向编码器和创新的预训练任务,在多项NLP任务上取得了突破性进展。本文将深入讲解BERT的原理、预训练、微调和应用,帮助你理解这一里程碑式的模型!

一、BERT概述

1.1 什么是BERT?

BERT是Google在2018年10月提出的预训练语言模型,全称为Bidirectional Encoder Representations from Transformers

核心特点

特点 说明 优势
双向编码 同时考虑左右上下文 理解更全面
Transformer架构 使用多层Transformer Encoder 并行计算,长距离依赖
预训练+微调 先在大规模语料预训练,再针对任务微调 迁移学习能力强
无监督预训练 无需人工标注数据 可利用海量文本
上下文相关 同一词在不同上下文有不同表示 语义理解更准确

1.2 BERT的里程碑意义

时间线

时间 模型 核心贡献
2018年10月 BERT Base/Large发布 11项NLP任务SOTA,开启预训练时代
2019年 RoBERTa 优化训练策略,移除NSP任务
2019年 ALBERT 参数共享+矩阵分解,大幅减少参数量
2019年 DistilBERT 知识蒸馏,模型压缩40%
2019年 ELECTRA 判别式预训练,样本效率更高
2019年 SpanBERT span-level mask,问答任务提升
2020年 TinyBERT 更极致的蒸馏,6层BERT仅4%大小
2021年 DeBERTa 解耦注意力机制,SuperGLUE超越人类

1.3 模型对比

特性 Word2Vec ELMo GPT BERT
架构 浅层神经网络 双向LSTM Transformer Decoder Transformer Encoder
上下文 静态 动态但独立 单向(左到右) 双向(左右同时)
层数 1-2层 2层BiLSTM 12层 12/24层
参数量 数亿 9400万 1.17亿 1.1亿/3.4亿
主要应用 词嵌入 特征提取 文本生成 文本理解

二、BERT架构详解

2.1 模型规模

参数 BERT-Base BERT-Large
层数(L) 12 24
隐藏层维度(H) 768 1024
注意力头数(A) 12 16
参数量 1.1亿 3.4亿
词汇表大小 30,522 30,522
最大序列长度 512 512

2.2 输入表示

BERT的输入由三部分组成:Token Embeddings + Segment Embeddings + Position Embeddings

特殊标记 符号 作用
CLS 101 分类标记,用于句子级任务
SEP 102 分隔标记,分隔句子或标记结尾
MASK 103 掩码标记,用于MLM任务
PAD 0 填充标记,用于补齐序列

三、预训练任务

3.1 Masked Language Model(MLM)

随机mask输入序列中的部分token,让模型预测被mask的token。

策略 概率 目的
替换为MASK 80% 主要训练目标
替换为随机词 10% 防止模型只学习MASK
保持不变 10% 微调时保持一致

3.2 Next Sentence Prediction(NSP)

标签 概率 构造方式
IsNext 50% 真实的连续句子
NotNext 50% 随机采样句子

四、微调方法

4.1 不同任务的输入输出

任务类型 输入格式 输出 示例
文本分类 CLS 文本 SEP CLS的表示 情感分析
句子对分类 CLS A SEP B SEP CLS的表示 语义相似度
问答 CLS 问题 SEP 段落 SEP 开始/结束位置 SQuAD
序列标注 CLS 文本 SEP 每个token的标签 NER

五、BERT变体

模型 改进点 特点
RoBERTa 训练策略优化 动态mask,更大batch
ALBERT 参数共享 减少参数量
DistilBERT 知识蒸馏 保留97%性能,减少40%参数
ELECTRA 判别式预训练 替换token检测
SpanBERT span-level mask 更适合问答任务

六、代码实现

使用Hugging Face的transformers库可以快速加载和使用BERT。

复制代码
from transformers import BertTokenizer, BertModel

# 加载分词器和模型
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')

# 输入文本
text = "Hello, how are you?"
inputs = tokenizer(text, return_tensors='pt')

# 前向传播
outputs = model(**inputs)

七、应用场景

任务 数据集 BERT效果
情感分析 SST-2 93.5%
自然语言推理 MNLI 86.7%
问答 SQuAD 1.1 F1: 93.2
命名实体识别 CoNLL-2003 F1: 92.8

八、总结与学习建议

8.1 核心要点

  • BERT使用双向Transformer Encoder
  • MLM和NSP两个预训练任务
  • 预训练+微调的范式
  • 在多项NLP任务上取得SOTA

8.2 学习路径

Transformer → BERT → RoBERTa → 领域专用模型


下一篇预告:【第25篇】GPT模型详解:生成式预训练的语言模型


本文为系列第24篇,详细讲解了BERT模型。有任何问题欢迎在评论区交流!

标签:BERT、预训练模型、Transformer、自然语言处理、深度学习、NLP、人工智能

相关推荐
Allen_LVyingbo6 小时前
三甲医院医疗AI代码库管理系统研究(上)
网络·transformer·知识图谱·健康医疗
蓝速科技1 天前
便民服务大厅 AI 数字人一体机场景适配与落地指南丨蓝速科技
大数据·网络·数据结构·人工智能·自然语言处理·数据分析·运维开发
Allen_LVyingbo1 天前
医疗人工智能项目全生命周期管理系统:监管知识建模、工程实现与实证评估(下)
大数据·数据库·人工智能·python·自然语言处理·自动化
JAI科研1 天前
YOLO 完全指南(七):YOLO识别工程化 (上)
人工智能·深度学习·神经网络·yolo·目标检测·计算机视觉·transformer
程序猿编码1 天前
扔掉 Python!纯 C++ 本地跑扩散 TTS,GGML 加持,支持 RK3588 NPU 加速
c++·计算机视觉·大模型·transformer·rk3588·推理·ggml
AI人工智能+1 天前
了一种融合OCR与大模型的文档抽取系统,解决传统OCR“识字不识意”的痛点
深度学习·计算机视觉·语言模型·自然语言处理·ocr·文档抽取
Tp_jh2 天前
AMD 395本地部署Qwen3.8-Flash-Next实测,端侧AGI时代也要来了
图像处理·人工智能·opencv·语言模型·自然语言处理·千问
runningshark2 天前
Lecture: Understanding Different Registers: Formal to Consultative
自然语言处理
Zzj_tju2 天前
Embodied Agent 小环境:用状态日志解释成功、绕路与超时
人工智能·深度学习·机器学习·自然语言处理
蓝速科技2 天前
信创终端 POC 测试实战与选型避坑指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理