Huggingface--Quick tour

news/2024/12/2 15:46:49/

Quick tour

  • 下载所有相关的库
  • AutoClass
  • AutoTokenizer
  • AutoModel
  • Save a model
  • 自定义模型构建
    • AutoConfig
    • AutoModel
    • Trainer--Pytorch优化的训练循环
  • 微调教程

学习教程来自 Huggingface官网,此学习文档为个人笔记,主要学习pytorch框架的相关使用方法。

下载所有相关的库

! pip install transformers datasets

AutoClass

AutoTokenizer

一个tokenizer负责将文本处理成数字数组作为模型的输入。最重要的事情是需要实例化一个与模型名字相同的tokenizer,确保使用与模型预训练相同的tokenization规则。下面是使用AtuoTokenizer加载tokenizer的示例:

form transformers import AutoTokenizer
model_name = 'nlptown/bert-base-multilingual-uncased-sentiment'
tokenizer = AutoTokenizer.from_pretrained(model_name)

将自己的文本输入到tokenizer:

encoding = tokenizer("We are very happy to show you the 🤗 Transformers library.")
print(encoding)

{‘input_ids’: [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102],
‘token_type_ids’: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
‘attention_mask’: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

tokenizer返回的字典包括:

  • input_ids: tokens的数字表示
  • attention_mask: 表示应关注哪些tokens

同时,tokenizer还可以接受一个list,填充并截断(padding and truncate)文本以返回具有统一长度的批次:

pt_batch = tokenizer(["We are very happy to show you the 🤗 Transformers library.", "We hope you don't hate it."],padding = True,truncation = True,max_length = 512,return_tensors='pt',)

AutoModel

Transformers提供一个简单且统一的方式来加载预训练模型。这意味着可以像加载_AutoTokenizer_一样加载_AutoModel_。唯一不同的是需要为任务选择正确的_AutoModel_。如对于文本分类任务,可以加载_AutoModelForSequenceClassification_:

from transformers import AutoModelForSequenceClassificationmodel_name = 'nlptown/bert-base-multilingual-uncased-sentiment'
model = AutoModelForSequenceClassification.from_pretrained(model_name)

有关AutoModel支持的任务,请参阅任务汇总。
下面将预处理的输入批次直接输入到模型,只需要添加**解包字典。

pt_outputs = pt_model(**pt_batch)

模型在logits属性中输出最终激活。将softmax函数应用于logits以检索概率:

from torch import nn
pt_predictions = nn.functional.softmax(pt_outputs.logits, dim=-1)
print(pt_predictions)

tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725],
[0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fn=)

[说明]所有Transformers模型输出最终激活函数(如softmax)之前的tensors,因为最终激活函数通常与loss融合。模型的输出是特殊的数据类,因此它们的属性在IDE中自动完成。模型输出行为类似一个元组或一个字典(可以用整数、切片或字符串索引),这种情况下None属性将被忽略。

Save a model

一旦对模型进行了微调,可以使用PreTrainedModel.save_pretrained()将模型和tokenizer一起保存:

pt_save_directory = './pt_save_pretrained'
tokenizer.save_pretrained(pt_save_directory)
pt_model.save_pretrained(pt_save_directory)

当准备再次使用该模型时,使用PreTrainedModel.from_pretrained():

pt_model = AutoModelForSequenceClassification.from_pretrained('./pt_save_pretrained')

一个特别cool的transformers功能是保存一个模型,并重新加载它为Pytorch或Tensorflow模型。from_pt或from_tf参数能够将模型从一个框架转为另一个:

from transformers import AutoModel
tokenizer = AutoTokenizer.form_pretrained(tf_save_directory)
pt_model = AutoModelForSequenceClassification.from_pretrained(tf_save_directory, from_tf=True)

自定义模型构建

你可以修改模型的配置类(configuration class)来改变模型的构建方式。Configuration指定模型的属性,如隐藏层数或注意力头数。当你从自定义配置类初始化模型时,你可以从头开始。模型属性是随机初始化的,你需要训练模型,然后才能使用它得到有意义的结果。

AutoConfig

从导入AutoConfig开始,然后加载你想修改的预训练模型。在AutoConfig.from_pretrained()中,你可以具体说明你想要修改的属性,如注意力头数:

from transformers import AutoConfig
my_config = AutoConfig.from_pretrained('distilbert-base-uncased', n_heads=12)

AutoModel

使用AutoModel.from_config()从自定义配置创建模型:

from transformers import AutoModel
my_model = AutoModel.from_config(my_config)

Trainer–Pytorch优化的训练循环

所有的模型都是标准的torch.nn.Module,因此你可以在任何典型的训练循环中使用它们。同时你可以写自己的训练循环,Transformers为Pytorch提供了Trainer类,它包含基本的训练循环并为分布式训练、混合精度等功能添加了额外的功能。
依赖于自己的任务,通常将以下参数传递给Trainer:

  1. 一个PreTrainedModel或一个torch.nn.Module
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained('distilbert-base-uncased')

