tnblog
首页
视频
资源
登录

HugginFace 初探

2946人阅读 2023/10/11 17:44 总访问:3511436 评论:0 收藏:0 手机
分类: .net后台框架

HugginFace 初探

安装环境


python环境是3.6

  1. import sys
  2. sys.version


安装torch,简单起见,避免环境问题,并且计算量不大,使用cpu运行本套代码。
后面章节会介绍使用cuda计算的方法。

  1. %pip install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1 -f https://download.pytorch.org/whl/cpu/torch_stable.html


torch是一个进行深度学习使用的包,可以通过torch搭建深度学习模型,应用于图像分类、语音识别、文本分类等任务。

  1. import torch
  2. import torchvision
  3. import torchaudio
  4. torch.__version__, torchvision.__version__, torchaudio.__version__


Transformers是由Hugging Face公司开发并维护,包含了最多NLP模型,同时也有CV等其他领域模型,支持预训练模型的快速使用和改进,并且模型可以快速在不同的深度学习框架间(Pytorch/Tensorflow/Jax)无缝转移。
通过pip安装transformers。

  1. %pip install transformers==4.18.0
  1. import transformers
  2. transformers.__version__


datasets包它通常用于在机器学习中加载和管理数据集,通过pip安装datasets。

  1. %pip install datasets==2.4.0


TorchText是PyTorch的一个功能包,主要提供文本数据读取、创建迭代器的的功能与语料库、词向量的信息,分别对应了torchtext.datatorchtext.datasetstorchtext.vocab三个子模块。

  1. pip install torchtext==0.11.2

NLP要解决的任务


——处理文本数据,首先对文本数据进行分词操作(分词的方法可能会不同,中文常见的就是分词或者分字)
——分完的词它不还是字符嘛,计算机还不认识,最终我们希望吧这些字符映射成实际的特征(向量)
——输入搞定好了之后,接下来我们要构建模型了(一般都用预训练模型,例如BERT、GPT系列等)
——怎么去完成我们自己的任务呢,基本上就是在预训练模型的基础上进行微调(训练我们自己数据的过程)
(但很费电和gpu)

HugginFace做了什么?


Huggingface这个包就不是就是调用即可,开箱即用的过程。

  1. import warnings
  2. # 处理警告信息
  3. warnings.filterwarnings("ignore")
  4. from transformers import pipeline # 用人家设计好的流程完成一些简单的任务
  5. classifier = pipeline("seatiment-analysis")# 这是一个情感分类器
  6. calssifier([
  7. "I've been waiting for a HugginFace course my whole life.",
  8. "I hate this so much!"
  9. ])

HugginFace基本流程

Tokenizer分词器要做的事


——分词,分字以及特殊字符(起始,终止,间隔,分类等特殊字符可以自己设计的)
——对每一个token映射得到一个ID(每个词都会对应一个唯一的ID)
——还有一些辅助信息也可以得到,比如当前词属于哪个句子(还有一些MASK,表示是否原来的词还是特殊字符)

  1. from transforms import AutoTokenizer #自动判断
  2. # 更具模型所对应的来加载:https://huggingface.co/search/full-text?q=seatiment-analysis
  3. checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"#\
  4. tokenizer = AutoTokenizer.from_pretrained(checkpoint)
  1. raw_inputs = [
  2. "I've been waiting for a this course my whole life",
  3. "I hate this so much!"
  4. ]
  5. inputs = tokenizer(raw_inputs, padding=True,truncation=True,return_tensors="pt")
  6. print(inputs)
参数 描述
padding 当为true时,我们会更具最长的话为一个词的长度,其他的语句不足该长度的为其中的语句填上0.
truncation 截断语句的长度为512
return_tensors 通过不同的值返回不同的张量。


return_tensors 的值为以下几个时:
pt:表示返回PyTorch张量(tensor)。如果你在PyTorch中进行深度学习任务,这是一个常见的选择,因为你可以将tokenizer的输出直接用于PyTorch模型的输入。
tf:表示返回TensorFlow张量(tensor)。如果你在TensorFlow中进行深度学习任务,这是一个常见的选择,因为你可以将tokenizer的输出直接用于TensorFlow模型的输入。
np:表示返回NumPy数组。这对于一些其他机器学习框架或一些数据处理任务可能更方便,因为NumPy是一个常用的数值计算库。
None:如果将return_tensors参数设置为None,则tokenizer将返回一个Python字典,其中包含各种输出,如input_ids、attention_mask等,而不是张量或数组。这是一种更灵活的选项,可以根据需要自行处理。


上面这幅图是输出的结果,我们直接来看第二排,如果按照字符串加上标点符号来看第二个句子有6个词。算上分割符号101102就是八个,其他的按照0来补,后面的attention_mask添加的0表示不会进行带入计算。
下面进行反向测试。

  1. tokenizer.decode([101,1045,1005,2310,2042,3403,2005,1037,2023,2607,2026,2878,2166,1012,102])

模型的加载方法很简单


可以直接指定好名字即可,这里我们先不加输出层。

  1. from transformers import AutoModel
  2. checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
  3. tokenizer = AutoTokenizer.from_pretrained(checkpoint)
  4. model

  1. outputs = model(**inputs)
  2. print(outputs,last_hidden_state,shape)


编码成768个向量。

模型基本逻辑

