pytorch - 如何将微调过的 bert 模型的输出作为输入提供给另一个微调过的 bert 模型?
问题描述
我在情绪分析和 pos 标记任务上微调了两个单独的 bert 模型(bert-base-uncased)。现在,我想将 pos 标记器的输出(batch、seqlength、hiddensize)作为情绪模型的输入。原始的 bert-base-uncased 模型位于“bertModel/”文件夹中,其中包含“model.bin”和“配置.json'。这是我的代码:
class DeepSequentialModel(nn.Module):
def __init__(self, sentiment_model_file, postag_model_file, device):
super(DeepSequentialModel, self).__init__()
self.sentiment_model = SentimentModel().to(device)
self.sentiment_model.load_state_dict(torch.load(sentiment_model_file, map_location=device))
self.postag_model = PosTagModel().to(device)
self.postag_model.load_state_dict(torch.load(postag_model_file, map_location=device))
self.classificationLayer = nn.Linear(768, 1)
def forward(self, seq, attn_masks):
postag_context = self.postag_model(seq, attn_masks)
sent_context = self.sentiment_model(postag_context, attn_masks)
logits = self.classificationLayer(sent_context)
return logits
class PosTagModel(nn.Module):
def __init__(self,):
super(PosTagModel, self).__init__()
self.bert_layer = BertModel.from_pretrained('bertModel/')
self.classificationLayer = nn.Linear(768, 43)
def forward(self, seq, attn_masks):
cont_reps, _ = self.bert_layer(seq, attention_mask=attn_masks)
return cont_reps
class SentimentModel(nn.Module):
def __init__(self,):
super(SentimentModel, self).__init__()
self.bert_layer = BertModel.from_pretrained('bertModel/')
self.cls_layer = nn.Linear(768, 1)
def forward(self, input, attn_masks):
cont_reps, _ = self.bert_layer(encoder_hidden_states=input, encoder_attention_mask=attn_masks)
cls_rep = cont_reps[:, 0]
return cls_rep
但我收到以下错误。如果有人可以帮助我,我将不胜感激。谢谢!
cont_reps, _ = self.bert_layer(encoder_hidden_states=input, encoder_attention_mask=attn_masks)
result = self.forward(*input, **kwargs)
TypeError: forward() got an unexpected keyword argument 'encoder_hidden_states'
解决方案
为了将其也表达为答案,并使其对未来的访问者正确可见,在 2.1.1 版本或任何早期版本中,forward()
转换器的调用不支持这些参数。请注意,我评论中的链接实际上指向不同的转发功能,但除此之外,这一点仍然成立。
在 2.2.0 版本中首先可以传递encoder_hidden_states
到。forward()
推荐阅读
- python - Python:Mac 中的 Python 版本
- spring-boot - 如何将@Timed 注释与千分尺测量中的内容联系起来
- c# - 如何在异步方法中返回 SignalRMessage?
- laravel - 如何获取类别的父类别状态仅为活动的数据?
- python - 使用 Paramiko 将 Pandas 数据帧传输到 SFTP
- ruby-on-rails - 如何将 JWT 用作 Doorkeeper 的刷新令牌?
- python - 同一个spacy管道中不同实体类型的Negspacy?
- sql - 这个查询有什么问题?左连接和自连接
- angular - 在 Jersey 和 Spring SAML 安全 SSO 验证之后路由到 Angular 组件
- java - 通过工厂方法进行 Bean 实例化失败 (com.datastax.oss.driver.api.core.CqlSession) java.lang.AbstractMethodError