同学你好!本文章于2021年末编写,获得广泛的好评!
故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,
Pytorch深度学习·理论篇(2023版)目录地址为:
CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇
以下为2021版原文~~~~
如果想进一步深入研究,则需要了解Transformers库中更底层的实现,学会对具体的BERTology系列模型进行单独加载和使用。
1 Transformers库的文件结构
1.1 详解Transformers库中的预训练模型
在Transformers库中,预训练模型文件主要有3种,它们的具体作用如下:
- 词表文件:在训练模型时,将该文件当作一个映射表,把输入的单词转换成具体数字。(文本方式保存)
- 配置文件:存放模型的超参数,将源码中的模型类根据配置文件的超参数进行实例化后生成可用的模型。(文本方式保存)
- 权重文件:对应可用模型在内存中各个变量的值,待模型训练结束之后,将这些值保存起来。加载模型权重的过程,就是这些值“覆盖”到内存中的模型变量里,使整个模型恢复到训练后的状态。(二进制方式保存)
1.2 BERT模型的关联文件图
图3-18(a)BERT模型的基本预训练模型相关的词表文件,词表文件中是一个个具体的单词,每个单词的序号就是其对应的索引值。
图3-18(b)BERT模型的基本预训练模型相关的配置文件,配置文件则显示了其模型中的相关参数,其中部分内容如下。架构名称:BertForMaskedLM。注意力层中Dropout的丢弃率:0.1。隐藏层的激活函数:GEL∪激活函数。隐藏层中Dropout的丢弃率:0.1。
1.3 Transformers库的文件目录
# 目录地址
\Anaconda3\envs\python38\Lib\site-packages\transformers
1.3.1 配置代码文件
以confiquraton开头的文件,是BERTOOQy系列模型的配置代码文件。
1.3.2 模型代码文件
以modeling开头的文件,是BERTology系列模型的模型代码文件
1.3.3 词表代码文件
以tokenization开头的文件,是BERToogy系列模型的词表代码文件。
1.4 每个模型都对应以上三个文件
每个模型都对应3个代码文件,存放着关联文件的下载地址。
1.4.1 举例:BERT模型对应文件列表:
配置代码文件:configuration_bert.py。
模型代码文件:modeling_bert,py。
词表代码文件:tokenization_bert.py。
1.5 加载预训练模型
训练模型的主要部分就是模型代码文件、配置代码文件和词表代码文件这3个代码文件。对于这3个代码文件,在Transformers库里都有对应的类进行操作。
配置类(Configuration Classes):是模型的相关参数,在配置代码文件中定义。
模型类(Model Classes):是模型的网络结构,在模型代码文件中定义。
词表类(TOkenizer Classes):用于输入文本的词表预处理,在词表代码文件定义。
这3个类都有from_pretrained方法,
1.5.1 调用函数简述
from_pretrained():可以加已经预训练好的模型或者参数。
save_pretraining():将模型中的提示配置文件、权重文件、词表文件保存在本地,以便可以使用from_pretraining方法对它们进行新加载。
1.5.2 自动加载
在使用时,通过向from_pretrained方法中传入指定模型的版本名称,进行自动下载,并加载到内存中。
from transformers import BertTokenizer,BertForMaskedLM# 使用bert-base-uncased版本的BERT预训练模型,其中BertTokenizer类用于加载词表,BertForMaskedLM类会自动加载配置文件和模型文件。tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')#加载词表model = BertForMaskedLM.frompretrained('bert-base-uncased')#加载模型# 该代码运行后,系统会自动从指定网站加载对应的关联文件。这些文件默认会放在系统的用户目录中
1.5.3 手动加载
在源码中,找到对应的下载地址,手动加载后,再用frompretrained方法将其载入。
from transformers import BertTokenizer,BertForMaskeduM#加载词表
tokenizer=BertTokenizer.frompretrained(r'./bert-base-uncased/bert-base-uncased-vocab.txt')
#加载模型
model=BertForMaskedLM.frompretrained('./bert-base-uncased/bert-base-uncased-pytorch_model.bin',conig='./bert-base-uncased/bert-base-uncased-conig.json')# 手动加载与自动加载所使用的接口是一样的,手动加载需要指定加载文件的具体路径,而且在使用BertForMaskedLM类进行加载时,还需要指定配置文件的路径。
2 查找Transformers库中可以使用的模型
通过模型代码文件的命名,可以看到Transformers库中能够使用的模型。但这并不是具体的类名,想要找到具体的类名,可以采用以下3种方式:
(1)通过帮助文件查找有关预训练模型的介绍。
(2)在Transformers库的__init__.py文件中查找预训练模型。【相对费劲,但更为准确】
(3)使用代码方式输出Transformers库中的宏定义。
2.1 在Transformers库的__init__.py文件中查找预训练模型。【相对费劲,但更为准确】
2.2 使用代码方式输出Transformers库中的宏定义
from transformers import BLENDERBOT_SMALL_PRETRAINED_MODEL_ARCHIVE_LIST
print("输出全部模型:",BLENDERBOT_SMALL_PRETRAINED_MODEL_ARCHIVE_LIST)
# ['facebook/blenderbot_small-90M']