加上输出头

  1. from transformers import AutoModelForSequenceClassification
  2. checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
  3. # from_pretrained 方法用于根据预训练模型的名称或标识符从Hugging Face模型库中加载模型权重。这个方法会根据提供的预训练模型名称自动选择正确的模型架构,并加载相应的权重
  4. model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
  5. outputs = model(**inputs)
  6. print(outputs.logits.shape)
  1. model


输出后我们可以看到

  1. import torch
  2. # 输出张量
  3. predictions = torch.nn.functional.softmax(outputs.logins,dim=-1)
  4. print(predictions)


id2label这个我们后续可以自己设计,标签名字对应都可以自己指定。

  1. model.config.id2label

padding的作用

  1. sequence1_ids = [[200, 200, 200]]
  2. sequence2_ids = [[200, 200]]
  3. batched_ids = [
  4. [200, 200, 200],
  5. [200, 200, tokenizer.pad_token_id]
  6. ]
  7. print(model(torch.tensor(sequence1_ids)).logits)
  8. print(model(torch.tensor(sequence2_ids)).logits)
  9. print(model(torch.tensor(batched_ids)).logits)


我们会发现tokenizer.pad_token_id与上面得出的结果还是不一样的。
但是需要补充的必须要加上。!!!

attention_mask的作用

  1. batched_ids = [
  2. [200, 200, 200],
  3. [200, 200, tokenizer.pad_token_id],
  4. ]
  5. attention_mask = [
  6. [1, 1, 1],
  7. [1, 1, 0]
  8. ]
  9. outputs = model(torch.tensor(batched_ids), attention_mask=torch.tensor(attention_mask))
  10. print(outputs.logits)


这需要与其配套使用。

不同的padding方法

  1. sequences = ["I've been waiting for a this course my whole life.","So have I!","I played basketball yesterday."]
  2. # 按照最长的填充
  3. model_inputs = tokenizer(sequences.padding="longest")
  4. model_inputs

  1. # 如果是max_length就是最大的
  2. model_inputs = tokenizer(sequences.padding="max_length")
  3. # max_length表示句子中的词不足8的用0进行添加填充。
  4. model_inputs = tokenizer(sequences.padding="max_length",max_length=8)
  5. # 词的长度到10就截断
  6. model_inputs = tokenizer(sequences,max_length=8,truncation=True)

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

HugginFace 使用编码工具(学习笔记)

HugginFace 使用编码工具(学习笔记)[TOC] 安装环境# 我这里的python是3.11 %pip install -q transformers==4.18 datasets...

HugginFace 使用数据集(学习笔记)

HugginFace 使用数据集(学习笔记)[TOC] 数据集工具介绍HuggingFace 提供了统一的数据集处理工具,让不同的数据集通过统一...

HugginFace 使用评价指标工具(学习笔记)

HugginFace 使用评价指标工具(学习笔记)[TOC] 评价指标工具介绍在训练和测试一个模型时往往需要计算不同的评价指标,如正...

HugginFace 使用管道工具(学习笔记)

HugginFace 使用管道工具(学习笔记)[TOC] 管道工具介绍HuggingFace 有一个巨大的模型库,其中一些是已经非常成熟的经典模...

HugginFace 使用训练工具(学习笔记)

HugginFace 使用训练工具(学习笔记)[TOC] 训练工具介绍HuggingFace提供了巨大的模型库,但我们往往还需要对特定的数据集进...

HugginFace 中文情感分类(学习笔记)

HugginFace 中文情感分类(学习笔记)[TOC] 数据集介绍本章使用的是lansinuote/ChnSentiCorp数据集,这是一个情感分类数据集...

HugginFace 中文填空(学习笔记)

HugginFace 中文填空(学习笔记)[TOC] 数据集介绍本章使用的仍然是情感分类数据集,每条包括一句购物评价一集以及是不是好...

HugginFace 中文数据关系推断(学习笔记)

HugginFace 中文数据关系推断(学习笔记)[TOC] 实现代码安装包加载的环境可以通过如下命令进行安装。%pip install -q trans...

HugginFace 中文命名实体识别(学习笔记)

HugginFace 中文命名实体识别(学习笔记)[TOC] 任务简介简单来说就是的识别人名、机构名、地名。数据集的介绍本章所使用的...

初探k8s

概念补充Deployment 是在 Pod 这个抽象上更为上层的一个抽象层,它可以定义一组 Pod 的副本数量,以及这个 Pod 的版本。一...

初探Argo

初探Argo[TOC] 什么是 Argo CD? Argo CD 是 Kubernetes 的声明性 GitOps 持续交付工具。应用程序定义、配置和环境应该是...

BGP RR路由反射与Calico的初探

BGP RR路由反射与Calico的初探[TOC] BGP RR路由反射介绍由于IBGP水平分割的存在,为了保证所有的BGP路由器都能学习到完整...

Flannel CNI初探

Flannel CNI初探[TOC] Flannel 简介Flannel是由CoreOs提出的跨主通信容器网络解决方案,通过分配和管理全局唯一容器IP以及...

python 初探神经网络(一元一次函数)学习笔记

python 初探神经网络(一元一次函数)学习笔记[TOC] B站学习课程 豆豆实验有个小蓝的生物,想吃豆豆,豆豆越大豆豆的毒性...

Outlook WebAddin初探

Outlook WebAddin初探[TOC] 安装前提首先,确保你的计算机上已安装Node.js和npm。你可以在官方网站下载并安装它们。 VS C...
这一世以无限游戏为使命!
排名
2
文章
642
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术