首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在拥抱中创建两个不同头部的语言模型?

如何在拥抱中创建两个不同头部的语言模型?
EN

Stack Overflow用户
提问于 2022-11-17 17:32:32
回答 1查看 125关注 0票数 1

我知道我可以用1 head创建一个语言模型:

代码语言:javascript
复制
from transformers import AutoModelForMultipleChoice
model = AutoModelForMultipleChoice.from_pretrained("distilbert-base-cased").to(device)

但是,我如何才能创建相同的基础模型结构(例如,蒸馏器-基箱)与两个头?比如说,一个是AutoModelForMultipleChoice,第二个是AutoModelForSequenceClassification。我需要两个模型之间的唯一区别(1头对2头)作为额外的头部(从参数的角度)。

所以现在我对2 heads模型的输入是类似于[sequence_label, multiple_choice_labels]

EN

回答 1

Stack Overflow用户

发布于 2022-11-20 15:15:27

通常情况下,您将需要创建从DistilBertPreTrainedModel派生的自定义类。在__init__()内部,您将需要定义所需的头架构。然后,您将需要创建自己的forward()函数,并在其中定义涉及两个头的自定义丢失,并返回结果。

但是,如果您专门谈论的是DistilBertForMultipleChoiceDistilBertForSequenceClassification,有一个快捷方式,因为heads的体系结构恰好是相同的(参见来源),而且区别仅在于丢失函数。因此,您可以尝试将您的模型训练为多标签序列分类问题,其中每个序列的标签将是[sequence_label, multiple_choice_label_0, multiple_choice_label_1, ...]。例如,如果您有像{sequence、choice0、choice1、seq_label:True、correct_choice:0}这样的条目,您的数据集将是

代码语言:javascript
复制
[ {'text':(sequence, choice0), 'label':(1 1 0)},  
  {'text':(sequence, choice1), 'label':(1 0 0)} ]

这样,序列分类的结果将处于第一个位置,为了获得正确的选择概率,您需要在其余的逻辑上应用softmax函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74479748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档