【Pytorch神经网络理论篇】 39 Transformers库中的BERTology系列模型

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 词表文件:在训练模型时,将该文件当作一个映射表,把输入的单词转换成具体数字。(文本方式保存)

同学你好!本文章于2021年末编写,获得广泛的好评!


故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现


Pytorch深度学习·理论篇(2023版)目录地址为:


CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录


本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!

https://v9999.blog.csdn.net/article/details/127587345


欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

f52676cc83844f3d8a8e34e969615d4a.png


如果想进一步深入研究,则需要了解Transformers库中更底层的实现,学会对具体的BERTology系列模型进行单独加载和使用。


1 Transformers库的文件结构


1.1 详解Transformers库中的预训练模型


在Transformers库中,预训练模型文件主要有3种,它们的具体作用如下:


1.词表文件:在训练模型时,将该文件当作一个映射表,把输入的单词转换成具体数字。(文本方式保存)


2.配置文件:存放模型的超参数,将源码中的模型类根据配置文件的超参数进行实例化后生成可用的模型。(文本方式保存)


3.权重文件:对应可用模型在内存中各个变量的值,待模型训练结束之后,将这些值保存起来。加载模型权重的过程,就是这些值“覆盖”到内存中的模型变量里,使整个模型恢复到训练后的状态。(二进制方式保存)


1.2 BERT模型的关联文件图


图3-18(a)BERT模型的基本预训练模型相关的词表文件,词表文件中是一个个具体的单词,每个单词的序号就是其对应的索引值。


图3-18(b)BERT模型的基本预训练模型相关的配置文件,配置文件则显示了其模型中的相关参数,其中部分内容如下。架构名称:BertForMaskedLM。注意力层中Dropout的丢弃率:0.1。隐藏层的激活函数:GEL∪激活函数。隐藏层中Dropout的丢弃率:0.1。


757b3ac0096f4692a6ddadd40f954b5b.png


1.3 Transformers库的文件目录


# 目录地址
\Anaconda3\envs\python38\Lib\site-packages\transformers


1.3.1 配置代码文件


以confiquraton开头的文件,是BERTOOQy系列模型的配置代码文件。


87d78bb5d8f4488d9442474211ce4f1a.png


1.3.2 模型代码文件


以modeling开头的文件,是BERTology系列模型的模型代码文件


50d10cc8170d40949756157d390303e9.png


1.3.3 词表代码文件


以tokenization开头的文件,是BERToogy系列模型的词表代码文件。


6e7f8671b0de493983a5a2c7dc8dad15.png


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']


目录
相关文章
|
3天前
|
机器学习/深度学习 JSON PyTorch
图神经网络入门示例:使用PyTorch Geometric 进行节点分类
本文介绍了如何使用PyTorch处理同构图数据进行节点分类。首先,数据集来自Facebook Large Page-Page Network,包含22,470个页面,分为四类,具有不同大小的特征向量。为训练神经网络,需创建PyTorch Data对象,涉及读取CSV和JSON文件,处理不一致的特征向量大小并进行归一化。接着,加载边数据以构建图。通过`Data`对象创建同构图,之后数据被分为70%训练集和30%测试集。训练了两种模型:MLP和GCN。GCN在测试集上实现了80%的准确率,优于MLP的46%,展示了利用图信息的优势。
10 1
|
4天前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络基本概念以及Pytorch实现,多线程编程面试题
神经网络基本概念以及Pytorch实现,多线程编程面试题
|
4天前
|
机器学习/深度学习 数据可视化 PyTorch
使用Python实现深度学习模型:生成对抗网络(GAN)
使用Python实现深度学习模型:生成对抗网络(GAN)
19 3
|
5天前
|
Linux 开发工具
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
【项目--Hi3559A】如何在Hi3559A上运行自己的yolov3模型(修改类别、网络结构)
9 0
|
5天前
|
PyTorch 算法框架/工具 异构计算
pytorch 模型保存与加载
pytorch 模型保存与加载
6 0
|
5天前
|
机器学习/深度学习 自然语言处理 网络安全
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
7 1
|
5天前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
5天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言神经网络模型金融应用预测上证指数时间序列可视化
R语言神经网络模型金融应用预测上证指数时间序列可视化
|
3天前
|
运维 网络协议 Linux
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》
Docker网络_docker 网络,来看看这份超全面的《Linux运维面试题及解析》