torch.hub.load自动下载预训练模型文件用以加载预训练模型
程序员文章站
2022-03-04 13:32:39
...
日萌社
人工智能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)的张量, 用于进行分类任务判定结果.