当前位置: 首页 > news >正文

【项目实战】HuggingFace初步实战,使用HF做一些小型任务

Huggingface初步实战

  • 一、前期准备工作
  • 二、学习pipline
    • 2.1.试运行代码,使用HuggingFace下载模型
    • 2.2. 例子1,情感检测分析(只有积极和消极两个状态)
    • 2.3. 例子2,文本生成
  • 三、学会使用Tokenizer & Model
    • 3.1.tokenizer(分词器)是处理文本数据的重要组件
    • 3.2.tokenizer对字符串处理过程
  • 四、pytorch的简单使用
  • 五、模型的保存save & 加载load
  • 六、学会使用huggingface的文档!

一、前期准备工作

1.会使用Conda创建自己的虚拟环境
2.会激活自己的虚拟环境
3.了解一定pytorch基础

官方要求:
python 3.6+
pytorch 1.1.0+
TensorFlow 2.0+
本文使用的环境:
python 3.7.1
pytorch 1.13.1 py3.7_cuda11.7_cudnn8_0
tensorflow 1.15.0
官方要求图片实例

二、学习pipline

pipeline是Hugging Face Transformers库中的一个高层API,旨在简化各种自然语言处理任务的执行。通过它,用户可以在几行代码内实现从模型加载到推理的整个流程,而不需要深入了解模型的架构细节。

pipeline 支持多种常见任务,包括:

  • 文本分类(如情感分析):对输入文本进行分类,返回类别标签和置信度。
  • 问答:基于上下文回答问题。
  • 文本生成(如对话生成):基于输入提示生成文本片段。
  • 翻译:将文本从一种语言翻译成另一种语言。
  • 填空(填充掩码):完成缺失的词或短语,适用于填空任务。

通过指定任务名称,如pipeline("sentiment-analysis"),可以直接加载相关的预训练模型和分词器,使开发过程更加高效直观。

2.1.试运行代码,使用HuggingFace下载模型

Hugging Face的pipeline方法下载的模型默认会保存在用户目录下的.cache文件夹中,具体路径是:
在这里插入图片描述

C:/Users/11874/.cache/huggingface/transformers/

在这里插入图片描述

  • 这里的代码是因为需要网络代理(科学上网)才可以下载huggingface的模型
  • 查找自己网络代理中的端口号,本文的端口号是7890

2.2. 例子1,情感检测分析(只有积极和消极两个状态)

# 这里从Hugging Face的Transformers库中导入pipeline函数
# pipeline是一个高层API,便于直接调用预训练模型完成特定任务。
from transformers import pipeline# 这里使用Python的os模块设置了环境变量,将代理服务器的地址和端口号设置为
# 127.0.0.1:7890。这种设置通常用于需要通过代理访问互联网的情况
# 帮助解决从Hugging Face Hub下载模型时的网络连接问题。
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"# 这里通过pipeline创建了一个情感分析任务的管道。它会自动下载并加载一个适合情感分析的预训练模型(如基于BERT或DistilBERT的模型),并准备好用于推理。
classifier = pipeline("sentiment-analysis")# 这里调用classifier对输入的句子执行情感分析。模型会根据句子内容预测情感标签(例如"positive"或"negative"),并返回分类结果及其置信度。
res = classifier("I have been waiting for a HuggingFace course my whole life.")print(res)

输出:

[{'label': 'NEGATIVE', 'score': 0.9484281539916992}]

2.3. 例子2,文本生成

from transformers import pipelineimport os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"# 通过pipeline函数创建了一个文本生成的管道,并指定模型为distilgpt2,
# 这是一个较轻量的GPT-2模型。pipeline会自动从Hugging Face Hub下载该模型。
generator = pipeline("text-generation", model="distilgpt2")res = generator("In my home, I have a", # 对此内容扩写max_length = 30, # 生成的文本长度上限为30个token。num_return_sequences = 2, # 生成两个不同的文本序列,提供不同的生成结果。
)print(res)

