一、BERT 框架核心介绍
BERT 是基于 Transformer 编码器的双向编码器表示模型,核心优势为双向性,能同时结合词的前后上下文捕捉语义,相比 GPT 等单向模型更精准,其核心特点包括:
- 模型结构:由多层自注意力机制和前馈神经网络构成,依托 Transformer 编码器实现。
- 预训练任务 :通过两个无监督任务学习语言特征,分别是遮蔽语言模型(MLM) (预测被遮蔽的词)和下一句预测(NSP)(判断两个句子是否连续),可学习语言深层结构和语义。
- 微调特性:预训练后可在特定下游任务数据集上微调,适配文本分类、命名实体识别、问答等多种 NLP 任务。
- 行业影响:刷新多项 NLP 基准测试记录,推动预训练语言模型发展,为 RoBERTa、ALBERT 等模型奠定基础。
二、传统模型的局限性
- 传统 RNN:计算为串联式,需按顺序得到中间结果,训练时间长,并行计算效果差,无法多服务器同时训练。
- 传统 Word2vec:词向量训练后固定不变,无法适配一词多义,不同语境下的同一词汇无法生成不同词向量。
三、底层 Transformer 架构深度解析
Transformer 是 BERT 的核心基础,PPT 从核心模块、计算逻辑、结构设计等方面拆解,核心包括:
- Encoder-Decoder 编码解码框架
- 适用于序列 - 序列任务(文本摘要、翻译、问答),编码器将输入序列转化为语义编码 C,解码器基于 C 生成输出序列,编解码可组合使用 RNN/LSTM/GRU 等方法。
- 自注意力(Self-Attention)机制
- 核心是让模型关注文本重点,通过将词向量与 WQ、WK、WV 三个矩阵相乘得到 Q(查询)、K(被查)、V(特征信息),计算词间匹配程度并归一化,分配特征权重生成新特征,支持并行计算,提升训练速度。
- 多头(Multi-headed)机制
- 类比 CNN 多卷积核,通过 8 组独立的 Q/K/V 得到多种词特征,拼接后经全连接层降维,丰富词的特征表达。
- 多层堆叠:将多头注意力机制的结构多层叠加,层层提取更深度的语义特征。
- 位置编码
- 解决 Transformer 未考虑词序的问题,PPT 对比了 0-1 范围分配、正整数分配的缺陷,最终采用三角函数位置编码,将词向量(word embedding)与位置编码(pos embedding)逐点相加,得到兼具语义和位置信息的矩阵,且不同语句相同位置的位置编码值一致。
- Add 与 Normalize
- Add 为残差连接,将前层数据传递至后层;Normalize 为层归一化,统一数据分布,提升模型稳定性。
- 整体框架与输出处理
- 由多层多头注意力、前馈网络、Add&Norm 模块叠加构成,解码器输入采用outputs shifted right(右移一位),添加起始符,让解码器基于已生成词逐步推断下一个词,构建完整输出序列。
- 训练数据处理
- 方法 1:随机 mask 句子中 15% 的词汇(优先选字,避免词的可能性过多),让模型预测;
- 方法 2:通过 CLS(分类标记,序列开头)、SEP(分隔符,分隔句子 / 标记结束)拼接两个句子,让模型判断是否连续。
四、BERT 框架的实际使用
- 模型下载 :可从 GitHub 获取官方(google-research/bert)及第三方实现(bert4keras、BertViz 等),还有 24 个轻量化英文 BERT 模型(如 BERT-Tiny / 迷你 / 小型),适配计算资源有限的场景,核心文件包括
config.json、bert_model.ckpt、vocab.txt,预训练模型基于 Wikipedia 训练。 - 环境依赖 :BERT 基于 2018 年的 TensorFlow1.x 开发,需安装对应版本,推荐 GPU 版
pip install tensorflow-gpu==1.15(清华源),若避免 CUDA 版本冲突可使用 CPU 版,且需注意 TensorFlow1.x 的 CPU 和 GPU 包相互独立。 - 快速上手案例 :实现官网的句子 / 句对分类任务,以 GLUE 数据集的 MRPC 语料为例,通过设置任务名称、数据路径、模型配置、训练参数(批次、学习率、迭代次数等),运行
run_classifier.py完成微调与验证,且模型支持uncased(小写处理),避免大小写导致的词汇歧义。 - 核心参数说明:L 为编解码器层数(基础 BERT 为 12 层),H 为前馈网络隐藏层维度 / 输出维度;训练时需注意路径避免绝对路径和中文,CPU 训练需减小 batch_size。