2.TrainingArguments包含你能改变的模型超参数,如用于训练的学习率、批次大小、epoch数。如果没有具体说明任何训练参数,将使用默认值:

from transformers import TrainingArguments
training_args = TrainingArguments(output_dir = 'path/to/save/folder',learning_rate = 2e-5,per_device_train_batch_size = 8,per_device_eval_batch_size = 8,num_train_epochs = 2,)
  1. 一个预处理类,如tokenizer, image processor, feature extractor, or processor:
from transformers import AutoTokenzier
tokenizer = AutoTokenizer.from_pretrained('distilbert-base-uncased')

4.加载数据集:

from dataset import load_dataset
dataset = load_dataset('rotten_tomatoes')  # doctest: +IGNORE_RESULT
  1. 创建一个函数来tokenize数据集:
def tokenize_dataset(dataset):return tokenizer(dataset['text'])

然后利用map将其应用到整个数据集:

dataset = dataset.map(tokenize_dataset, batched=True)

6.利用DataCollatorWithPadding从数据集中创建一个批次示例:

from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)

在Trainer中聚集所有这些类:

from transformers import Trainer
trainer = Trainer(model = model,args = training_args,train_dataset = dataset['train'],eval_dataset = dataset['test'],tokenizer = tokenizer,data_collator = data_collator,) #doctest: SKIP

当你准备完毕后,调用train()来开始训练:

trainer.train()

您可以通过在Trainer中对方法进行子类化来自定义训练循环行为。这允许您自定义丢失函数、优化器和调度程序等功能。查看Trainer参考资料,可以对其方法进行子类化。
另一种自定义训练循环的方法是使用回调(Callbacks)。您可以使用回调与其他库集成,并检查培训循环以报告进度或提前停止培训。回调不会修改训练循环本身中的任何内容。要自定义类似损失函数的东西,您需要将Trainer子类化。

微调教程

如果找不到适合自己用例的模型,可以用自己的数据微调一个模型(待填坑)。


http://www.ppmy.cn/news/165182.html

相关文章

I.MX6ULL_Linux_驱动篇(36) GPIO输入驱动

在前面我们都是使用的 GPIO 输出功能,还没有用过 GPIO 输入功能,本章我们就来学习一下在 Linux 下编写 GPIO 输入驱动程序。我们使用一个 GPIO 加输入驱动程序,同时利用原子操作来对按键值进行保护。 按键驱动和 LED 驱动原理上来讲基本都是…

玩转服务器之应用篇:从零开始构建小型高可用环境

高可用环境介绍 搭建高可用环境,可以消除单点故障的影响,使系统在出现故障时自动地切换到其它节点,保障系统的平稳运行,提高系统的可靠性和可用性,同时保证数据的安全性,高可用环境已经是现代企业应用的标…

戴尔灵越15 Plus,到底值不值得入手?

有一说一,笔记本和台式机的区别还是挺大的,但是为了外出办公方便,很多人不得已都会买一台轻薄本备用。但最近戴尔灵越15 Plus确实打破了我对传统轻薄本的认知。 看到这台笔记本的第一眼,还是属于平平无奇的,但仔细观…

戴尔笔记本关闭Fn

戴尔笔记本有的会默认打开Fn,如果想关闭,网上很多说BIOS里改设置,其实按下FnEsc就可以了。

如何选性价比高的笔记本电脑,戴尔灵越16 Plus怎么样?

一般性价比高的笔记本电脑都离不开几个特征,续航、耐用是最主要的,其次就是比价格比外观了,戴尔灵越16 Plus颜值算是轻薄本中比较出众的,性能也没有令人失望。 对我而言,戴尔灵越16 Plus几乎是第一眼看到就会喜欢上的…

戴尔笔记本重装系统

之前使用PE把电脑重新分区准备重装系统,在安装完成之后怎么都进不去,具体表现是在开机之后显示戴尔logo然后下面一直转圈圈。在试过重新分区设置分区格式、启动引导修复、更换系统镜像等各种办法之后还是没用,后来朋友说售后装系统免费&#…

戴尔Inspiron 3576笔记本安装win10的步骤

副标题:戴尔Inspiron 3576笔记本从U盘启动的设置 今天,同事的笔记本电脑(型号为戴尔Inspiron 3576)系统无法启动,为其重装操作系统(windows 10),折腾了一下午,终于成功了…

4k笔记本刺眼睛_2020戴尔笔记本怎么选?哪个系列好?附5款高销量戴尔笔记本电脑型号推荐!【超高性价比】...

一、戴尔笔记本电脑有哪些优势 戴尔笔记本的优势就是在于坚固耐用不会轻易就坏掉,在同样的价格当中配置会更为丰富而且能提供免费的保护服务,这些服务在别的品牌当中都是需要另外收费的但戴尔笔记本则不需要收费。 戴尔笔记本的性能出众而且处理内容大量…