输出:

[{'generated_text': 'In my home, I have a daughter, my son and her own daughter, and I have a son and daughter whose mom has been a patient with'}, 
{'generated_text': 'In my home, I have a couple dogs. Those were all my pets.\n“I started out in the farmhouse. I used to'}]

三、学会使用Tokenizer & Model

3.1.tokenizer(分词器)是处理文本数据的重要组件

  • exp1代码:使用了Hugging Face提供的高层次pipeline接口默认加载一个预训练的情感分析模型。这种方式简单易用,适合快速原型开发,但使用的具体模型和tokenizer不明确。

  • exp2代码:则显式地加载了特定的模型distilbert-base-uncased-finetuned-sst-2-english及其对应的tokenizer。通过AutoModelForSequenceClassificationAutoTokenizer,用户可以更灵活地选择和定制模型。这种方式适合对模型进行微调或需要特定模型功能的情况。

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassificationimport os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"# exp 1:这段代码使用了Hugging Face提供的高层次pipeline接口,默认加载一个预训练的情感分析模型。这种方式简单易用,适合快速原型开发,但使用的具体模型和tokenizer不明确。
classifier = pipeline("sentiment-analysis")
res = classifier("I have been waiting for a HuggingFace course my whole life.")
print(res)# exp 2:这段代码则显式地加载了特定的模型distilbert-base-uncased-finetuned-sst-2-english及其对应的tokenizer。通过AutoModelForSequenceClassification和AutoTokenizer,用户可以更灵活地选择和定制模型。这种方式适合对模型进行微调或需要特定模型功能的情况。
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)
res = classifier("I have been waiting for a HuggingFace course my whole life.")
print(res)

输出:

[{'label': 'POSITIVE', 'score': 0.9433633089065552}]
[{'label': 'POSITIVE', 'score': 0.9433633089065552}]

3.2.tokenizer对字符串处理过程

from transformers import AutoTokenizer, AutoModelForSequenceClassificationimport os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)#这一步使用tokenizer对输入的句子进行编码。
sequence = "Playing computer game is simple."
res = tokenizer(sequence)
print(res) # {'input_ids': [101, 2652, 3274, 2208, 2003, 3722, 1012, 102], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}# 这一行调用tokenizer.tokenize()方法将句子拆分为tokens(子词或词)。
# 在自然语言处理(NLP)中,分词通常是将文本切分为可以被模型处理的最小单位。
# 输出结果将是一个tokens的列表,例如:
tokens = tokenizer.tokenize(sequence) 
print(tokens) # ['Playing', 'computer', 'game', 'is', 'simple', '.']# 这里使用tokenizer.convert_tokens_to_ids()方法将分词后的tokens转换为对应的ID。
# 每个token都有一个唯一的ID,这些ID可以被模型理解。
ids = tokenizer.convert_tokens_to_ids(tokens)
print(ids) # [2652, 3274, 2208, 2003, 3722, 1012]# 使用tokenizer.decode()方法将token ID转换回原始字符串。这个过程将ID映射回对应的tokens,并将它们合并成一个可读的文本。
decoded_string = tokenizer.decode(ids)
print(decoded_string) # playing computer game is simple.

输出:

{'input_ids': [101, 2652, 3274, 2208, 2003, 3722, 1012, 102], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]}
['playing', 'computer', 'game', 'is', 'simple', '.']
[2652, 3274, 2208, 2003, 3722, 1012]
playing computer game is simple.

