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

Huggingface教程

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

import 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, AutoModelForSequenceClassification

import 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, AutoModelForSequenceClassification

import 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 F

import 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 F

import 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)

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

六、学会自己找一个模型来玩

  1. 打开huggingface官网链接
  2. 点击Model
    3.模型过滤器:寻找自己需要的模型,下图,红色框框内是模型的:任务需求、所用的库、数据集、关于什么语言、许可证
  • Task:用于指定模型适合执行的任务类型,例如文本分类、翻译、图像生成等。
  • Libraries:指定模型所属的框架或库,例如 Transformers、Diffusers、TensorFlow、PyTorch 等。
  • Dataset:用于筛选经过特定数据集训练或验证的模型。
  • Language:用于筛选支持特定语言的模型。如英语、中文、法语。
  • License:用于筛选模型的使用许可,例如 MIT、Apache-2.0、或 CC-BY 等。不同的许可证会规定模型在商业和非商业项目中的使用限制。

在这里插入图片描述
4.实战,facebook对文本的总结模型

  • task中勾选summarization
    在这里插入图片描述
  • 选择facebook/bart-large-cnn模型
    在这里插入图片描述
  • 点进去后,有该模型的介绍,向下滑动,会有教你怎么使用这个模型,将红框内代码内容复制到python中跑一次,记住要使用代理的端口号
    在这里插入图片描述
    红框内代码如下,加上代理相关代码:
    pipeline中的参数代表就是上面介绍的过滤器
# 下列两行代码是一个意思,主要是展示pipeline中的参数代表就是上面介绍的过滤器
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
summarizer = pipeline(task = "summarization", model="facebook/bart-large-cnn")

全部代码如下:

from transformers import pipeline
# !!!选自己代理的端口号,每个人的不一样
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890" # !!!选自己代理的端口号,每个人的不一样
os.environ["https_proxy"] = "http://127.0.0.1:7890" # !!!选自己代理的端口号,每个人的不一样
# !!!选自己代理的端口号,每个人的不一样
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")

ARTICLE = """ New York (CNN)When Liana Barrientos was 23 years old, she got married in Westchester County, New York.
A year later, she got married again in Westchester County, but to a different man and without divorcing her first husband.
Only 18 days after that marriage, she got hitched yet again. Then, Barrientos declared "I do" five more times, sometimes only within two weeks of each other.
In 2010, she married once more, this time in the Bronx. In an application for a marriage license, she stated it was her "first and only" marriage.
Barrientos, now 39, is facing two criminal counts of "offering a false instrument for filing in the first degree," referring to her false statements on the
2010 marriage license application, according to court documents.
Prosecutors said the marriages were part of an immigration scam.
On Friday, she pleaded not guilty at State Supreme Court in the Bronx, according to her attorney, Christopher Wright, who declined to comment further.
After leaving court, Barrientos was arrested and charged with theft of service and criminal trespass for allegedly sneaking into the New York subway through an emergency exit, said Detective
Annette Markowski, a police spokeswoman. In total, Barrientos has been married 10 times, with nine of her marriages occurring between 1999 and 2002.
All occurred either in Westchester County, Long Island, New Jersey or the Bronx. She is believed to still be married to four men, and at one time, she was married to eight men at once, prosecutors say.
Prosecutors said the immigration scam involved some of her husbands, who filed for permanent residence status shortly after the marriages.
Any divorces happened only after such filings were approved. It was unclear whether any of the men will be prosecuted.
The case was referred to the Bronx District Attorney\'s Office by Immigration and Customs Enforcement and the Department of Homeland Security\'s
Investigation Division. Seven of the men are from so-called "red-flagged" countries, including Egypt, Turkey, Georgia, Pakistan and Mali.
Her eighth husband, Rashid Rajput, was deported in 2006 to his native Pakistan after an investigation by the Joint Terrorism Task Force.
If convicted, Barrientos faces up to four years in prison.  Her next court appearance is scheduled for May 18.
"""
print(summarizer(ARTICLE, max_length=130, min_length=30, do_sample=False))

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

七、微调Finetune自己的模型

huggingface微调模型doc
在这里插入图片描述

八、学会使用huggingface的文档!

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

  • 链接: HuggingFace文档

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lampiao靶机入侵实战

07-Lampiao靶机入侵实战 一、扫描采集信息 1、获取IP地址 nmap -sn 192.168.81.0/24获得IP地址为:192.168.81.1282、获取端口信息 由于nmap默认情况下只扫描常用的1000个端口,覆盖面并不全,所以建议全端口扫描 nmap -p 1-65535 192.168.…

