【Python】科研代码学习:六 ModelOutput,SpecificModel

【Python】科研代码学习:六 ModelOutput,SpecificModel

Model Outputs

ModelOutput

  • HF官网API:ModelOutput
    所有模型的输出都是 ModelOutput 的子类的实例
    (All models have outputs that are instances of subclasses of ModelOutput)
    了解 ModelOutput与其子类,我们就可以获得许多有用的输出参数
  • 先来看如何获取模型的输出的一个例子:
    我们加载 tokenizer, model,获取输入和标签后,model(xxx) 的返回结果就是 outputs
from transformers import BertTokenizer, BertForSequenceClassification
import torch

tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("google-bert/bert-base-uncased")

inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
labels = torch.tensor([1]).unsqueeze(0)  # Batch size 1
outputs = model(**inputs, labels=labels)
  • 看一下源码:
    首先,它头文件在 transformers.utils.ModelOutput
    其次,它继承自 OrderedDict,且重载了 __getitem__,可以通过字符串 / 下标索引
    可以使用 to_tuple() 获取转成tuple类型
    ※ 另外需要注意的是,传参output_hidden_states=True 以及 output_attentions=True 等,我们才能从 outputs 中获取到更多的参数信息
    在这里插入图片描述

BaseModelOutput

  • 上面的 ModelOutput 只是定义了基础的格式和转换,接下来这个
    BaseModelOutput 则是继承自上面的类,并且可以获得更多参数信息
  • 可以看到,它存储了如下参数:
    last_hidden_state:最终隐藏层状态的张量值
    hidden_states:每一层的状态的张量值
    attentions:每一层的注意力的张量值

在这里插入图片描述

CausalLMOutput

  • 这个比较常用,是专门对因果LM输出用的
    它还提供了 loss 损失
    logits:LM头的预测分数,在CausalLM中即为在词汇表vocab中,下一个token的预测分数,并且未经过最后softmax归一之前的分数。
    在这里插入图片描述

其他 ModelOutput

  • 其他还有很多,主要是关注
    1)用的是 pt 还是 tf 还是 flax
    2)用的是哪个具体任务
    3)主要还是得对应哪个具体的 PretrainedModel
  • 比如 BaseModelOutputWithCrossAttentions 就用了交叉注意力的 PretrainedModel
    Seq2SeqModelOutput 给 s2s 模型的
    MaskedLMOutput 给 maskedLM的
    NextSentencePredictorOutput 给 NSP 任务的
    MultipleChoiceModelOutput 给多选任务的…
    你会发现,具体是哪一类,取决于你当时是用哪个 PretrainedModel
    所以你需要查询具体我可以获得什么输出之前,就去看预训练模型的那个类型吧。

SpecificModel

  • 之前讲过 PretrainedModel 是预训练模型的基类
    AutoModel 可以自动根据输入的参数,选择最合适的模型
    AutoModelForCausalLM,可以自动根据输入的参数,选择最合适的因果LM模型
    那问题来了,很多代码中貌似没有使用 AutoModel 呀,他们的导入头文件是从哪里来的呢?
    其实从 HF官网的Doc的最左下角找的:
    首先进入 Docs,找到 Transformers 库的 API,然后选择合适的版本号,用英文,左侧滚到底,就可以找到了
    在这里插入图片描述
  • 我这里是NLP任务,所以选择大类 TEXT MODELS
    这里举一些常用的模型吧:
    ALBERT, BART, BERT, BLOOM, GPT, GPT2, LLaMA, Llama2, REALM, RoBERTa, T5 ……
    我这里以 Llama2 为例子吧
    在这里插入图片描述
  • 步骤一:查看基本信息
    比如,llama的模型需要你去官网注册一下,它才会发给你。另外它还告诉你了,原始模型没有 pad token, 要添加的话怎么加
    在这里插入图片描述
  • 步骤二:查看怎么导入 modeltokenizer
    你就会发现,它通过它特殊的类加载了,这里是 LlamaForCausalLM, LlamaTokenizer
    在这里插入图片描述
  • 步骤三:查看对应的 config, tokenizer, model 的改动
    由于不是原始的 PretrainedConfig, PretrainedTokenizer, PretrainedModel 嘛,它肯定自己加了些东西
    你就进去浏览看下改动即可
    比如 LlamaConfig 中,有如下参数,比较多,还是建议看文档,自己背出来的话也太大佬了
    在这里插入图片描述
  • 它这里 model 有三个,主要还是看你需要用它来做什么任务,就选择哪个即可。
    在这里插入图片描述
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值