1 前言

各位朋友大家好,欢迎来到月来客栈,我是掌柜空字符。

7万字、60余幅示例图、4个下游微调场景、从零实现NSP和MLM预训练任务,带你步步走进BERT。公众号后台回复BERT获取下载链接!

经过几个月的梳理掌柜总算是把整个BERT模型的基本原理、代码实现以及原论文中所提到的4个微调任务场景都给详细地介绍了一遍。不管是对于模型本身还是各个下游任务场景,掌柜都通过图示清晰的展示了任务场景数据集的构建流程、模型的构建原理等,力争以最简单、最直白和最清晰的方式向大家介绍各个任务的模型构建原理,并且同时还能够掌握对应的代码实现。

以NSP和MLM任务为例,掌柜首先通过图1介绍了这两个任务的基本原理。

图 1. MLM和NSP任务网络结构图

紧接着通过图2介绍了在NSP和MLM任务中构建数据集的整体流程,以便做到心中有数不会迷路。

图 2. MLM和NSP任务数据集构造流程图

同时,在所有任务的数据预处理环境都可以通过日志的输出等级来选择是否打印数据预处理时的中间结果,而这对于我们理解模型也是至关重要的一部分。

然后通过图3介绍了构建NSP和MLM这两个任务的基本原理。

图 3. MLM任务网络结构图

进一步介绍了数据集构建和任务实现的完整代码,并得到了图4所示的模型训练结果。

22053050611

图 4. 训练集上模型损失和准确率变化图

最后,还得到了如下所示的推理结果。

例如以下输入:

2 BERT模型

由于整个BERT模型的内容讲解过长,近7万余字,所以大家直接通过下载PDF阅读即可(公众号后台回复BERT获取下载链接),完整内容目录如下。

目 录 第1节 BERT原理与预训练任务 1 1.1 引言 1 1.2 动机 3 1.2.1 面临问题 3 1.2.2 解决思路 4 1.3 技术实现 4 1.3.1 BERT网络结构 5 1.3.2 Input Embedding 5 1.3.3 BertEncoder 7 1.3.4 MLM与NSP任务 7 第2节 BERT实现 10 2.1 工程结构 10 2.2 参数管理 13 2.2.1 初始化类成员 13 2.2.2 导入本地参数 14 2.2.3 使用示例 14 2.3 Input Embedding实现 15 2.3.1 Token Embedding 15 2.3.2 Positional Embedding 16 2.3.3 Segment Embedding 16 2.3.4 Bert Embeddings 17 2.3.5 使用示例 19 2.4 BertModel实现 19 2.4.1 BertAttention实现 20 2.4.2 BertLayer实现 22 2.4.3 BertEncoder实现 24 2.4.4 BertModel实现 26 2.4.5 使用示例 27 第3节 模型的保存与迁移 29 3.1 运用场景 29 3.2 查看网络参数 29 3.2.1 查看参数 29 3.2.2 自定义参数前缀 31 3.3 模型推理过程 31 3.3.1 模型保存 31 3.3.2 模型复用 32 3.4 模型再训练过程 33 3.5 模型迁移学习 34 3.5.1 定义新模型 34 3.5.2 读取可用参数 34 3.5.3 模型迁移学习 36 第4节 基于BERT预训练模型的文本分类任务 38 4.1 任务构造原理 38 4.2 数据预处理 38 4.2.1 输入介绍 38 4.2.2 语料介绍 39 4.2.3 数据集预览 39 4.2.4 数据集构建 40 4.3 加载预训练模型 46 4.3.1 查看模型参数 46 4.3.2 载入并初始化 48 4.4 文本分类 49 4.4.1 前向传播 49 4.4.2 模型训练 50 4.4.3 模型推理 53 第5节 基于BERT预训练模型的文本蕴含任务 55 5.1 任务构造原理 55 5.2 数据预处理 55 5.2.1 输入介绍 55 5.2.2 语料介绍 55 5.2.3 数据集预览 56 5.2.4 数据集构建 57 5.3 文本蕴含 62 5.3.1 前向传播 62 5.3.2 模型训练 62 5.3.3 模型推理 63 第6节 基于BERT预训练模型的SWAG选择任务 64 6.1 任务构造原理 64 6.2 数据预处理 65 6.2.1 输入介绍 65 6.2.2 语料介绍 65 6.2.3 数据集预览 66 6.2.4 数据集构造 67 6.3 选择任务 71 6.3.1 前向传播 71 6.3.2 模型训练 73 6.3.3 模型推理 76 第7节 自定义学习率动态调整 77 7.1 引言 77 7.2动态学习率使用 78 7.2.1 constant使用 78 7.2.2 constant_with_warmup使用 80 7.2.3 linear使用 81 7.2.4 polynomial使用 81 7.2.5 cosine使用 82 7.2.6 cosine_with_restarts使用 83 7.2.7 get_scheduler使用 83 7.3 动态学习率实现 84 7.3.1 constant实现 84 7.3.2 constant_with_warmup实现 84 7.3.3 linear实现 85 7.3.4 polynomial实现 85 7.3.5 cosine实现 86 7.3.6 cosine_with_restarts实现 87 7.3.7 transfromer实现 88 7.4 LambdaLR原理 89 7.4.1 实现逻辑 89 7.4.2 学习率恢复 91 第8节 基于BERT预训练模型的SQuAD问答任务 93 8.1 任务构造原理 93 8.2 数据预处理 94 8.2.1 输入介绍 94 8.2.2 结果筛选 95 8.2.3 语料介绍 97 8.2.4 数据集预览 99 8.2.4 数据集构造 100 8.3 问答任务 112 8.3.1 前向传播 112 8.3.2 模型训练 113 8.4 模型推理 116 8.4.1 模型评估 116 8.4.2 模型推理 117 8.4.3 结果筛选 118 8.5 样本过长问题 121 8.5.1 消除长度限制 121 8.5.2 重构模型输入 123 第9节 PyTorch中使用Tensorboard 126 9.1 安装与调试 126 9.1.1 安装启动 126 9.1.2 远程连接 127 9.2 使用Tensoboard 130 9.2.1 add_scalar方法 131 9.2.2 add_graph方法 132 9.2.3 add_scalars方法 133 9.2.4 add_histogram方法 134 9.2.5 add_image方法 135 9.2.6 add_images方法 136 9.2.7 add_figure方法 136 9.2.8 add_pr_curve方法 138 9.2.9 add_embedding方法 139 9.3 使用实例 140 9.3.1 定义模型 140 9.3.2 定义分类模型 141 9.3.3 可视化展示 144 第10节 从零实现NSP和MLM预训练任务 147 10.1 引言 147 10.2 数据预处理 148 10.2.1 英文数据格式化 148 10.2.2 中文数据格式化 150 10.2.3 构造NSP任务数据 150 10.2.4 构造MLM任务数据 152 10.2.5 构造整体任务数据 154 10.2.6 构造训练数据集 156 10.2.7 使用示例 157 10.3 预训练任务实现 159 10.3.1 NSP任务实现 159 10.3.2 MLM任务实现 160 10.3.3 前向传播 162 10.4 模型训练与微调 164 10.4.1 模型训练 164 10.4.2 模型推理 167 10.4.3 模型微调 169 总结 169 引用 170

3 内容预览

本次内容就到此结束,感谢您的阅读!青山不改,绿水长流,我们月来客栈见!