使用拥抱面的pytorch-变压器GPT-2进行分类任务

时间:2019-07-29 06:16:27

标签: python nlp pytorch transfer-learning language-model

我想使用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的输出是nxmx 768,其中n是批处理大小,m是序列中令牌的数量(例如,我可以填充/截断到128。),所以我不能像论文说,对于分类任务,只需在尾部添加一个完全连接的层。我在Google上搜索时,很少提到GPT-2分类任务。 我不确定什么是正确的。我应该在完全连接的层或其他层之前进行扁平化/最大池化/平均池化吗?

2 个答案:

答案 0 :(得分:0)

”,所以我不能像论文中提到的那样执行分类任务,只需在尾部添加一个完全连接的层即可。” -这是您问题的答案

通常,像BERT和Roberta这样的变压器具有双向自注意力,并且它们具有 [CLS] 令牌,我们可以将其引入分类器中。由于GPT-2是从左到右的,因此您需要提供嵌入序列的最终令牌。

P.S-您可以将链接放置到论文上吗?

答案 1 :(得分:-1)

如果您使用GPT-2建立了用于文本分类的模型,请务必共享。