Как использовать AutoModelWithLMHead для ответа на вопрос, не используя что-то вроде BertForQuestionAnswering.from_pretrained? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть модель, прошедшая предварительную подготовку из BERT:

tokenizer_small = AutoTokenizer.from_pretrained('neuralmind/bert-base-portuguese-cased')
model_small = AutoModelWithLMHead.from_pretrained('neuralmind/bert-base-portuguese-cased')

И мой набор данных имеет следующий формат:

texts = questions[:10]
labels = contexts[:10]

dataset_debug = MyDataset(
    texts=texts,
    labels=labels,
    tokenizer=tokenizer,
    max_length=800)

dataloader_debug = DataLoader(dataset_debug, batch_size=4, shuffle=True, 
                              num_workers=0)

token_ids, attention_mask, token_type_ids = next(iter(dataloader_debug))
print('token_ids:\n', token_ids)
print('token_type_ids:\n', token_type_ids)
print('attention_mask:\n', attention_mask)

print('token_ids.shape:', token_ids.shape)
print('token_type_ids.shape:', token_type_ids.shape)
print('attention_mask.shape:', attention_mask.shape)

Результат:

token_ids:
 tensor([[  101,   100, 22268,  ...,  2014,   119,   102],
        [  101,  1079,  3264,  ...,   125,   669,   102],
        [  101,   443, 18175,  ...,  3955,   119,   102],
        [  101,   259,  1151,  ...,   470,   119,   102]])
token_type_ids:
 tensor([[0, 0, 0,  ..., 1, 1, 1],
        [0, 0, 0,  ..., 1, 1, 1],
        [0, 0, 0,  ..., 1, 1, 1],
        [0, 0, 0,  ..., 1, 1, 1]])
attention_mask:
 tensor([[1, 1, 1,  ..., 1, 1, 1],
        [1, 1, 1,  ..., 1, 1, 1],
        [1, 1, 1,  ..., 1, 1, 1],
        [1, 1, 1,  ..., 1, 1, 1]])
token_ids.shape: torch.Size([4, 800])
token_type_ids.shape: torch.Size([4, 800])
attention_mask.shape: torch.Size([4, 800])

вопрос в том, что я должен делать внутри моей модели на форварде, чтобы преобразовать простую модель BERT для ответа на вопрос:

def forward(self, input_ids, attention_mask, token_type_ids):



        return 
...