当前位置: 首页 > news >正文

详解bert模型

BERT 模型详解:从原理到实践

  • 一、BERT 简介
  • 二、BERT 的核心思想
  • 三、BERT 的模型结构
  • 四、BERT 的输入表示
    • 1 Token Embedding
    • 2 Segment Embedding
    • 3 Position Embedding
  • 五、BERT 的两种预训练任务
    • 1 Masked Language Model(MLM)
    • 2 Next Sentence Prediction(NSP)
  • 六、BERT 在 NLP 任务中的应用
    • 1 文本分类
    • 2 命名实体识别
    • 3 问答系统
  • 七、BERT 的代码示例
  • 八、BERT 的优缺点
    • 优点
    • 缺点
  • 九、计算bert模型的参数
    • Embedding层参数计算
    • Transformer Encoder
      • Multi-Head Attention多头注意力机制
      • Feed Forward
    • Pooler output池化层
    • 总参数

一、BERT 简介

BERT是由 Google 在 2018 年提出的一种预训练语言模型,它极大推动了自然语言处理(NLP)的发展。
BERT 的论文是:Pre-training of Deep Bidirectional Transformers for Language Understanding
在 BERT 出现之前,大多数 NLP 模型都是:

  • 单向语言模型(从左到右)
  • 需要针对每个任务单独训练

而 BERT 提出了 双向上下文表示(Bidirectional Contextual Representation),可以同时利用句子左右两侧的信息。

例如一句话:

苹果很好吃

传统模型可能只看到:

苹果 → 很好吃

而 BERT 会同时看到:

苹果 ← 很好吃

这样可以更好地理解语言语义。


二、BERT 的核心思想

BERT 的核心思想可以概括为:预训练 + 微调(Pretrain + Fine-tune)
流程如下:

大量无标签文本
BERT 预训练
得到通用语言模型
在具体任务上微调
完成 NLP 任务

BERT 可以应用于很多任务,例如:

  • 文本分类
  • 情感分析
  • 命名实体识别
  • 机器阅读理解
  • 问答系统

三、BERT 的模型结构

BERT 的底层结构基于Transformer|Attention is All you Need论文。

Transformer 由两个部分组成:

  • Encoder
  • Decoder

而 BERT 只使用Encoder

整体结构如下:

输入文本
Tokenizer
Embedding Layer
Transformer Encoder × N
输出向量

BERT 有两个主要版本:

模型层数隐藏层维度参数量
BERT-base12768110M
BERT-large241024340M

中文常用模型:bert-base-chinese


四、BERT 的输入表示

BERT 的输入不是简单的文本,而是由三部分组成:

Input Embedding = Token Embedding + Segment Embedding + Position Embedding

1 Token Embedding

Token Embedding 表示词的向量。

例如:

我 爱 自然 语言 处理

在中文 BERT 中通常按字粒度分词:

[CLS] 我 爱 自 然 语 言 处 理 [SEP]

2 Segment Embedding

Segment 用于区分句子 A 和句子 B。

例如:

句子A:[CLS] 我 爱 NLP [SEP]
句子B:它 很 有 趣 [SEP]

Segment 标记:

0 0 0 0 0
1 1 1 1 1

3 Position Embedding

因为 Transformer 不具备顺序信息,所以需要位置编码

例如:

位置: 0 1 2 3 4 5

这样模型就能理解词的顺序。


五、BERT 的两种预训练任务

BERT 在预训练阶段主要做两件事情。

1 Masked Language Model(MLM)

随机遮挡句子中的某些词,让模型预测它们。

例如:

我 爱 [MASK] 语言 处理

模型需要预测:

自然

这种方式可以让模型学习上下文关系。

2 Next Sentence Prediction(NSP)

判断两个句子是否连续。

例如:

句子A:我喜欢机器学习
句子B:深度学习很有趣

模型需要判断:

IsNext / NotNext

这样可以学习句子之间的关系。


六、BERT 在 NLP 任务中的应用

BERT 在很多任务中都取得了突破性效果。

例如:

1 文本分类

输入:

这个手机很好用

输出:

正面评论

常用于:

  • 情感分析
  • 垃圾邮件分类

2 命名实体识别

识别文本中的实体,例如:

张三 在 北京 工作

识别结果:

张三 → 人名
北京 → 地名

3 问答系统

例如:

问题:北京是哪个国家的首都?

BERT 可以在文章中找到答案。

七、BERT 的代码示例

在 Python 中通常使用 Transformers 库。

安装:

pip install transformers

加载 tokenizer:

fromtransformersimportBertTokenizer tokenizer=BertTokenizer.from_pretrained("bert-base-chinese")text="我爱自然语言处理"encoding=tokenizer(text)print(encoding)

输出类似:

{'input_ids':[...],'token_type_ids':[...],'attention_mask':[...]}

加载模型:

