日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
注意:
1.解决每次执行torch.hub.load但是每次同时又重新下载预训练模型文件的问题:
当第一次执行torch.hub.load加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
后面每次再执行相同的代码时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
即能解决每次执行torch.hub.load每次又重新下载预训练模型文件的问题。
预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
2.解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题:
解决方式同上述第一点解决每次执行torch.hub.load又重新下载预训练模型文件的问题。
当第一次python命令执行run_glue.py模型微调文件加载预训练模型会自动下载对应的预训练模型文件,当第一次下载完成并成功运行之后,
后面每次再执行相同的python命令执行run_glue.py时如果出现重新下载之前已经下载过的并且目录已存在的预训练模型文件的话,
那么解决方式是只需要到C:/Users/Administrator/.cache/torch/hub/huggingface_pytorch-transformers_master
或 /root/.cache/torch/hub/huggingface_pytorch-transformers_master
目录中执行一次“pip install .”命令重新再次安装一次transformers之后,即使安装过程中提示transformers已经安装存在了也没关系,
当重新执行完“pip install .”之后那么再运行torch.hub.load即不会再重新下载之前已经下载过的并且目录已存在的预训练模型文件,
即能解决每次python命令执行run_glue.py但是每次同时又重新下载预训练模型文件的问题。
预训练模型文件自动下载在:C:/Users/Administrator/.cache/torch/transformers 或 /root/.cache/torch/transformers。
确定需要加载的预训练模型并安装依赖包
能够加载哪些模型可以参考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/1DWNC3mOFRor4uaa7xr_uew
提取码:aiai
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)的张量, 用于进行分类任务判定结果.