欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

torch.hub.load自动下载预训练模型文件用以加载预训练模型

程序员文章站 2022-03-04 13:32:39
...

torch.hub.load自动下载预训练模型文件用以加载预训练模型日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


    确定需要加载的预训练模型并安装依赖包
    能够加载哪些模型可以参考NLP中的常用预训练模型
    这里假设我们处理的是中文文本任务, 需要加载的模型是BERT的中文模型: bert-base-chinese
    在使用工具加载模型前需要安装必备的依赖包:
        pip install tqdm 
        pip install boto3 
        pip install requests 
        pip install regex 
        pip install sentencepiece 
        pip install sacremoses 
        pip install dataclasses 
        pip install tokenizers 
        pip install filelock
加载预训练模型执行torch.hub.load会自动下载对应的预训练模型文件,如果下载网速慢,也可以选择此处度娘提供好的预训练模型文件
    1.链接:https://pan.baidu.com/s/1n9kI5Mjq3mD7wtomPd6R5w 
      提取码:wrbl 

    2.手动解压度娘下载的预训练模型文件压缩包
        window 解压到 C:/Users/Administrator/.cache 目录下
             解压后目录如下
              C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
              C:/Users/Administrator/.cache/torch/transformers
    
        linux 解压到 /root/.cache 目录下
             解压后目录如下
              /root/.cache/torch/hub/huggingface_pytorch-transformers_master/
              /root/.cache/torch/transformers
              
    3.解压好了之后,如果运行时仍然会重新下载的话,进入torch/hub/huggingface_pytorch-transformers_master 执行 pip install .
       如需进入某个虚拟环境安装的话,请先进入该虚拟环境再安。
       Window:activate 虚拟环境名。Linux:source activate 虚拟环境名。
       cd C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
       执行“pip install .”命令,会自动执行setup.py进行安装。

 

import torch

# 预训练模型来源
source = 'huggingface/pytorch-transformers'
# 加载的预训练模型的名字
model_name = 'bert-base-chinese'

# # 选定加载模型的哪一部分, 这里是模型的映射器
part = 'tokenizer'
tokenizer = torch.hub.load(source, part, model_name)

# 加载不带头的预训练模型
part = 'model'
model = torch.hub.load(source, part, model_name)

# 加载带有modelWithLMHead(语言模型头)的预训练模型
part = 'modelWithLMHead'
lm_model = torch.hub.load(source, part, model_name)

# 加载带有modelForSequenceClassification(分类模型头)的预训练模型
part = 'modelForSequenceClassification'
classification_model = torch.hub.load(source, part, model_name)

# 加载带有modelForQuestionAnswering(问答模型头)的预训练模型
part = 'modelForQuestionAnswering'
qa_model = torch.hub.load(source, part, model_name)
加载预训练模型时我们可以选择带头或者不带头的模型
    1.这里的'头'是指模型的任务输出层, 选择加载不带头的模型, 相当于使用模型对输入文本进行特征表示。
      不带头的意思:
            原始的Transformer结构包含4部分输入层(嵌入层/位置编码层)、编码器层、解码器层、输出层。
            那么不带头的意思就是不包含解码器层、输出层,只有输入层(嵌入层/位置编码层)、编码器层了。
            那么不带头就相当于输入原始文本 -> 经过不带头的Bert等预加载模型 -> 输出矩阵张量。
    2.选择加载带头的模型时, 有三种类型的'头'可供选择
        1.modelWithLMHead(语言模型头):
                生成式任务,如文本生成、机器翻译、阅读理解等任务。
                比如文本生成通过最后输出的概率分布来预测下一个词汇是什么,语言模型本身的训练目标是预测下一个词。
        2.modelForSequenceClassification(分类模型头):序列句子分类任务
        3.modelForQuestionAnswering(问答模型头):seq2seq模型架构
    3.不同类型的'头', 可以使预训练模型输出指定的张量维度. 如使用'分类模型头', 则输出尺寸为(1,2)的张量, 用于进行分类任务判定结果.