安装开发环境

除了安装基本的python安装环境外,在Anaconda中安装datasetstransformers包。或者在Jupyter Notebook中直接运行

!pip install datasets
!pip install transformers

从这两个包中导入一些必要的包

from datasets import load_dataset
from transformers import AutoTokenizer, AutoModel,Trainer, TrainingArguments,AutoModelForSequenceClassification

读取数据和预训练模型,这里加载烂番茄(rotten_tomatoes)的评论包, 以及微软的BERT模型蒸馏microsoft/xtremedistil-l6-h256-uncased

烂番茄的评论包是个二分类数据库,因此加载Model的时候设置num_labels=2, 设置hidden_dropout_prob 防止过拟合。

dataset = load_dataset("rotten_tomatoes")
tokenizer = AutoTokenizer.from_pretrained("microsoft/xtremedistil-l6-h256-uncased")
model = AutoModelForSequenceClassification.from_pretrained("microsoft/xtremedistil-l6-h256-uncased",num_labels=2,hidden_dropout_prob=2)

需要注意的是, 在model card中官方给定的加载模型代码是:

tokenizer = AutoTokenizer.from_pretrained("microsoft/xtremedistil-l6-h256-uncased")model = AutoModel.from_pretrained("microsoft/xtremedistil-l6-h256-uncased")

但在个人使用过程中,使用AutoModel会在trainer.train() 时出现 * TypeError: forward() got an unexpected keyword argument ‘label’ in main*的错误。 目前查到的原因是由于Automodel的forward中不包含label参数,但计算loss时需要label。Stackflow上有帖子1, Post2 解决方法。但都解决不了我的问题,最后我参考了在Colab上的一个简单的TrainEmotion例子, 解决方法是将AutoModel替换改为使用AutoModelForSequenceClassification

预处理数据

预处理部分需要做机件事:

  • 给输入句子分词tokenize
  • 建立字典, 并向量化
  • 填充padding, 和裁剪truncation
  • 分成Train,valid,test集合
  • 准备 评估模型性能的metric

由于我们使用预训练的tokenizer,因此预处理部分的代码可以用简单的几行代码实现

def tokenize_fc(dataset):return tokenizer(dataset['text'], max_length=256, padding='max_length', truncation=True)tokenized_datasets=dataset.map(tokenize_fc,batched=True)
tokenized_datasets=tokenized_datasets.remove_columns(['text'])
tokenized_datasets.set_format('torch')SEED=123
small_trainset=tokenized_datasets['train'].shuffle(seed=SEED).select(range(2000))
small_validset=tokenized_datasets['validation'].shuffle(seed=SEED).select(range(200))
small_testset=tokenized_datasets['test'].shuffle(seed=SEED)

处理完后的数据集tokenized_datasets的输出如下:

加载matric:

import numpy as np
from datasets import load_metricmetric = load_metric("accuracy")
def compute_metrics(eval_pred):logits, labels = eval_predpredictions = np.argmax(logits, axis=-1)return metric.compute(predictions=predictions, references=labels)

开始训练模型

首先将model设置为运行在GPU

device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)

需要注意的是,通常来说在训练模型时,除了要把model设置为运行在GPU,也要把输入数据设置为运行在GPU,但是HuggingFace的模型内置自动将batch设置为运行在GPU,如果GPU可用。所以不需要重复设置。我自身也验证过:即使没有手动设置输入数据运行在GPU,模型在GPU和CPU的训练时间远远不同

By default, the Trainer will use the GPU if it is available. It will automatically put the model on te GPU as well as each batch as soon as that’s necessary. So just remove all .to() calls that you made manually. –BramVanroy

Hugging face 官方推荐使用Trainer()来规范统一训练和测试模型。这里我使用Trainer()来训练模型,之后可能再使用自定义的Trainer来训练模型


