PyTorch预训练Bert模型的示例


Posted in Python onNovember 17, 2020

本文介绍以下内容:
1. 使用transformers框架做预训练的bert-base模型;
2. 开发平台使用Google的Colab平台,白嫖GPU加速;
3. 使用datasets模块下载IMDB影评数据作为训练数据。

transformers模块简介

transformers框架为Huggingface开源的深度学习框架,支持几乎所有的Transformer架构的预训练模型。使用非常的方便,本文基于此框架,尝试一下预训练模型的使用,简单易用。

本来打算预训练bert-large模型,发现colab上GPU显存不够用,只能使用base版本了。打开colab,并且设置好GPU加速,接下来开始介绍代码。

代码实现

首先安装数据下载模块和transformers包。

pip install datasets
pip install transformers

使用datasets下载IMDB数据,返回DatasetDict类型的数据.返回的数据是文本类型,需要进行编码。下面会使用tokenizer进行编码。

from datasets import load_dataset

imdb = load_dataset('imdb')
print(imdb['train'][:3]) # 打印前3条训练数据

接下来加载tokenizer和模型.从transformers导入AutoModelForSequenceClassification, AutoTokenizer,创建模型和tokenizer。

from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_checkpoint = "bert-base-uncased"

tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(model_checkpoint, num_labels=2)

对原始数据进行编码,并且分批次(batch)

def preprocessing_func(examples):
  return tokenizer(examples['text'], 
           padding=True,
           truncation=True, max_length=300)

batch_size = 16

encoded_data = imdb.map(preprocessing_func, batched=True, batch_size=batch_size)

上面得到编码数据,每个批次设置为16.接下来需要指定训练的参数,训练参数的指定使用transformers给出的接口类TrainingArguments,模型的训练可以使用Trainer。

from transformers import Trainer, TrainingArguments

args = TrainingArguments(
  'out',
  per_device_train_batch_size=batch_size,
  per_device_eval_batch_size=batch_size,
  learning_rate=5e-5,
  evaluation_strategy='epoch',
  num_train_epochs=10,
  load_best_model_at_end=True,
)

trainer = Trainer(
  model,
  args=args,
  train_dataset=encoded_data['train'],
  eval_dataset=encoded_data['test'],
  tokenizer=tokenizer
)

训练模型使用trainer对象的train方法

trainer.train()

PyTorch预训练Bert模型的示例

评估模型使用trainer对象的evaluate方法

trainer.evaluate()

总结

本文介绍了基于transformers框架实现的bert预训练模型,此框架提供了非常友好的接口,可以方便读者尝试各种预训练模型。同时datasets也提供了很多数据集,便于学习NLP的各种问题。加上Google提供的colab环境,数据下载和预训练模型下载都非常快,建议读者自行去炼丹。本文完整的案例下载

以上就是PyTorch预训练Bert模型的示例的详细内容,更多关于PyTorch预训练Bert模型的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
常见的python正则用法实例讲解
Jun 21 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
Python 含参构造函数实例详解
May 25 Python
python读取与写入csv格式文件的示例代码
Dec 16 Python
python对绑定事件的鼠标、按键的判断实例
Jul 17 Python
python支持多线程的爬虫实例
Dec 21 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Python如何使用input函数获取输入
Aug 06 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 Python
pandas中对文本类型数据的处理小结
Nov 01 Python
python 下载文件的多种方法汇总
Nov 17 #Python
python跨文件使用全局变量的实现
Nov 17 #Python
Python中logging日志的四个等级和使用
Nov 17 #Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 #Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 #Python
python调用百度API实现人脸识别
Nov 17 #Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 #Python
You might like
php设计模式  Command(命令模式)
2011/06/17 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
微信支付扫码支付php版
2016/07/22 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
在Linux系统上部署Apache+Python+Django+MySQL环境
2015/12/24 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
python3正则模块re的使用方法详解
2020/02/11 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
行政部工作岗位职责范本
2014/03/05 职场文书
铁路安全事故反思
2014/04/26 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
空气的环保标语
2014/06/12 职场文书
党校学习心得体会范文
2014/09/09 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
离职证明格式样本
2015/06/12 职场文书
MySQL中一条update语句是如何执行的
2022/03/16 MySQL