我知道我可以用1 head创建一个语言模型:
from transformers import AutoModelForMultipleChoice
model = AutoModelForMultipleChoice.from_pretrained("distilbert-base-cased").to(device)但是,我如何才能创建相同的基础模型结构(例如,蒸馏器-基箱)与两个头?比如说,一个是AutoModelForMultipleChoice,第二个是AutoModelForSequenceClassification。我需要两个模型之间的唯一区别(1头对2头)作为额外的头部(从参数的角度)。
所以现在我对2 heads模型的输入是类似于[sequence_label, multiple_choice_labels]的
发布于 2022-11-20 15:15:27
通常情况下,您将需要创建从DistilBertPreTrainedModel派生的自定义类。在__init__()内部,您将需要定义所需的头架构。然后,您将需要创建自己的forward()函数,并在其中定义涉及两个头的自定义丢失,并返回结果。
但是,如果您专门谈论的是DistilBertForMultipleChoice和DistilBertForSequenceClassification,有一个快捷方式,因为heads的体系结构恰好是相同的(参见来源),而且区别仅在于丢失函数。因此,您可以尝试将您的模型训练为多标签序列分类问题,其中每个序列的标签将是[sequence_label, multiple_choice_label_0, multiple_choice_label_1, ...]。例如,如果您有像{sequence、choice0、choice1、seq_label:True、correct_choice:0}这样的条目,您的数据集将是
[ {'text':(sequence, choice0), 'label':(1 1 0)},
{'text':(sequence, choice1), 'label':(1 0 0)} ]这样,序列分类的结果将处于第一个位置,为了获得正确的选择概率,您需要在其余的逻辑上应用softmax函数。
https://stackoverflow.com/questions/74479748
复制相似问题