training_args = TrainingArguments(per_device_train_batch_size=8,per_device_eval_batch_size=8,num_train_epochs=20,learning_rate=2e-05,weight_decay=0.001,evaluation_strategy="epoch")trainer = Trainer(model=model,                         # the instantiated 												

Hugging face 的入门使用相关推荐

  1. Hugging Face 的 Transformers 库快速入门 (一)开箱即用的 pipelines

    注:本系列教程仅供学习使用, 由原作者授权, 均转载自小昇的博客 . 文章目录 前言 开箱即用的 pipelines 情感分析 零训练样本分类 文本生成 遮盖词填充 命名实体识别 自动问答 自动摘要 ...

  2. Hugging Face官方NLP课程来了!Transformers库维护者之一授课,完全免费

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自:机器之心 编辑:杜伟 Hugging Face NLP 课程开 ...

  3. Hugging Face官方课程来了!Transformers库维护者之一授课,完全免费

    作者 | 杜伟 来源 | 机器之心 Hugging Face NLP 课程开课了,所有课程完全免费. NLP 领域的小伙伴应该都非常熟悉大名鼎鼎的 Hugging Face,这家专注于解决各种 NLP ...

  4. 2023年的深度学习入门指南(14) - 不能只关注模型代码

    2023年的深度学习入门指南(14) - 不能只关注模型代码 最近,有一张大模型的发展树非常流行: 这个图是相当不错的,对于加深对于Transformer模型编码器.解码器作用的理解,模型的开源和闭源 ...

  5. ChatGPT 从入门到精通

    ChatGPT 从入门到精通 适用人群: 互联网一线对ChatGPT感兴趣的划时代先驱者们 内容来源: 内容均出自网络 创建时间: 2023年2月9日 最近更新: 2023年3月29日(每天中午十二点 ...

  6. 2023年的深度学习入门指南(1) - 从chatgpt入手

    2023年的深度学习入门指南(1) - 从chatgpt入手 2012年,加拿大多伦多大学的Hinton教授带领他的两个学生Alex和Ilya一起用AlexNet撞开了深度学习的大门,从此人类走入了深 ...

  7. StableDiffusion入门教程

    目录 介绍 模型的后缀 ckpt模型: safetensors模型 文件夹 VAE 模型在哪下载 Hugging face:<https://huggingface.co/models> ...

  8. 2023年的深度学习入门指南(5) - HuggingFace Transformers库

    2023年的深度学习入门指南(5) - HuggingFace Transformers库 这一节我们来学习下预训练模型的封装库,Hugging Face的Transformers库的使用.Huggi ...

  9. Stable Diffusion系列课程上:安装、提示词入门、常用模型(checkpoint、embedding、LORA)、放大算法、局部重绘、常用插件

    文章目录 一.Stable Diffusion简介与安装 二.文生图(提示词解析) 2.1 提示词入门 2.2 权重 2.3 负面提示词( Negative prompt) 2.4 出图参数设置 2. ...

最新文章

  1. 题目1154:Jungle Roads
  2. 密码学基础知识(一)信息安全与密码学
  3. html手机pc不同页面,PC端和手机端如何同时生成静态页
  4. python之函数名称空间,作用域,嵌套函数
  5. NDK avi播放器
  6. thinkphp自定义标签库
  7. 投资理财要趁早,基金风险是最小!
  8. App Engine中的Google Services身份验证,第2部分
  9. php 获取css值,如何通过JS获取CSS属性值
  10. erlang的简单模拟半包的产生
  11. 46张PPT彻底弄懂JVM、GC算法和性能调优!
  12. 从0开始学习 GitHub 系列之「加入 GitHub」
  13. 学习JSON的神级网站www.bejson.com
  14. 华为hcna认证有哪些优势?华为hcna认证好考吗?
  15. 代理记账和专职会计哪个更适合企业?
  16. 上标和下标复制大全(含0~9、字母、特殊字符)
  17. 目标优化之帕累托最优
  18. JavaScript经典效果集[蓝色理想]
  19. 武汉大学研究生慕课《学术道德与学术规范》——考试题目总结
  20. 构造函数中慎用memset

热门文章

  1. OFD文件怎么转换成图片?这两种方法能够快速转换
  2. 切换shift和CTRL键位
  3. 多个三元表达式的写法
  4. dss数字签名技术java_DSS数字签名标准
  5. 怎么制作多格视频?手机就能搞定
  6. final关键字能修饰构造方法么?
  7. STM32F4的DMA
  8. 一体化模拟器部署以及IOS操作基础
  9. iOS之 2020年最新苹果移动设备屏幕的大小和系统
  10. crf graph matlab_如何评价 Vicarious 在 Science 上提出基于概率图模型(PGM)的 RCN 模型?...