python - 使用 huggingface 的 pytorch-transformers GPT-2 进行分类任务
问题描述
我想使用 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。),所以我不能像论文所说的那样做一个分类任务只是在尾部添加一个全连接层。我在谷歌上搜索,很少提到 GPT-2 分类任务。我不确定什么是正确的。我应该在全连接层或其他东西之前做扁平化/最大池化/平均池化吗?
解决方案
“所以我不能像论文所说的那样做分类任务,只是在尾部添加一个全连接层。” -这是你问题的答案。
通常,像 BERT 和 Roberta 这样的转换器具有双向自注意力,并且它们具有[CLS]令牌,我们将在其中输入分类器。由于 GPT-2 是左右排列的,因此您需要输入嵌入序列的最终标记。
PS - 你能把链接放在论文上吗?
推荐阅读
- reactjs - React.js:为什么这个事件会在调用之前运行?
- javascript - 有没有办法插入
进入 - css - 如何在编译时替换 scss 文件中的选择器
- delphi - 如何让 Chilkat IMAP ListMailBoxes 报告可用邮箱名称?
- angular - Firebase SSR:延迟加载的路由不起作用
- java - Spring Integration - 停止入站适配器 - 观察到异常
- pgadmin - 当焦点在查询编辑器之外时按退格键后在 pgAdmin 中丢失查询
- javascript - 如何在打字稿中获取内部数组值
- python - 在 Pyspark 中查找字符串中子字符串的位置
- prestashop - 504 网关在更新订单状态 prestashop 时超时