fromtransformersimportBertForSequenceClassification model=BertForSequenceClassification.from_pretrained("bert-base-chinese",num_labels=2)

这可以直接用于情感分类任务


八、BERT 的优缺点

优点

  1. 双向上下文理解能力强
  2. 预训练模型可以迁移到多种任务
  3. 在很多 NLP benchmark 上表现优秀

缺点

  1. 参数量大
  2. 训练成本高
  3. 推理速度较慢

因此后来又出现了很多改进模型,例如:

  • RoBERTa
  • ALBERT
  • DistilBERT

九、计算bert模型的参数

以下计算忽略了bias

Embedding层参数计算

1. Token Embedding
词向量矩阵大小
vocab_size * hidden_size:21128 * 768 = 16226304

2.Segment Embedding
支持两个句子输入
2 * 768 = 1576

3.Position Embedding
最大序列长度(采用独热编码)
512 * 768 = 393216

Embedding层总参数:16226304 + 1576 + 393216 = 16621096

Transformer Encoder

BERT-base 一共有12层 Transformer Encoder。

每一层包含两个主要模块:

  • Multi-Head Attention
  • Feed Forward Network

Multi-Head Attention多头注意力机制

Q = XWq
K = XWk
V = XWv

每个矩阵大小:768 * 768
总共:3 * 768 * 768 = 1769472

Add & Norm 还有一个输出矩阵:768 * 768 = 589824

Feed Forward

linear(768, 768*4)
linear(768 * 4, 768)

所以参数是:768 * 3072 + 3072 * 768 = 4718592

由于总共有12层:12 * (1769472 + 589824 + 4718592) = 84934656

Pooler output池化层

768 * 768 = 589824

总参数

  • Embedding: 16621096
  • Encoder: 84934656
  • pooler:589824

总参数约为:102145536

fromtransformersimportBertModel,BertTokenizerdefget_parameter_number(model):total_num=sum(p.numel()forpinmodel.parameters())trainable_num=sum(p.numel()forpinmodel.parameters()ifp.requires_grad)return{'Total':total_num,'Trainable':trainable_num}bert=BertModel.from_pretrained("bert-base-chinese")print(get_parameter_number(bert))

输出:

{‘Total’: 102267648, ‘Trainable’: 102267648}
102145536

http://www.jsqmd.com/news/484008/

相关文章:

  • IR300工业路由器+InConnect云平台:实现4G远程维护PLC的完整配置指南
  • 2026年社交破冰与脱单神器深度测评:拯救冷场,到底谁才是真硬核?
  • 深入了解C语言:通用高级语言的强大特性与广泛应用
  • 探索永磁同步电机非线性磁链观测器源代码的奇妙世界
  • 探秘圆极化连续域束缚态:COMSOL光子晶体超表面模拟之旅
  • 最近邻点对问题(Closest Pair of Points)
  • MATLAB R2021B中基于LMS自适应滤波器的窄带信号去噪算法及其在多种信号领域的应用
  • Anthropic 登《时代》封面 递归自我改进引 AI 发展拐点争议
  • 机房动环监控系统的全面分析与实践经验总结
  • 在linux(Centos)中Mysql的端口修改保姆级教程
  • 记录学习过程【数据分析二】
  • [NOIP 2018 普及组] 摆渡车 / [蓝桥杯青少年组国赛 2023] 月球疏散行动
  • 开关磁阻电机SRM12-8技术详解:额定功率达2200w,转速稳定达额定转速3450rpm
  • 字符串统计工具:字数统计、字符分析、词法分析、编码分析
  • 禅道下载安装教程
  • KMP模板——【# P3375 【模板】KMP】
  • 闭眼入!9个一键生成论文工具深度测评:全行业通用,开题报告+毕业论文+科研写作全搞定
  • 纯水设备哪家性价比高
  • IDA Pro 9.3 全功能绿色便携版(2026最新适配)|内置Python3.11.9+全量插件一键初始化
  • 风光储交直流微电网模型与孤岛Vf控制
  • 208分布式光伏配电网集群电压控制:探索新方法与实践
  • 数字化转型成熟度模型与评估:数字化转型成熟度等级(共五级)、数字化转型成熟度七大能力域、评估流程
  • MATLAB 中分数阶全变分泊松噪声下的反卷积探索
  • C语言初学者必备!从掌握知识到动手写计算器程序指南
  • 螺杆式空压机工频运行,变频机不能用使用西门子224xp 十昆仑通态触摸屏,程序有注释
  • 现在营销有哪些方法?内容营销、短视频直播等主流策略全解析-佛山鼎策创局破局增长咨询
  • Agent学习-ReAct框架
  • 微信小程序端基础面试题
  • 指针和地址—C语言(快速了解指针,由浅至深)
  • 在openSUSE-Leap-15.6-DVD-x86_64中使用gnome-builder-45.0的基本功能(三)空白Meson工程