基础组件之Model
Model简介
- Transformer
原始的Transformer为编码器(Encoder)、解码器(Decoder)模型
Encoder部分接收输入并构建其完整特征表示,Decoder部分使用Encoder的编码结果以及其他的输入生成目标序列
无论是编码器还是解码器,均由多个TransformerBlock堆叠而成
TransformerBlock由注意力机制(Attention)和FFN组成 - 注意力机制
注意力机制的使用是Transformer的一个核心特性,在计算当前词的特征表示时,可以通过注意力机制有选择性的告诉模型要使用哪些上下文

- 模型类型
编码器模型:自编码模型,使用Encoder,.拥有双向的注意力机制,即计算每一个词的特征时都看到完整上下文
解码器模型:自回归模型,使用Decoder,拥有单向的注意力机制,即计算每一个词的特征时都只能看到上文,无法看到下文
编码器解码器模型:序列到序列模型,使用Encoder+Decoder,Encoder部分使用双向的注意力,Decoderi部分使用单向注意力


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

- Transformers中的Model Head
Model(模型本身,只返回编码结果)
*ForCausalLM
*ForMaskedLM
*ForSeq2SeqLM
*ForMultipleChoice
*ForQuestionAnswering
*ForSequenceClassification
*ForTokenClassification
…

Model基本使用方法
模型加载与保存
from transformers import AutoConfig, AutoModel, AutoTokenizer
在线加载
model = AutoModel.from_pretrained("hfl/rbt3", force_download=True)
模型下载(需要科学)
!git clone "https://huggingface.co/hfl/rbt3"
!git lfs clone "https://huggingface.co/hfl/rbt3" --include="*.bin"
离线加载
model = AutoModel.from_pretrained("rbt3")
模型加载参数
model = AutoModel.from_pretrained("rbt3")
model.config
config = AutoConfig.from_pretrained("./rbt3/")
config
config.output_attentions
from transformers import BertConfig
模型调用
sen = "弱小的我也有大梦想!"
tokenizer = AutoTokenizer.from_pretrained("rbt3")
inputs = tokenizer(sen, return_tensors="pt")
inputs
不带model head的模型调用
model = AutoModel.from_pretrained("rbt3", output_attentions=True)
output = model(**inputs)
output
output.last_hidden_state.size()
len(inputs["input_ids"][0])
带model head的模型调用
from transformers import AutoModelForSequenceClassification, BertForSequenceClassification
clz_model = AutoModelForSequenceClassification.from_pretrained("rbt3", num_labels=10)
clz_model(**inputs)
clz_model.config.num_labels