Я пытаюсь выполнить многозадачную задачу классификации предложений с несколькими классами, используя предварительно обученную модель BERT из библиотеки huggingface transformers. Я пытался использовать модель BERTForSequenceClassification оттуда, но проблема, с которой я столкнулся, заключается в том, что я не могу расширить ее для нескольких задач. Я постараюсь сделать его более информативным на этом примере.
Предположим, у нас есть четыре разных задачи, и для каждого предложения и для каждой задачи у нас есть такие ярлыки, как показано в примерах:
- A :[ 'a' , 'b' , 'c' , 'd' ]
- B :[ 'e' , 'f' , 'g' , 'h' ]
- C :[ 'i' , 'j' , 'k' , 'l' ]
- D :[ 'm' , 'n' , 'o' , 'p' ]
Теперь, если у меня есть предложение для этой модели, я хочу, чтобы выходные данные давали мне выходные данные для всех четырех различных задач (A, B, C, D).
Это то, что я делал раньше
model = BertForSequenceClassification.from_pretrained(
"bert-base-uncased", # Use the 12-layer BERT model, with an uncased vocab.
num_labels = 4, # The number of output labels--2 for binary classification.
# You can increase this for multi-class tasks.
output_attentions = False, # Whether the model returns attentions weights.
output_hidden_states = False, # Whether the model returns all hidden-states.
)
Затем я попытался реализовать такую модель CustomBERT:
class CustomBERTModel(nn.Module):
def __init__(self):
super(CustomBERTModel, self).__init__()
self.bert = BertModelForSequenceClassification.from_pretrained("bert-base-uncased")
### New layers:
self.linear1 = nn.Linear(768, 256)
self.linear2 = nn.Linear(256, num_classes) ## num_classes is the number of classes in this example
def forward(self, ids, mask):
sequence_output, pooled_output = self.bert(
ids,
attention_mask=mask)
# sequence_output has the following shape: (batch_size, sequence_length, 768)
linear1_output = self.linear1(sequence_output[:,0,:].view(-1,768))
linear2_output = self.linear2(linear2_output)
return linear2_output
Я просмотрел ответы на вопросы, аналогичные ранее доступным, но ни один из них не дал ответа на мой вопрос. Я попытался прояснить все моменты, которые, на мой взгляд, могут быть полезны для понимания моей проблемы, и постараюсь прояснить еще больше в случае каких-либо несоответствий, сделанных мною в объяснении вопроса. Любые ответы, связанные с этим, будут очень полезны.
BertModel
, а неBertModelForSequenceClassification
для своегоCustomBERTModel
класса - person Ashwin Geet D'Sa   schedule 14.12.2020