【自然语言处理】PyTorch-Transformers预训练模型库的简单了解

本文主要是介绍【自然语言处理】PyTorch-Transformers预训练模型库的简单了解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、说明
  • 二、什么是PyTorch-Transformers
  • 三、安装PyTorch-Transformers
    • 3.1 命令:`pip install pytorch-transformers` 安装
  • 四、简单测试
    • 4.1 背景介绍
    • 4.2 案例测试一

前言

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


分割线走一波

一、说明

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:jjkdatetime:2019/5/2coding:utf-8project name:Pycharm_workstationProgram function:
"""
import torch# 导入必要的库
from pytorch_transformers import GPT2Tokenizer, GPT2LMHeadModeltokenizer = 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

这篇关于【自然语言处理】PyTorch-Transformers预训练模型库的简单了解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422367

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

uva 10387 Billiard(简单几何)

题意是一个球从矩形的中点出发,告诉你小球与矩形两条边的碰撞次数与小球回到原点的时间,求小球出发时的角度和小球的速度。 简单的几何问题,小球每与竖边碰撞一次,向右扩展一个相同的矩形;每与横边碰撞一次,向上扩展一个相同的矩形。 可以发现,扩展矩形的路径和在当前矩形中的每一段路径相同,当小球回到出发点时,一条直线的路径刚好经过最后一个扩展矩形的中心点。 最后扩展的路径和横边竖边恰好组成一个直

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 10130 简单背包

题意: 背包和 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp