Как устроено содержимое кортежа hidden_states в BertModel в библиотеке трансформеров - PullRequest
1 голос
/ 15 апреля 2020
model = BertModel.from_pretrained('bert-base-uncased', config=BertConfig.from_pretrained('bert-base-uncased',output_hidden_states=True))
outputs = model(input_ids) 
hidden_states = outputs[2]

hidden_states - кортеж из 13 torch.FloatTensors. Каждый тензор имеет размер: (batch_size, sequence_length, hidden_size). Согласно документации, 13 тензоров являются скрытыми состояниями встраивания и 12 уровней кодировщика.

Мой вопрос:

Является ли hidden_states[0] слоем внедрения, тогда как hidden_states[12] является 12-м слоем кодера, или

Есть hidden_states[0] слоем внедрения, в то время как hidden_states[12] является 1-й уровень кодировщика или

является hidden_states[0] 12-м уровнем кодера, в то время как hidden_states[12] является уровнем внедрения, или

является hidden_states[0] 1-м уровнем кодера, тогда как hidden_states[12] является уровнем внедрения

Я не нашел, что это было четко указано в другом месте.

1 Ответ

0 голосов
/ 16 апреля 2020

Глядя на исходный код для BertModel, можно сделать вывод, что hidden_states [0] содержит выходные данные начального слоя внедрения, а остальные элементы в кортежах содержат скрытые состояния в увеличение порядка каждого слоя. Проще говоря, hidden_states [1] содержит выходные данные первого уровня BERT, а hidden_states [12] содержит последний, т. Е. 12-й уровень.

...