目录
1 Model简介:
2 Model基本使用方法:
2.1 模型下载:
2.1.1 在线下载:
2.1.2 离线下载:
通过浏览器下载后,放到项目文件夹下进行离线下载:
2.1.3 git clone下载:
第一个指令是下载这个模型所有的文件,由于我们只需要pytorch文件,因此可以使用第二条指令。
2.2 模型加载参数:
可以通过model.config查看模型的配置,但是显示的参数并不齐全,本身我们能修改的参数该如何查看呢?
这个还是需要我们通过config的自动补全来进行查看:
我们可以通过进入上述的BertConfig中查看详细配置
2.2 模型调用:
2.2.1 输入进tokenizer:
这里的return_tensors="pt"
是指定tokenizer返回PyTorch张量(tensors)格式的输入。当使用return_tensors="pt"
参数时,tokenizer会将输入文本编码为PyTorch张量形式,方便后续在PyTorch模型中进行处理。
带
return_tensors="pt":
{'input_ids': tensor([[ 101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 8013, 102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}
不带return_tensors="pt":
{'input_ids': [101, 2483, 2207, 4638, 2769, 738, 3300, 1920, 3457, 2682, 8013, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}
第一个数据结构是使用PyTorch张量(Tensor)表示的字典形式。其中,input_ids、token_type_ids和attention_mask分别对应了不同的键。每个键对应的值都是一个PyTorch张量。
- input_ids的值是形状为(1, 12)的长整型张量,表示输入的标记序列。
- token_type_ids的值是形状为(1, 12)的长整型张量,表示输入的标记类型。
- attention_mask的值是形状为(1, 12)的长整型张量,表示输入的注意力掩码。
第二个数据结构是使用Python列表表示的字典形式。其中,input_ids、token_type_ids和attention_mask同样对应不同的键,但每个键对应的值都是一个Python列表。
- input_ids的值是一个由整数组成的列表,表示输入的标记序列。
- token_type_ids的值是一个由整数组成的列表,表示输入的标记类型。
- attention_mask的值是一个由整数组成的列表,表示输入的注意力掩码。
2.2.2 不带model head的模型调用:
也就是不带model head的模型调用只能返回编码结果
在深度学习中,模型通常由两部分组成:特征提取器(或称为骨干网络)和模型头(或分类器)。
不带模型头的模型调用:
不带模型头的模型通常只包含特征提取器(骨干网络),它负责从输入数据中提取有用的特征表示。这种模型通常在预训练过程中使用大规模数据集进行训练,以学习通用的特征表示能力。在调用时,输入数据经过特征提取器的处理后,得到的特征表示可以用于后续的任务,比如分类、检测、分割等。这种模型调用方式适用于具有相似任务的数据集,可以通过微调(fine-tuning)或特定任务的训练来适应新的任务。带有模型头的模型调用:
带有模型头的模型除了包含特征提取器外,还包含了一个或多个模型头(分类器),用于特定任务的预测。这些模型头通常是在特征提取器的顶部添加的额外层或层序列,用于根据任务要求生成预测结果。在调用时,输入数据首先通过特征提取器获得特征表示,然后这些特征表示被传递到模型头进行预测。这种模型调用方式适用于具体的任务,模型头的结构和参数通常是针对特定任务进行设计和训练的。
最后得到的结果:
BaseModelOutputWithPoolingAndCrossAttentions(last_hidden_state=tensor([[[ 0.6804, 0.6664, 0.7170, ..., -0.4102, 0.7839, -0.0262], [-0.7378, -0.2748, 0.5034, ..., -0.1359, -0.4331, -0.5874], [-0.0212, 0.5642, 0.1032, ..., -0.3617, 0.4646, -0.4747], ..., [ 0.0853, 0.6679, -0.1757, ..., -0.0942, 0.4664, 0.2925], [ 0.3336, 0.3224, -0.3355, ..., -0.3262, 0.2532, -0.2507], [ 0.6761, 0.6688, 0.7154, ..., -0.4083, 0.7824, -0.0224]]], grad_fn=<NativeLayerNormBackward0>), pooler_output=tensor([[-1.2646e-01, -9.8619e-01, -1.0000e+00, -9.8325e-01, 8.0238e-01, -6.6268e-02, 6.6919e-02, 1.4784e-01, 9.9451e-01, 9.9995e-01, -8.3051e-02, -1.0000e+00, -9.8865e-02, 9.9980e-01, -1.0000e+00, 9.9993e-01, 9.8291e-01, 9.5363e-01, -9.9948e-01, -1.3219e-01, -9.9733e-01, -7.7934e-01, 1.0720e-01, 9.8040e-01, 9.9953e-01, -9.9939e-01, -9.9997e-01, 1.4967e-01, -8.7627e-01, -9.9996e-01, -9.9821e-01, -9.9999e-01, 1.9396e-01, -1.1277e-01, 9.9359e-01, -9.9153e-01, 4.4752e-02, -9.8731e-01, -9.9942e-01, -9.9982e-01, 2.9360e-02, 9.9847e-01, -9.2014e-03, 9.9999e-01, 1.7111e-01, 4.5071e-03, 9.9998e-01, 9.9467e-01, 4.9726e-03, -9.0707e-01, 6.9056e-02, -1.8141e-01, -9.8831e-01, 9.9668e-01, 4.9800e-01, 1.2997e-01, 9.9895e-01, -1.0000e+00, -9.9990e-01, 9.9478e-01, -9.9989e-01, 9.9906e-01, 9.9820e-01, 9.9990e-01, -6.8953e-01, 9.9990e-01, 9.9987e-01, 9.4563e-01, -3.7660e-01, -1.0000e+00, 1.3151e-01, -9.7371e-01, -9.9997e-01, -1.3228e-02, -2.9801e-01, -9.9985e-01, 9.9662e-01, -2.0004e-01, 9.9997e-01, 3.6876e-01, -9.9997e-01, 1.5462e-01, 1.9265e-01, 8.9871e-02, 9.9996e-01, 9.9998e-01, 1.5184e-01, -8.9714e-01, -2.1646e-01, -9.9922e-01,
...
1.7911e-02, 4.8672e-01], [4.0732e-01, 3.8137e-02, 9.6832e-03, ..., 4.4490e-02, 2.2997e-02, 4.0793e-01], [1.7047e-01, 3.6989e-02, 2.3646e-02, ..., 4.6833e-02, 2.5233e-01, 1.6721e-01]]]], grad_fn=<SoftmaxBackward0>)), cross_attentions=None)
可以看到不使用model head,我们只能得到 last_hidden_state(编码器层最后一个隐藏状态的输出)、grad_fn(记录反向传播函数)、pooler_output(last的池化表示)、cross_attentions(表示与其他注意力头(除了自注意力头)相关的注意力权重)
last_hidden_state
表示最后一个编码器层的隐藏状态,也就是最后一个层的输出。它是一个张量(tensor),形状为[batch_size, sequence_length, hidden_size]
,其中:
batch_size
表示输入的批次大小,即一次处理的样本数量。sequence_length
表示输入序列的长度,即单词或标记的数量。hidden_size
表示每个隐藏状态的维度大小,也称为隐藏单元数。
对应上文,这里的1表示batch为1,也就是一个句子;然后12是token长度,也就是sequence_length,最后的768则表示每个隐藏状态的维度大小。
2.2.3 带model head的模型调用:
可以看到,在这里,我们使用的是一个AutoModelForSequenceClassification模型,模型最后的输出是一个包含logits的序列,是直接反馈给我们最后所要的结果的,模型头的结构和参数通常是针对特定任务进行设计和训练的。