Huggingface BERT源码详解:应用模型与训练优化

本文深入解析HuggingFace Transformers中4.4.2版本的BERT源码,涵盖BERT的分词模型、本体模型、应用模型(如BertForMultipleChoice、BertForTokenClassification、BertForQuestionAnswering)、训练优化(包括Warmup策略)等方面,探讨预训练和微调过程中的关键实现和设计决策。
摘要由CSDN通过智能技术生成

©PaperWeekly 原创 · 作者|李泺秋

学校|浙江大学硕士生

研究方向|自然语言处理、知识图谱

上篇,记录一下对 HuggingFace 开源的 Transformers 项目代码的理解。

本文基于 Transformers 版本 4.4.2(2021 年 3 月 19 日发布)项目中,pytorch 版的 BERT 相关代码,从代码结构、具体实现与原理,以及使用的角度进行分析,包含以下内容:

1. BERT Tokenization 分词模型(BertTokenizer)

2. BERT Model 本体模型(BertModel)

3. 1. BertEmbeddings

    2. BertEncoder

    3.1. BertLayer

        2.1. BertAttention

            2.1. BertIntermediate

               2. BertOutput

            3. BertEmbeddings

            4. BertEncoder

        3. BERT-based Models应用模型

4. BertForPreTraining

5. 1. BertForSequenceClassification

    2. BertForMultiChoice

    3. BertForTokenClassification

    4. BertForQuestionAnswering

    5. BERT训练与优化

6. BERT训练与优化

7. 1. Pre-Training

    2. Fine-Tuning

    3. 1. AdamW

        2. Warmup

BERT-based Models

基于 BERT 的模型都写在/models/bert/modeling_bert.py里面,包括 BERT 预训练模型和 BERT 分类模型,UML 图如下:

BERT模型一图流(建议保存后放大查看):

▲ 画图工具:Pyreverse

首先,以下所有的模型都是基于BertPreTrainedModel这一抽象基类的,而后者则基于一个更大的基类PreTrainedModel。这里我们关注BertPreTrainedModel的功能:

  • 用于初始化模型权重,同时维护继承自PreTrainedModel的一些标记身份或者加载模型时的类变量。

下面,首先从预训练模型开始分析。

3.1 BertForPreTraining

众所周知,BERT 预训练任务包括两个:

  • Masked Language Model(MLM):在句子中随机用[MASK]替换一部分单词,然后将句子传入 BERT 中编码每一个单词的信息,最终用[MASK]的编码信息预测该位置的正确单词,这一任务旨在训练模型根据上下文理解单词的意思;

  • Next Sentence Prediction(NSP):将句子对 A 和 B 输入 BERT,使用[CLS]的编码信息进行预测 B 是否 A 的下一句,这一任务旨在训练模型理解预测句子间的关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值