前言

最近心事重重,寝不能安,夜也不能寐滴,外加慢性肠胃炎也开始作妖,于是乎早早醒来,恰逢老师微信推送,仔细一看,喔噢,这不是我早期关注过的嘛,仔细一看,人家昨天就推送了,看来还是自己的问题,等到老师推送才能重视,反思!!!


分割线走一波

一、说明

1、windows系统
2、conda 4.6.14
3、python3.5

二、什么是PyTorch-Transformers

简而言之就是一个目前用于自然语言处理(NLP)的最先进的预训练模型库。该库目前包含了如下列所示模型的PyTorch实现、预训练模型权重、使用脚本和下列模型的转换工具:

1、 BERT(来自 Google):作者 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(《BERT:用于语言理解的深度双向 Transformer 的预训练》)
2、GPT (来自 OpenAI):作者 Alec Radford、Karthik Narasimhan、Tim Salimans 和 Ilya Sutskever:Improving Language Understanding by Generative Pre-Training (《通过生成式预训练提高语言理解能力》)
3、GPT-2 (来自 OpenAI):作者Alec Radford、Jeffrey Wu、Rewon Child、David Luan、Dario Amodei 和 Ilya Sutskever: Language Models are Unsupervised Multitask Learners (《语言模型是无监督的多任务学习器》)
4、Transformer-XL (来自 Google/CMU):作者 Zihang Dai、Zhilin Yang、Yiming Yang, Jaime Carbonell、Quoc V. Le、Ruslan Salakhutdinov:Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context (《Transformer-XL:超长上下文关系的注意力语言模型》)
5、XLNet (来自 Google/CMU):作者 Zihang Dai、Zhilin Yang、Yiming Yang、Jaime Carbonell、Quoc V. Le、Ruslan Salakhutdinov:​XLNet: Generalized Autoregressive Pretraining for Language Understanding (《XLNet:用于语言理解的广义自回归预训练》)
6、XLM (来自 Facebook):作者 Guillaume Lample 和 Alexis Conneau:Cross-lingual Language Model Pretraining (《跨语言的语言模型预训练》)

这家伙的开源地址:https://github.com/huggingface/pytorch-transformers#quick-tour
它的老窝:https://huggingface.co/pytorch-transformers/index.html

三、安装PyTorch-Transformers

3.1 命令:pip install pytorch-transformers 安装

通过命令pip install pytorch-transformers来进行安装:
在这里插入图片描述
是不是感觉很简单,哈哈哈要是那就好了,奈何,江湖险恶套路深呀,这年头一条道走到黑那是不可能的,总地让你来个九拐十八弯。
在这里插入图片描述
一个警告:ERROR: Could not find a version that satisfies the requirement torch>=1.0.0 (from pytorch-transformers) (from versions: 0.1.2, 0.1.2.post1, 0.1.2.post2) ERROR: No matching distribution found for torch>=1.0.0 (from pytorch-transformers)
大概意思是:找不到这个对应的版本。
解释一下:

1、如果没有安装过pytorch则应该不会有这样的报错问题
2、既然之前安装过了,那就说明安装的pytorch与我们现在安装Pytorch-Transformers冲突不符合

解决警告错误方案

1、修改已安装的版本
     就是修改setup.py中相关的版本号,这个比较麻烦,鉴于时间问题就不给自己找麻烦了,我们来看第二种方法
2、重新安装
     就是先卸载之前安装的pytorch,重新安装一个0.4.1的版本即可,具体看接下来的操作。

说明:
      PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序。它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速,同时还支持动态神经网络,这一点是现在很多主流框架如TensorFlow都不支持的。PyTorch提供了两个高级功能:
     1、具有强大的GPU加速的张量计算(如Numpy)
     2、包含自动求导系统的深度神经网络

好啦,既然该解释的都解释清楚了,那就行动见真章吧!


老规矩,分割线见证我的帅气!!!
下图是官网给出的安装命令:
在这里插入图片描述
因为是国外的服务器,所以博主先离线下载下来,然后在本地安装。
安装命令:

1、cmd切换到此前下载下来的东东所在的目录下
2、pip install 包名

在这里插入图片描述
看到successfully,就不用多讲了吧,嘿嘿嘿。


现在我们回过头来继续安装PyTorch-Transformers包。
奈何依旧一样的报错,究其原因安装的pytorch的版本是0.4.0的,根据报错要需要大于等于1.1.0的。所以,卸载之前安装的pytorch,继续来安装一个1.1.0版本的吧。
卸载pytorch0.4.0在这里插入图片描述
安装1.1.0
在这里插入图片描述
注:获取pytorch链接:

  1. http://download.pytorch.org/whl/cu90/torch-1.1.0-cp36-cp36m-win_amd64.whl
  2. http://download.pytorch.org/whl/cu90/torch-0.4.0-cp36-cp36m-win_amd64.whl

再次通过命令:pip install pytorch-transformers安装
在这里插入图片描述
好嘛,看到最后,算是安装成功了。

四、简单测试

4.1 背景介绍

1、2019年2月,OpenAI发布了一种新的基于transformer语言模型GPT-2。GPT-2是一种于基于transformer的生成语言模型,它基于来自互联网上的40GB的精选文本进行训练。
2、什么是语言模型
简单说来,语言模型的作用就是根据已有句子的一部分,来预测下一个单词会是什么。最著名的语言模型你一定见过,就是我们手机上的输入法,它可以根据当前输入的内容智能推荐下一个词。
从这个角度出发:可以把GPT-2理解为相当于输入法的单词联想功能,但它比你手机上安装的此类应用大得多,也更加复杂。OpenAI 的研究人员使用了一个从网络上爬取的 40GB 超大数据集「WebText」训练 GPT-2,该数据集也是他们的工作成果的一部分。
3、近期的NLP方向
ELMO、GPT、BERT、Transformer-XL、GPT-2,各种预训练语言模型层出不穷,这些模型在各种NLP任务上一次又一次刷新上线,令人心驰神往。 到底该怎么将这些顶尖工具用到我的模型里呢?答案是Hugging Face的大神们开源的pytorch-pretrained-BERT。
Github 地址:
https://github.com/huggingface/pytorch-pretrained-BERT
3、说明

关于GPT-2更详细的内部细节的了解可参考如下链接:
http://www.sohu.com/a/336262203_129720
https://cloud.tencent.com/developer/article/1494634

4.2 案例测试一

在这里插入图片描述

"""
 author:jjk
 datetime:2019/5/2
 coding:utf-8
 project name:Pycharm_workstation
 Program function:
"""
import torch# 导入必要的库
from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModel

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')# 加载预训练模型tokenizer (vocabulary)

text = "What is the fastest car in the"
indexed_tokens = tokenizer.encode(text)# 对文本输入进行编码
tokens_tensor = torch.tensor([indexed_tokens])# 在PyTorch张量中转换indexed_tokens

# 加载预训练模型 (weights)
model = GPT2LMHeadModel.from_pretrained('gpt2')


model.eval()#将模型设置为evaluation模式,关闭DropOut模块

# 如果你有GPU,把所有东西都放在cuda上
tokens_tensor = tokens_tensor.to('cuda')
model.to('cuda')

# 预测所有的tokens
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)

源码很直白,直接将文本标记为数字序列并将其缩影,然后传递给GPT2LMHeadModel模型。
在这里插入图片描述
不得不说,对于这么大的模型进行来训练,是需要硬件的要求确实很高。
具体的可以参考此链接:https://mp.weixin.qq.com/s/SNMlBd1RuenINmXwO3SVwQ

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