Я новичок в pytorch и хочу просто проверить предварительно подготовленную модель CamemBERT для задания «Ответ на вопрос» с длинными входящими текстовыми последовательностями (более 512 токенов). Итак, я пытаюсь реализовать это, используя следующий код:
class CamemBERTQA(nn.Module):
def __init__(self, hidden_size, num_labels):
super(CamemBERTQA, self).__init__()
self.hidden_size = hidden_size
num_labels = num_labels
self.camembert = CamembertForQuestionAnswering.from_pretrained('fmikaelian/camembert-base-fquad')
self.tokenizer = CamembertTokenizer.from_pretrained('fmikaelian/camembert-base-fquad', do_lower_case=True)
# self.qa_outputs = nn.Linear(self.hidden_size, self.num_labels)
def forward(self, ids):
input_ids = ids
start_scores, end_scores = self.camembert(torch.tensor([input_ids]))
start_logits = torch.argmax(start_scores)
end_logits = torch.argmax(end_scores)+1
outputs = (start_logits, end_logits,)
# print(outputs)
return outputs
def text_representation(self, text):
input_ids = torch.tensor([tokenizer.encode(text, add_special_tokens=True)]) # Add special tokens takes care of adding [CLS], [SEP], <s>... tokens in the right way for each model.
with torch.no_grad():
last_hidden_states = model(input_ids)[0] # Models outputs are now tuples
# print(last_hidden_states)
return last_hidden_states
def tokenize(self, text):
return self.tokenizer.convert_tokens_to_ids(self.tokenizer.tokenize(text))
Чтобы справиться с ограничением длины последовательности текста, я хочу разбить входную последовательность на подпоследовательности и сгенерировать текстовое представление каждого из них и затем используя максимальный слой пула для генерации окончательного текстового представления (510 токенов).
Итак, кто-нибудь может мне помочь, чтобы адаптировать этот скрипт для достижения этой цели?
Спасибо,