Я хочу использовать GPT-2 для создания модели текстового классификатора. Я не совсем уверен, какую голову мне добавить после того, как я извлек функции через GPT-2. например, у меня есть последовательность.
import pytorch_transformers as pt
import torch
text=test.iloc[1,1]
text
'If a fire wanted fanning, it could readily be fanned with a newspaper, and as the government grew weaker, I have no doubt that leather and iron acquired durability in proportion, for, in a very short time, there was not a pair of bellows in all Rotterdam that ever stood in need of a stitch or required the assistance of a hammer.'
len(text)
74
tokenizer = pt.GPT2Tokenizer.from_pretrained('gpt2')
model = pt.GPT2Model.from_pretrained('gpt2')
zz = tokenizer.tokenize(text)
z1=torch.tensor([tokenizer.convert_tokens_to_ids(zz)])
z1
tensor([[ 1532, 257, 2046, 2227, 4336, 768, 11, 340, 714, 14704,
307, 277, 3577, 351, 257, 7533, 11, 290, 355, 262,
1230, 6348, 17642, 11, 314, 423, 645, 4719, 326, 11620,
290, 6953, 9477, 26578, 287, 9823, 11, 329, 11, 287,
257, 845, 1790, 640, 11, 612, 373, 407, 257, 5166,
286, 8966, 1666, 287, 477, 18481, 353, 11043, 326, 1683,
6204, 287, 761, 286, 257, 24695, 393, 2672, 262, 6829,
286, 257, 15554, 13]])
output,hidden=model(z1)
ouput.shape
torch.Size([1, 74, 768])
вывод GPT2 для меня n x m x 768, где n - размер пакета, m - количество токенов в последовательности (например, я могу дополнить/обрезать до 128), поэтому я не могу делать то, что указано в документе для задача классификации просто добавляет полностью связанный слой в хвост. И я искал в Google, упоминается несколько задач классификации GPT-2. Я не уверен, что правильно. Должен ли я выполнять flatten/max pooling/average pooling перед полносвязным слоем или что-то еще?
Вы когда-нибудь разбирались с этой проблемой? Вы все еще делаете средний пул?
«Поэтому я не могу сделать то, что, как сказано в документе, для задачи классификации, просто добавить полностью связанный слой в хвост». - Это ответ на ваш вопрос.
Обычно трансформеры, такие как BERT и Roberta, обладают двунаправленным вниманием к себе, и у них есть токен [CLS], с помощью которого мы подаем данные классификатору. Поскольку GPT-2 лево-правый, вам нужно передать последний токен последовательности встраивания.
P.S. Можно ссылку на статью.
Если вы построили модель с использованием GPT-2 для классификации текста, поделитесь ею.
Добро пожаловать в СО! Пожалуйста, не оставляйте комментарии в качестве ответов. Вы можете написать свой запрос в разделе комментариев.
Пробовал средний пул, результат неплохой. Logloss при проверке немного меньше, чем у модели BERT, но я не уверен, что поступаю правильно.