三、transformers基础组件之Model

1. 什么是Model Head

  • Model Head 是连接在模型后的层,通常为1个或多个全连接层
  • Model Head 将模型的编码的表示结果进行映射,以解决不同类型的任务

请添加图片描述

不同的任务会有不同的Model Head。

2. 模型加载

2.1 在线加载

预训练模型的加载与Tokenizer类似,我们只需要指定想要加载的模型名称即可。面对各种类型的模型,transformers也为我们提供了更加便捷的加载方式,我们无需指定具体的模型的类型,可以统一使用AutoModel进行加载。首次加载的时候会进行模型文件的下载,下载后的文件会保存在~/.cache/huggingface/transformers文件夹中。注意:可能会因为网络问题,下载失败。transformers的模型仓库中提供了丰富的模型,我们可以到模型仓库的网站中查看,直接搜索想要的模型。

from transformers import AutoConfig, AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("hfl/rbt3")

2.2 离线加载

如果在线下载失败,可以先手动从huggingface的网站下载模型文献到本地,然后再从本地加载模型。
(1)手动下载模型方式一:浏览器下载

请添加图片描述

找到模型的files and versions标签页,可以点击下载按钮直接下载对应的文件。可以看到对于rbt3这个模型,三个比较大的文件,分别对应模型的不同版本,我们只需要pytorch版本。

(2)手动下载模型方式一:git clone

请添加图片描述
请添加图片描述

文件里可能包含其他版本的模型文件,如果只想下载pytorch版本的模型文件,如下:

# 可以使用下面命令进行下载 (只下载pytorch的权重文件)
!git lfs clone "https://huggingface.co/hfl/rbt3" --include="*.bin"

然后就可以从本地离线加载了:

# 如果在离线场景下,则需要将模型文件提前准备好,from_pretrained方法中指定本地模型存储的文件夹即可。
model = AutoModel.from_pretrained("../models/rbts")

2.3 加载模型的同时配置参数

加载的时候可以配置一些参数,有哪些参数可以加载呢?可以查看一下:

model.config

或者如下:

config = AutoConfig.from_pretrained("../models/rbts")

以上两种的结果是一样的,如下:

BertConfig {
   
   
  "_attn_implementation_autoset": true,
  "_name_or_path": "../models/rbts",
  "architectures": [
    "BertForMaskedLM"
  ],
  "attention_probs_dropout_prob": 0.1,
  "classifier_dropout": null,
  "directionality": "bidi",
  "hidden_act": "gelu",
  "hidden_dropout_prob": 0.1,
  "hidden_size": 768,
  "initializer_range": 0.02,
  "intermediate_size": 3072,
  "layer_norm_eps": 1e-12,
  "max_position_embeddings": 512,
  "model_type": "bert",
  "num_attention_heads": 12,
  "num_hidden_layers": 3,
  "output_past": true,
  "pad_token_id": 0,
  "pooler_fc_size": 768,
  "pooler_num_attention_heads": 12,
  "pooler_num_fc_layers": 3,
  "pooler_size_per_head": 128,
...
  "transformers_version": "4.49.0",
  "type_vocab_size": 2,
  "use_cache": true,
  "vocab_size": 21128
}
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

可能还不是很全,可以通过如下方式选择参数:

请添加图片描述

这些参数在哪里呢?首先可以查看config变量属于哪个类.上面的例子属于BertConfig类,进入这个类

请添加图片描述
参数还不全,在进入他的父类:
请添加图片描述

可以看到更多的参数。

3. 模型的调用

3.1 准备(tokenize)

sen = "弱小的我也有大梦想!"
tokenizer = AutoTokenizer.from_pretrained("../models/rbts")
inputs1 = tokenizer(sen)

输出如下:

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

返回的每个值是lisst,如果是增加一个参数 return_tensors="pt",让返回pytorch tensors,如下

inputs = tokenizer(sen, 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"就把list变为pytorch tensor,可以直接输入模型。

3.2 不带Model Head的模型调用(只得到编码结果)

# 数据经过Tokenizer处理后可以便可以直接输入到模型中,得到模型编码
model = AutoModel.from_pretrained(model_path, output_attentions=True)
output = model(**inputs)

返回:

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值