GPT2Model и GPT2Model с головкой LM имели разные размеры веса внимания - PullRequest
0 голосов
/ 10 марта 2020
>>> from transformers import GPT2Tokenizer, GPT2Model
>>> model = GPT2Model.from_pretrained("gpt2",output_attentions=True)
>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> text = "a,b,c"
>>> inputs = tokenizer.encode_plus(text,return_tensors='pt',add_special_tokens=True)
>>> input_ids = inputs['input_ids']
>>> attention = model(input_ids)[-1]
>>> attention[0].shape
torch.Size([1, 12, 5, 5])
>>> import transformers
>>> m2 = transformers.AutoModelWithLMHead.from_pretrained("gpt2")
>>> at2 = m2(input_ids)[-1]
>>> at2[0].shape
torch.Size([2, 1, 12, 5, 64])

Для справки: attention - это кортеж, а attention[0] - для его первого слоя.

Я могу отобразить все, кроме 2 в torch.Size([2, 1, 12, 5, 64]) против torch.Size([1, 12, 5, 5]). Что это означает 2?

Я получил эти определения от bertviz github repo:

            attention: list of ``torch.FloatTensor``(one for each layer) of shape
                ``(batch_size(must be 1), num_heads, sequence_length, sequence_length)``

1 Ответ

0 голосов
/ 10 марта 2020
>>> m3 = m2.from_pretrained("gpt2",output_attentions=True)
>>> m3(inputs)[-1][0].shape
torch.Size([1, 12, 5, 5])

Странно, что transformers.AutoModelWithLMHead.from_pretrained не позволяет output_attentions быть одним из его args.

Также редактирование конфигурации во время выполнения не работает (m2.config.output_attentions = True не будет работать. )

...