我们可以通过 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里搜过,但不清楚)
AutoModel
和AutoModelForSequenceClassification
模型之间的区别在于AutoModelForSequenceClassification
在模型输出之上有一个分类头,可以使用基础模型轻松训练
要添加更多信息,
两者都是从检查点实例化任何模型的类;区别在于您希望返回什么内容,例如要进一步处理的特征或逻辑。
汽车模型类:
返回隐藏状态/特征,即模型对输入句子的上下文理解。
AutoModelForSequenceClassification(考虑序列分类任务)类:
Automodel 的输出是分类器头(通常是一个或几个线性层)的输入,分类器头输出输入序列的 logit/s。 logit 的 Softmax 被解释为概率。整个管道的示意图如下所示:
不同的任务可以使用相同的架构来执行,但是每个任务都有一个与之相关的不同的头(如拥抱脸上提到的)
我们可以根据我们的案例研究在模型之上自定义这些头(例如,添加 dropout/dense 层或将最后一层从 5 个节点修改为 2 个节点,或将 Question_answering 头转换为 text_classification 头)。
关于定制头部的一个不错的博客。
来源:HuggingFace