当前位置:   article > 正文

GPT2的应用和实现_gpt2tokenizerfast

gpt2tokenizerfast


前言

用了新的数据集进行训练:百万级别的文本。同时模型规模也变大很多,参数量变为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实现

  1. import torch
  2. from transformers import GPT2Tokenizer, GPT2LMHeadModel
  3. tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
  4. model = GPT2LMHeadModel.from_pretrained('gpt2')
  5. indexed_tokens = tokenizer.encode("How do you")
  6. print("输入语句为:", tokenizer.decode(indexed_tokens))
  7. tokens_tensor = torch.tensor([indexed_tokens]) # 将输入语句转换为张量
  8. # 将模型设置为评估模式
  9. model.eval()
  10. DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
  11. tokens_tensor = tokens_tensor.to(DEVICE)
  12. model.to(DEVICE)
  13. # 预测所有标记
  14. with torch.no_grad():
  15. outputs = model(tokens_tensor)
  16. predictions = outputs[0]
  17. # 得到预测的下一词
  18. predicted_index = torch.argmax(predictions[0, -1, :]).item()
  19. predicted_text = tokenizer.decode(indexed_tokens + [predicted_index])
  20. print("输出语句为:", predicted_text) # GPT-2模型没有为输入文本添加特殊词。

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

总结

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

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/729400
推荐阅读
相关标签
  

闽ICP备14008679号