AutoModelForSequenceClassification 与 AutoModel 之间有什么区别

Tan*_*han 19 nlp text-classification huggingface-transformers

我们可以从 AutoModel(TFAutoModel) 函数创建一个模型:

from transformers import AutoModel 
model = AutoModel.from_pretrained('distilbert-base-uncase')
Run Code Online (Sandbox Code Playgroud)

另一方面,模型是由 AutoModelForSequenceClassification(TFAutoModelForSequenceClassification) 创建的:

from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification('distilbert-base-uncase')
Run Code Online (Sandbox Code Playgroud)

据我所知,这两个模型都使用 distilbert-base-uncase 库来创建模型。从方法名称来看,第二个类(AutoModelForSequenceClassification)是为序列分类创建的。

但是两个类别的真正区别是什么?以及如何正确使用它们?

(我在huggingface上搜索过,但不清楚)

sub*_*bho 18

AutoModel和模型之间的区别AutoModelForSequenceClassification在于,AutoModelForSequenceClassification 模型输出顶部有一个分类头,可以使用基础模型轻松训练

  • 这是否意味着“AutoModel”具有冻结的权重,而“AutoModelForSequenceClassification”具有可训练的权重?实际上,我有一个要求,我只希望模型充当提取器而不是可训练模型。 (2认同)
  • @subho:分类头是什么?它是 D_in=number_of_classes 的线性层吗?任何在线 pouter 都会非常有用! (2认同)

小智 5

要添加更多信息,

两者都是从检查点实例化任何模型的类;区别在于您希望返回什么内容,例如要进一步处理的特征或逻辑。

汽车模型类:

返回hidden_​​states/features,即模型对输入句子的上下文理解。

AutoModelForSequenceClassification(考虑序列分类任务)类:

Automodel 的输出是分类器头(通常是一个或几个线性层)的输入,分类器头输出输入序列的 logit/s。logit 的 Softmax 被解释为概率。整个管道的示意图如下所示:

整个管道的图示

不同的任务可以使用相同的架构来执行,但是每个任务都有一个与之相关的不同的头(如拥抱脸上提到的)

  • 模型 + 序列分类头 --> AutoModelForSequenceClassification
  • 模型 + 问答头 --> AutoModelForQuestionAnswering
  • 模型 + 令牌分类头 --> AutoModelForTokenClassification

我们可以根据我们的案例研究在模型之上自定义这些头(例如,添加 dropout/dense 层或将最后一层从 5 个节点修改为 2 个节点,或将 Question_answering 头转换为 text_classification 头)。

一个关于定制 head的不错的博客。

来源:HuggingFace