JSON格式及jackson.jar包的安装与配置

目录 为什么会出现JSON? JSON格式 jackson的jar文件下载与配置 jackson的简单使用 读取json格式 将现有对象转换成json序列 为什么会出现JSON? 在JSON出现前,由于多种编程语言的语法细节都不是完全相同,在网络传输信息时无法使用同一的格式&…

高效集成:YS采购订单与帆软MongoDB的对接实践

高效集成:YS采购订单与帆软MongoDB的对接实践 YS采购订单对接帆软MongoDB:用友BIP数据集成案例分享 在企业信息化系统中,数据的高效流动和处理是实现业务智能化的关键。本文将聚焦于一个具体的系统对接集成案例——YS采购订单对接帆软MongoD…

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…

Ollama+Open WebUI,windows部署一个本地AI

在Ollama官网下载,点击DownLoad 下载完之后进行安装,配置环境变量,完成后打开CMD命令行工具测试 运行并下载模型 之后选择Open WebUI作为图形化界面 🚀 Getting Started | Open WebUI 运行Docker命令 docker run -d -p 3000:80…

ArcGIS002:软件自定义设置

摘要:本文详细介绍安装arcgis10.2后软件自定义设置内容,包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。 一、工具条的启用 依次点击菜单栏【自定义】->【工具条】,根据工作需求勾…

07 设计模式-结构型模式-桥接模式

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得…

背包九讲——二维费用背包问题

目录 二维费用背包问题 问题描述: 解决方法: 方法一: 代码实现: 方法二: 代码实现: 背包问题第五讲——二维费用背包问题 背包问题是一类经典的组合优化问题,通常涉及在限定容量的背包中…

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中,授权服务要独立成一个模块做统一授权,无论客户端是浏览器,app或者第三方,都会在授权服务中获取权限,并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…

CentOS 7镜像下载

新版本系统镜像下载(当前最新是CentOS 7.4版本) CentOS官网 官网地址 http://isoredirect.centos.org/centos/7.4.1708/isos/x86_64/ http://mirror.centos.org/centos/7/isos/ 国内的华为云,超级快:https://mirrors.huaweiclou…

Linux TCP CC状态机

万字详文:TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map

认识类与对象(上)

目录 何为类,何为对象? 一.对于类 1.idea修改文件类名 二.对于对象 三.this关键字 1.区分成员变量和局部变量 2.引用当前对象 3.调用当前对象的其他构造方法 4.总结 四.构造方法 1.利用idea特性快速写出构造方法 五.封装 1.利用idea特性快速写出set和…

鸿蒙网络编程系列32-基于拦截器的性能监控示例

1. 拦截器简介 在Web开发中拦截器是一种非常有用的模式,它允许开发者在请求发送到服务器之前或响应返回给客户端之前执行一些预处理或后处理操作。这种机制特别适用于需要对所有网络请求或响应进行统一处理的情况,比如添加全局错误处理、请求头的修改、…

【深度学习】【OpenVINO】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【OpenVINO】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【OpenVINO】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转onnxWindows平台搭建…

我们可以用微服务创建状态机吗?

大家好,我是锋哥。今天分享关于【我们可以用微服务创建状态机吗?】面试题?希望对大家有帮助; 我们可以用微服务创建状态机吗? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的,微服务架构可…

为什么选择 Spring data hadoop

👉 请点赞支持这款 全新设计的脚手架 ,让 Java 再次伟大! spring-data-hadoop hbase 常见的操作方式有以下三种: Native Api 原生 api 操作繁琐,就像用 JDBC 操作关系型数据库一样,类似 flush、submit、…

Windows系统启动MongoDB报错无法连接服务器

文章目录 发现问题解决办法 发现问题 1)、先是发现执行 mongo 命令,启动报错: error: MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017; 2)、再检查 MongoDB 进程 tasklist | findstr mongo 发现没有进程&a…

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…

时间序列预测(九)——门控循环单元网络(GRU)

目录 一、GRU结构 二、GRU核心思想 1、更新门(Update Gate):决定了当前时刻隐藏状态中旧状态和新候选状态的混合比例。 2、重置门(Reset Gate):用于控制前一时刻隐藏状态对当前候选隐藏状态的影响程度。…

STM32实现毫秒级时间同步

提起“时间同步”这个概念,大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题,让多个传感器同时采集数据。 打个比方。两个人走路,都是100毫秒走一步(频率相同是前提&…