Как скормить выходной сигнал от тонко настроенной модели койки в качестве входящего в другую отлаженную модель койки?

Я доработал две отдельные модели bert (bert-base-uncased) для задач анализа настроений и тегов pos. Теперь я хочу передать выходные данные теггера pos (batch, seqlength, hiddensize) в качестве входных данных для модели настроений. Исходная модель bert-base-uncased находится в папке bertModel /, которая содержит файлы model.bin и config.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'

person Erfan    schedule 19.02.2020    source источник
comment
Какую версию transformers вы используете?   -  person dennlinger    schedule 19.02.2020
comment
Трансформаторы @dennlinger 2.1.1   -  person Erfan    schedule 19.02.2020
comment
Тогда пришло время обновить вашу версию трансформеров. В документации по 2.1.1 четко перечислены очень устаревшая версия прямого прохода, поэтому это причина, по которой вы не можете получить доступ к аргументу (на тот момент не существующему).   -  person dennlinger    schedule 19.02.2020


Ответы (1)


Чтобы сформулировать это также как ответ и сохранить его должным образом видимым для будущих посетителей, forward() вызов трансформаторов не поддерживает эти аргументы в версии 2.1.1 или любой более ранней версии, если на то пошло. обратите внимание, что ссылка в моем комментарии на самом деле указывает на другую функцию пересылки, но в остальном точка все еще сохраняется.

Передача encoder_hidden_states в forward() была первой возможной в версии 2.2.0..

person dennlinger    schedule 20.02.2020