Путаница в понимании вывода класса BERTforTokenClassification из библиотеки Transformers - PullRequest
1 голос
/ 25 марта 2020

Это пример, приведенный в документации библиотеки Pytorch для трансформаторов

from transformers import BertTokenizer, BertForTokenClassification
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForTokenClassification.from_pretrained('bert-base-uncased', 
                      output_hidden_states=True, output_attentions=True)

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

loss, scores, hidden_states,attentions = outputs

Здесь hidden_states - это кортеж длины 13, содержащий скрытые состояния модели на выходе каждого слоя плюс начальные вложения выходов. Я хотел бы знать, представляют ли hidden_states [0] или hidden_states [12] конечные векторы скрытого состояния ?

1 Ответ

2 голосов
/ 25 марта 2020

Если вы проверите исходный код, в частности BertEncoder, вы увидите, что возвращаемые состояния инициализируются как пустой кортеж, а затем просто добавляются на каждую итерацию каждого слоя.

Последний слой добавляется как последний элемент после этого l oop, см. здесь , поэтому мы можем смело предположить, что hidden_states[12] - это конечные векторы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...