Тестирование BERT для больших последовательностей - PullRequest
1 голос
/ 12 апреля 2020

Я новичок в 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 токенов).

Итак, кто-нибудь может мне помочь, чтобы адаптировать этот скрипт для достижения этой цели?

Спасибо,

...