Третий элемент вывода модели BERT - это кортеж, который состоит из выходных данных слоя внедрения, а также скрытых состояний промежуточных слоев. Из документации :
hidden_states (tuple(tf.Tensor)
, необязательно, возвращается при config.output_hidden_states=True
): кортеж tf.Tensor
(один для вывода вложения + по одному на выход каждого слоя) формы (batch_size, sequence_length, hidden_size)
.
Скрытые состояния модели на выходе каждого слоя плюс начальные выходы вложения.
Для модели bert-base-uncased
config.output_hidden_states
по умолчанию True
. Поэтому, чтобы получить доступ к скрытым состояниям 12 промежуточных слоев, вы можете сделать следующее:
outputs = bert_model(input_ids, attention_mask)
hidden_states = outputs[2][1:]
В кортеже hidden_states
12 элементов, соответствующих всем слоям от начала до последнего и каждому из это массив формы (batch_size, sequence_length, hidden_size)
. Так, например, чтобы получить доступ к скрытому состоянию третьего слоя для пятого токена всех образцов в пакете, вы можете сделать: hidden_states[2][:,4]
.
Обратите внимание, что если загружаемая модель по умолчанию не возвращает скрытые состояния, тогда вы можете загрузить конфигурацию, используя класс BertConfig
и передать аргумент output_hidden_state=True
, например:
config = BertConfig.from_pretrained("name_or_path_of_model",
output_hidden_states=True)
bert_model = TFBertModel.from_pretrained("name_or_path_of_model",
config=config)