Как BertForSequenceClassification классифицирует вектор CLS?Python

Программы на Python
Anonymous
 Как BertForSequenceClassification классифицирует вектор CLS?

Сообщение Anonymous »

Справочная информация:
В соответствии с этим вопросом при использовании bert для классификации последовательностей модель использует токен «[CLS]», представляющий задачу классификации. Согласно документу:

Первый токен каждой последовательности всегда является специальным классификационным
токеном ([CLS]). Окончательное скрытое состояние, соответствующее этому токену,
используется в качестве совокупного представления последовательности для задач классификации.

Если посмотреть на репозиторий Huggingfaces, то в их BertForSequenceClassification используется метод bertpooler:

Код: Выделить всё

class BertPooler(nn.Module):
def __init__(self, config):
super().__init__()
self.dense = nn.Linear(config.hidden_size, config.hidden_size)
self.activation = nn.Tanh()

def forward(self, hidden_states):
# We "pool" the model by simply taking the hidden state corresponding
# to the first token.
first_token_tensor = hidden_states[:, 0]
pooled_output = self.dense(first_token_tensor)
pooled_output = self.activation(pooled_output)
return pooled_output
Мы видим, что они берут первый токен (CLS) и используют его как представление всего предложения. В частности, они выполняют скрытые_состояния[:, 0], что очень похоже на то, что они берут первый элемент из каждого состояния, а не берут первые токены скрытого состояния?
Мой вопрос:
Как они кодируют информацию из всего предложения в этот токен? Является ли токен CLS обычным токеном, имеющим собственный вектор внедрения, который «изучает» представление уровня предложения? Почему мы не можем просто использовать среднее значение скрытых состояний (выходные данные кодировщика) и использовать это для классификации?
EDIT: Немного подумав об этом: поскольку мы используем скрытое состояние токенов CLS для прогнозирования, обучаются ли встраивания токенов CLS задаче классификации, поскольку именно этот токен используется для классификации (таким образом, внося основной вклад в ошибку, которая возникает распространяется на его веса?)

Подробнее здесь: https://stackoverflow.com/questions/629 ... cls-vector

Вернуться в «Python»