Как использовать размер партии больше нуля в классификации последовательности Берта - PullRequest
2 голосов
/ 11 февраля 2020

Документация Hugging Face описывает , как выполнить классификацию последовательности с использованием модели Берта:

from transformers import BertTokenizer, BertForSequenceClassification
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')

input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0)  # Batch size 1
labels = torch.tensor([1]).unsqueeze(0)  # Batch size 1
outputs = model(input_ids, labels=labels)

loss, logits = outputs[:2]

Однако есть только пример для размера партии 1. Как реализовать это, когда мы есть список фраз и хотите использовать пакет большего размера?

1 Ответ

3 голосов
/ 11 февраля 2020

в этом примере unsqueeze используется для добавления измерения к входу / меткам, так что это массив размером (batch_size, sequence_length). Если вы хотите использовать размер пакета> 1, вы можете вместо этого построить массив последовательностей, как в следующем примере:

from transformers import BertTokenizer, BertForSequenceClassification
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForSequenceClassification.from_pretrained('bert-base-uncased')

sequences = ["Hello, my dog is cute", "My dog is cute as well"]
input_ids = torch.tensor([tokenizer.encode(sequence, add_special_tokens=True) for sequence in sequences])
labels = torch.tensor([[1], [0]]) # Labels depend on the task
outputs = model(input_ids, labels=labels)

loss, logits = outputs[:2]

В этом примере обе последовательности закодированы в одном и том же количестве токенов, поэтому Легко построить тензор, содержащий обе последовательности, но если у них разное количество элементов, вам нужно будет дополнить последовательности и сообщить модели, к каким токенам она должна обращаться (чтобы она игнорировала дополненные значения), используя маску внимания.

В глоссарии есть запись, касающаяся масок внимания, которая объясняет их назначение и использование. Вы передаете эту маску внимания модели при вызове ее метода forward.

...