AutoModelForSequenceClassification 和 AutoModel 有哪些不同?

18
我们可以使用AutoModel(TFAutoModel)函数创建一个模型:
from transformers import AutoModel 
model = AutoModel.from_pretrained('distilbert-base-uncase')

换句话说,模型是通过AutoModelForSequenceClassification(TFAutoModelForSequenceClassification)创建的:

from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification('distilbert-base-uncase')

据我所知,两种模型都使用distilbert-base-uncase库创建模型。从方法名称来看,第二个类(AutoModelForSequenceClassification)是为序列分类创建的。
但这两个类到底有什么区别?如何正确使用它们?
(我在huggingface上搜索过了,但并不清楚。)

1
我发现一个区别:使用AutoModel,我们可以使用last_hidden_state来获取[CLS]标记。但是,在AutoModelSequenceClassification中,last_hidden_state不存在。 - Tan Phan
2个回答

16

AutoModelAutoModelForSequenceClassification模型的区别在于,AutoModelForSequenceClassification在模型输出的顶部有一个分类头,可以很容易地与基础模型一起进行训练。


那我可以使用 AutoModel 进行 分类 目的吗? - Tan Phan
从Hugging Face课程中可以看出,对于我们的示例,我们需要一个带有序列分类头的模型(以便能够将句子分类为积极或消极)。因此,我们实际上不会使用AutoModel类,而是使用AutoModelForSequenceClassification:https://huggingface.co/course/chapter2/2?fw=pt - subho
2
这是否意味着 AutoModel 有冻结权重,而 AutoModelForSequenceClassification 有可训练的权重?实际上,我有一个要求,我只想让模型作为提取器而不是可训练的模型。 - Lawhatre
@subho 什么是分类头? - etang
1
@subho:分类头是什么?它是一个具有D_in =类数的线性层吗?任何在线指南都将非常有用! - Betty
这将取决于架构,例如RoBERTa使用的是这个头部 - https://github.com/huggingface/transformers/blob/6112b1c6442aaf7affd2b0676a1cd4eee30c45cf/src/transformers/models/roberta/modeling_roberta.py#L1424 - David Waterworth

1
为了提供更多信息,
两者都是从检查点实例化任何模型的类;区别在于你希望返回的是特征还是logits以供进一步处理。
Automodel类:
返回hidden_states/features,即模型对输入句子的上下文理解。
AutoModelForSequenceClassification(考虑序列分类任务)类:
Automodel的输出是分类器头(通常是一个或几个线性层)的输入,该头为输入序列输出logit/s。logit的Softmax被解释为概率。整个流程的示意图如下所示:

Illustration of an entire pipeline

不同的任务可以使用相同的架构来执行,但每个任务都会有一个与之相关联的不同头部(如在hugging face上所提到的)。
- 模型 + 序列分类头部 --> AutoModelForSequenceClassification - 模型 + 问答头部 --> AutoModelForQuestionAnswering - 模型 + 标记分类头部 --> AutoModelForTokenClassification
我们可以根据我们的案例研究自定义这些头部(例如,在模型之上添加dropout/dense层,或将最后一层从5个节点修改为2个节点,或将问答头部转换为文本分类头部)。
关于自定义头部的一个不错的博客:customizing head
来源:HuggingFace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接