四、pytorch的简单使用

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import torch.nn.functional as Fimport os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"# 1.还是用之前的pipeline应用
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)# 2.通常不止一个句子,这里我们多放一个句子,用list
text_Train = ["I love you, my wife.","Suzhou is the worst place!"]
# 3.输出分析的情感
res = classifier(text_Train)
print(res)# 4.使用分词器对输入的文本进行批处理,设置padding=True和truncation=True确保输入序列的长度一致。
max_length=512限制了输入的最大长度,return_tensors="pt"表示将输出转换为PyTorch的张量格式。
batch = tokenizer(text_Train, padding=True, truncation=True, max_length=512, return_tensors="pt")
print(batch)# 5.torch.no_grad()用于关闭梯度计算,以节省内存和加速计算,因为在推理过程中不需要更新模型参数。
# model(**batch)将预处理过的批量输入传递给模型,返回的outputs包含了模型的原始输出(logits)。
# 使用F.softmax(outputs.logits, dim=1)计算每个类的概率分布。
# torch.argmax(predictions, dim=1)用于确定概率最高的类别标签,表示每个输入文本的最终情感预测。
with torch.no_grad():print("====================")outputs = model(**batch)print(outputs)predictions = F.softmax(outputs.logits, dim=1)print(predictions)labels = torch.argmax(predictions, dim=1)print(labels)

输出:
在这里插入图片描述

五、模型的保存save & 加载load

1.保存:这里指定了保存路径为当前工作目录下的一个名为saved的文件夹。如果没有特殊路径指定,模型和分词器会默认保存在你运行代码的当前目录下的saved文件夹中。这个文件夹会包含:

  • tokenizer配置文件,例如tokenizer_config.jsonvocab.txtspecial_tokens_map.json等。

  • 模型配置文件权重,如config.jsonpytorch_model.bin,这些文件包含模型的结构和权重。

2.加载:代码在后续使用时可以通过指定保存的目录(例如saved)来加载已经保存的模型分词器,避免重新下载模型。这在离线使用或需要跨项目共享时非常有用。

from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import torch.nn.functional as Fimport os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"# 还是用之前的pipeline应用
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)# 1.保存: tokenizer和model到一个目录下面
save_directory = "saved"  # 保存路径为当前工作目录下的一个名为saved的文件夹
tokenizer.save_pretrained(save_directory)
model.save_pretrained(save_directory)# 2.加载:想再次加载他,使用下列方法
tok = AutoTokenizer.from_pretrained(save_directory)
mod = AutoModelForSequenceClassification.from_pretrained(save_directory)

输出:
在这里插入图片描述

六、学会使用huggingface的文档!

非常重要,HF的文档可以找到任何你想找到的东西

  • 链接: HuggingFace文档

  • 链接: 具体例子文档(有语音、情感分析、文本生成、图片识别等等)

在这里插入图片描述


http://www.mrgr.cn/news/59124.html

相关文章:

  • Git详解
  • fpga系列 HDL: 竞争和冒险 02
  • 使用redis实现发布订阅功能及问题
  • IntelliJ IDEA 2024社区版保姆及图文安装教程
  • 使用uniapp制作微信小程序(页面)——校园小卖铺
  • Fragments by E2B:AI生成应用模板,让应用开发更智能
  • 如何快速绘制高效的业务架构图(三步完成)
  • 【动手学深度学习】8.5 循环神经网络从零开始实现
  • 跟我学C++中级篇——volatile的探究
  • 大厂项目经理推荐的10款常用的项目管理软件值得你收藏
  • Java中TreeSet的使用
  • 代码随想录算法训练营第二十七天|Day27 贪心算法
  • 博图软件的使用(一)
  • 006:看图软件ACDSeePhotoStudio2019安装教程
  • Python中的Bloom Filter算法详解
  • C/C++(七)RAII思想与智能指针
  • Java-图书管理系统
  • 专题十六_栈_队列_优先级队列_算法专题详细总结
  • java核心技术点都有哪些
  • 【C++ 真题】B2099 矩阵交换行
  • 蓝桥杯第二十场小白入门赛
  • 走廊泼水节——求维持最小生成树的完全图的最小边权和
  • 010 操作符详解 上
  • MySQL数据库学习指南
  • RPA技术重塑企业自动化的未来
  • 数据结构之堆的实现以及性质和应用