В чем смысл второго выхода Берт Хаггингфайда? - PullRequest
1 голос
/ 16 февраля 2020

Используя ванильную конфигурацию базовой модели BERT в реализации huggingface, я получаю кортеж длины 2.

import torch

import transformers
from transformers import AutoModel,AutoTokenizer

bert_name="bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(bert_name)
BERT = AutoModel.from_pretrained(bert_name)

e=tokenizer.encode('I am hoping for the best', add_special_tokens=True)

q=BERT(torch.tensor([e]))

print (len(q)) #Output: 2

Первый элемент - это то, что я ожидаю получить - вложение измерения 768 каждого входа token.

print (e) #Output : [101, 1045, 2572, 5327, 2005, 1996, 2190, 102] 
print (q[0].shape) #Output : torch.Size([1, 8, 768])

Но что является вторым элементом в кортеже?

print (q[1].shape) # torch.Size([1, 768])

Он имеет тот же размер, что и кодировка каждого токена. Но что это?

Может быть, копия токена [CLS], представление для классификации всего закодированного текста?

Давайте проверим.

a= q[0][:,0,:]
b=q[1]

print (torch.eq(a,b)) #Output : Tensor([[False, False, False, .... False]])

Нет!

А как насчет копии встраивания последнего токена (по какой-либо причине)?

c= q[0][:,-1,:]
b=q[1]

print (torch.eq(a,c)) #Output : Tensor([[False, False, False, .... False]])

Итак, тоже не это.

В документации говорится о том, как изменение config может привести к появлению большего числа элементов кортежа (например, скрытых состояний), но я не нашел описания этого «таинственного» элемента кортежа, выводимого конфигурацией по умолчанию.

Любые идеи относительно того, что это такое и каково его использование?

1 Ответ

3 голосов
/ 16 февраля 2020

Выход в этом случае является кортежем (last_hidden_state, pooler_output). Вы можете найти документацию о том, что возврат может быть здесь .

...