赞
踩
用了新的数据集进行训练:百万级别的文本。同时模型规模也变大很多,参数量变为15亿(BERT_LARGE参数量3.4亿)。规模变大这么多的情况下,作者发现和BERT相比优势不大,所以选择了另一个观点作为切入点——Zero-shot(简单来说就是,训练好一个模型,在任何一个场景都能直接使用,泛化性很好)。
GPT-2的架构非常非常大,参数量也非常多。非常神奇的事情发生了,GPT-2在完全没有训练数据的情况下,做到reading comprehension、summarization、translation这些任务!BERT是需要数据训练才能做到。
论文: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呢?
我们经常看见下面代码
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是加载训练好的模型。
代码,来自:【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需要加载别人训练好的模型,且只能针对英文模型,中文模型需要自己重新训练。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。