仓库简介#
BertWithPretrained 是一个基于 PyTorch 从零实现 BERT 模型 的中英双语预训练代码仓库,覆盖 BERT 模型原理讲解、BERT PyTorch 从零实现,以及 BERT 论文中提到的 5 大下游任务微调与 NSP/MLM 预训练等 8 个核心场景。
仓库包含两部分配套:
- 代码:在 Hugging Face
bert-base-chinese与bert-base-uncased预训练权重之上,提供 BasicBERT 基础实现与 6 大下游任务(中文文本分类、英文 MNLI 文本蕴含、SWAG 多选项、SQuAD 阅读理解、中文 NER 命名实体识别、NSP+MLM 预训练)的完整训练与推理脚本。 - 教程:配套「玩转 BERT 详解六大下游任务」系列 11 讲,从 BERT 原理、Transformer、自注意力机制,到 BERT 工程结构、模型保存与迁移,再到下游任务实战与预训练从零实现,配套 PyTorch 教程与可视化代码。
在学习使用本项目之前建议先掌握 Transformer,相关内容可参考 「玩转 Transformer 详解六大核心架构」 系列教程。
适用人群#
- 想深入理解 BERT 原理(Masked LM、Next Sentence Prediction、双向自注意力)的研究 / 工程人员;
- 计划基于预训练 BERT 做中文文本分类、英文 MNLI、SWAG、SQuAD、NER 等下游任务的开发者;
- 想从零实现 BERT 模型、把 Hugging Face 权重加载到自定义模型的 PyTorch 实战学习者;
- 教学场景中需要"原理 + 代码 + 下游任务"完整闭环的讲师与学生。
内容结构#
bert_base_chinese/— BERT base 中文预训练模型与配置文件(来源:huggingface/bert-base-chinese);bert_base_uncased_english/— BERT base 英文预训练模型与配置文件(来源:huggingface/bert-base-uncased),注意config.json中需添加"pooler_type": "first_token_transform"参数;data/— 各下游任务使用的数据集:SingleSentenceClassification:今日头条 15 分类中文数据集;PairSentenceClassification:MNLI 多类型自然语言推理数据集;MultipeChoice:SWAG 常识推理问题选择数据集;SQuAD:斯坦福问答数据集 1.1 版本;WikiText:维基百科英文语料,用于英文 BERT 预训练;SongCi:宋词语料,用于中文 BERT 预训练;ChineseNER:中文命名实体识别数据集;
model/— 模型各模块实现:BasicBert/基础 BERT 模型:MyTransformer.py:多头自注意力机制实现;BertEmbedding.py:Token / Segment / Position Embedding 实现;BertConfig.py:加载开源config.json配置;Bert.py:BERT 主模型(Encoder、Pooler)实现;
DownstreamTasks/下游任务模块:BertForSentenceClassification.py:单标签句子分类;BertForMultipleChoice.py:问题选择(SWAG)模型;BertForQuestionAnswering.py:问答(SQuAD)模型;BertForNSPAndMLM.py:BERT 预训练 NSP + MLM 任务;BertForTokenClassification.py:字符分类(NER)模型;
Task/— 各下游任务的训练 / 推理脚本(每篇文章对应一份TaskForXxx.py);requirements.txt/requirements_py39.txt— Python 依赖,Python 3.9 推荐。
配套章节#
以下 11 讲系统讲解 BERT 原理、PyTorch 从零实现与 6 大下游任务实战,覆盖 BERT 预训练(MLM + NSP)、文本分类、文本蕴含、问答选择、SQuAD 问答、命名实体识别等核心场景,均配套 PyTorch Python 实现与可视化代码,是 BERT 从入门到实战的完整教程。
| 章节 | 重点小节 |
|---|---|
| 第 1 讲 BERT 原理 | BERT 原理与预训练教程:Masked LM 与 Next Sentence Prediction 图解 |
| 第 2 讲 BERT 从零实现 | BERT 模型 PyTorch 从零实现教程:工程结构、BertConfig 与 BertModel 源码详解 |
| 第 3 讲 模型保存与迁移 | PyTorch 模型保存与迁移教程:BERT 预训练权重加载、推理与增量训练实战 |
| 第 4 讲 中文文本分类 | BERT 文本分类实战教程:从 [CLS] 微调到 38 万今日头条 15 类新闻分类 |
| 第 5 讲 MNLI 文本蕴含 | BERT 文本蕴含实战教程:基于 Segment Embedding 在 MNLI 上微调 NLI 三分类 |
| 第 6 讲 SWAG 多选项 | BERT 问答选择实战教程:基于 SWAG 数据集微调四选一常识推理任务 |
| 第 7 讲 Transformer 学习率 | Transformer 动态学习率教程:详解 warmup 公式与 PyTorch LambdaLR 自定义实现 |
| 第 8 讲 SQuAD 阅读理解 | BERT SQuAD 阅读理解实战:start/end position 预测与滑动窗口长文本处理 |
| 第 9 讲 PyTorch TensorBoard | PyTorch TensorBoard 教程:详解 add_scalar、add_graph、add_image 等可视化方法 |
| 第 10 讲 BERT NER 实战 | BERT NER 命名体识别实战教程:从 BIO 标签到中文实体抽取微调 |
| 第 11 讲 BERT 预训练从零实现 | BERT 预训练从零实现教程:详解 MLM + NSP 数据构造与训练全流程 |
使用方式#
git clone https://github.com/mlwithme/BertWithPretrained.git
cd BertWithPretrained
pip install -r requirements.txt按教程对应章节的 Task/TaskForXxx.py 启动训练 / 推理脚本即可:
- 中文文本分类:
python Tasks/TaskForSingleSentenceClassification.py - MNLI 文本蕴含:
python Tasks/TaskForPairSentenceClassification.py - SWAG 多选项:
python Tasks/TaskForMultipleChoice.py - SQuAD 阅读理解:
python Tasks/TaskForSQuADQuestionAnswering.py - 中文 NER:
python Tasks/TaskForChineseNER.py - NSP + MLM 预训练:
python Tasks/TaskForPretraining.py
Python 版本推荐 3.9,bert_base_chinese 与 bert_base_uncased_english 两个模型权重需提前放入对应目录。