GPT2的应用和实现


前言

用了新的数据集进行训练:百万级别的文本。同时模型规模也变大很多,参数量变为15亿(BERT_LARGE参数量3.4亿)。规模变大这么多的情况下,作者发现和BERT相比优势不大,所以选择了另一个观点作为切入点——Zero-shot(简单来说就是,训练好一个模型,在任何一个场景都能直接使用,泛化性很好)。

GPT-2的架构非常非常大,参数量也非常多。非常神奇的事情发生了,GPT-2在完全没有训练数据的情况下,做到reading comprehension、summarization、translation这些任务!BERT是需要数据训练才能做到。


一、GPT-2是什么?

论文:Language Models are Unsupervised Multitask Learners全程就在对比各个任务上GPT-2与各种模型的效果。

具体而言,区别包括:

1.GPT-2去掉了微调层:GPT-2不再针对不同的下游任务进行微调,模型会自动识别出来需要做什么任务,这里就证明了GPT-2拥有更强的泛化能力。

2.数据集的增加:GPT-2的数据集包含了大小为40g的800万个网页。

3.参数的增加:通过论文可以看到,GPT-2将transformer的层数增加到了48层,hidden layer的维度增加到了1600,这样参数量就到达了15亿。

4.对transformer的调整:将layer normalization放到了每个sub-block前,同时在最后一个self-attention之后增加了一个layer-normalzation,论文中没有仔细讲这样改动的原因,不过我们可以看出来这并不是对网络结构的很大的创新。

总结而言,GPT-2在GPT-1的基础上创新不大,只不过规模要大很多,所以效果也好很多。

那么怎么实现一个简单的GPT-2呢?

 

二、GPT2LMHeadModel和GPT2Tokenizer代码分析

我们经常看见下面代码

from transformers import GPT2LMHeadModel, GPT2Tokenizer

那么GPT2Tokenizer, GPT2LMHeadModel是干什么的?

不怕复杂的大佬可以看看这篇https://www.cnblogs.com/phyger/p/14188608.html

此外还有生成文本的链接使用预训练模型自动续写文本的四种方法 - 哔哩哔哩

合理推测一下

GPT2Tokenizer一般在代码里面,以下面情况出现:

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")

而GPT2LMHeadModel一般在代码里面,以下面情况出现:

model = GPT2LMHeadModel.from_pretrained('gpt2')

这很明显GPT2Tokenizer是编码器,GPT2LMHeadModel是加载训练好的模型。

三、GPT2代码

代码,来自:【Pytorch神经网络实战案例】34 使用GPT-2模型实现句子补全功能(手动加载)_LiBiGo的博客-CSDN博客_gpt pytorch实现

import torch
from transformers import GPT2Tokenizer, GPT2LMHeadModel

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

indexed_tokens = tokenizer.encode("How do you")
print("输入语句为:", tokenizer.decode(indexed_tokens))
tokens_tensor = torch.tensor([indexed_tokens])  # 将输入语句转换为张量

# 将模型设置为评估模式
model.eval()
DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
tokens_tensor = tokens_tensor.to(DEVICE)
model.to(DEVICE)

# 预测所有标记
with torch.no_grad():
    outputs = model(tokens_tensor)
    predictions = outputs[0]

# 得到预测的下一词
predicted_index = torch.argmax(predictions[0, -1, :]).item()
predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])
print("输出语句为:", predicted_text)  # GPT-2模型没有为输入文本添加特殊词。

安装了pytorch和transformers ,可以直接运行

总结

这里使用的GPT2需要加载别人训练好的模型,且只能针对英文模型,中文模型需要自己重新训练。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值