Transformer模型实战基础入门

从入门到精通:Transformers 库的实战与应用 从本地加载# 或从Hub加载hub_model = AutoModel.from_pretrained("你的用户名/模型名称")这个流程涵盖了从安装到部署的完整过程,可以根据具体项目需求进行调整。对于不同的NLP任务,你可能需要选择不同的模型类型(如用于分类任务,用于问答任务等)。 阅读详情

总结
这里是B站up主你可是处女座啊发布的手把手带你实战HuggingFace Transformer模型入门篇的知识笔记,我整理记录了课堂的代码,并做了注释
点击观看:跳转观看

引入

常见库

image

基本使用情况

​conda create -n transformers python=3.9 创建环境,最好使3.9,版本太高了,可能会出现不兼容的情况

​pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 将这个清华源设置为默认

​pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html 安装pytorch命令

判断是否安装成功

image

安装环境的相关库

pip install transformers datasets evaluate peft accelerate gradio optimum sentencepiece​

​pip install jupyterlab scikit-learn pandas matplotlib tensorboard nltk rouge​

注意这个vscode的终端我们要调成这个cmd版本的,不要调乘powershell,因为powershell不设置的话,无法激活环境

判断环境是否安装成功

from transformers import *​

修改一下这个host文件,防止机器从github中下载模型出现问题

两个小案例

问题处理

​gr.Interface.from_pipeline(pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")).launch()​

语言判断
​gr.Interface.from_pipeline(pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese")).launch()​

# 这个代码的意思是导入这个gradio并取别名gr
# gradio是一个把机器学习模型快速打包成可交互网页界面的工具,我们可以直接通过这个名字来调用其中的方法
import gradio as gr

# 这个代码的意思是从transformers库中导入这个pipeline,pipeline是一站式API,给定任务名和模型名,它会自动下载分词器,模型并封装成可调用对象
from transformers import pipeline

# 分为两部分
# 第一部分pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")
#     定义任务名的名字question-answering,定义模型uer/roberta-base-chinese-extractive-qa,一个针对中文微调的 RoBERTa-base 模型
# 第二部分gr.Interface.from_pipeline().launch()
# Gradio 提供的快捷方法,直接把 pipeline 对象转成可交互网页界面。会自动根据 pipeline 的任务类型生成两个输入框(context、question)和一个输出框(答案)
gr.Interface.from_pipeline(pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")).launch()

基础组件Pipeline

总结

  • PipeLine就是一个可以快速使用别人模型的一个东西,使用的时候需要导入from transformers.pipelines
  • 使用pipeline只需要关注下面几个地方,模型是什么,参数是什么,如何使用即可,具体的使用方法可以参考这个文档

什么是Pipeline

  • 将数据预处理,模型调用,结果后处理三部分组装成的流水线

  • 是我们能够直接输入文本便获得最终答案

  • 预处理就是将文本转化为ID,模型调用就是获取评分,结果后处理,就是得出结果

image

Pipeline支持的任务类型

image

这些任务类型,我们并不能够都记住,我们可以通过代码的方式获取这个任务

#从这个transformers包中导入这个任务
#如果提示更新的话,就是pip install -U xxx
from transformers.pipelines import SUPPORTED_TASKS

#导入这个pprint,pprint是"pretty-printer"的缩写,它提供了一个可以以美观、可读的方式打印复杂数据结构的功能。
#与普通的print函数相比,pprint能够更好地格式化输出,特别是对于嵌套的数据结构如字典和列表
from pprint import pprint
pprint(SUPPORTED_TASKS.keys())

for k, v in SUPPORTED_TASKS.items():
    print(k, v)

Pipeline的创建与使用方式

文本检测

在使用这个Pipeline之前我们需要导包,一般需要什么导入什么就可以,但是我还不太清楚都需要什么,就直接导入全部from transformers import *​

之后我们可以根据任务类型,直接创建这个PipeLine。比如说我们创建一个文本分类的pipeline对象,系统会自动根据这个名称自动取下载基础模型。 不过这种方式都是默认英文模型

pipe = pipeline("text-classification")
然后我们执行,可以向里面传入多个参数
pipe(["very good!", "vary bad!","you are beautiful"])
即可得出结果评分
[{
   
   'label': 'POSITIVE', 'score': 0.9998525381088257},
 {
   
   'label': 'NEGATIVE', 'score': 0.9991207718849182},
 {
   
   'label': 'POSITIVE', 'score': 0.9998794794082642}]

如果我们想用中文模型的话,需要我们手动去指定

# https://huggingface.co/models
可以去huggingface网站中去查找这个模型,找到自己要做的任务,然后找到这个任务中支持的语言,然后点进去模型看一下使用方法
注意在从hugging face下载模型的时候,可能需要安装 hf_xet 包,它是 Hugging Face 用来优化模型下载的新依赖项,否则可能会下载失败
pipe = pipeline("text-classification", model="tabularisai/multilingual-sentiment-analysis")
pipe(["我喜欢你","我喜欢刘亦菲","我好帅","我是煞笔"])

除此之外我们还可以先加载模型和分词器,最后在指定这个管道,这种方式必须同时指定这个分词器和模型,如果只指定模型,不指定分词器的话,这个代码会报错

from transformers import AutoModelForSequenceClassification, AutoTokenizer

# 这种方式,必须同时指定model和tokenizer
模型
model = AutoModelForSequenceClassification.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
分词器
tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
管道
pipe = pipeline("text-classification", model=model, tokenizer=tokenizer)

如果我们想要让这个pipeline在执行的时候用gpu进行推理,我们可以手动指定这个pipeline

device=0,表示第一张显卡,1表示第二张显卡
pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese", device=0)

pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese", device="cpu")

对于pipeline而言,当我们需要获取了一个模型的时候,不同的模型的参数是不一样的,比如说文本分类就是传递一个字符串,文本推理确实传递两个字符串,一个文本,一个问题。所以对于不同的模型如何获取这些模型的使用参数呢。

  • 如果我们使用的是hugging face的库,里面会有参数介绍
    ​image

  • 但是transformers本身也有一个包,可以实现这个功能

    我们直接定义一个管道,然后直接在文档中输出这个管道,它就会提示你这个管道是什么样的。
    qa_pipe = pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")
    qa_pipe
    输出:<transformers.pipelines.question_answering.QuestionAnsweringPipeline at 0x20990ddda80>
    发现它已经指出来了这个pipelines的功能就是question_answering,具体管道就是QuestionAnsweringPipeline
    
    把这个管道复制到代码中,然后ctrl加点击跳转到源码,源码中会给出举例
    QuestionAnsweringPipeline
    >>> from transformers import pipeline
    >>> oracle = pipeline(model="deepset/roberta-base-squad2")
    >>> oracle(question="Where do I live?", context="My name is Wolfgang and I live in Berlin")
    {
         
         'score': 0.9191, 'start': 34, 'end': 40, 'answer': 'Berlin'}
    
    除了可以看示例信息之外,还可以看到这个管道中的其它参数
    Args:
    question (`str` or `list[str]`):
        One or several question(s) (must be used in conjunction with the `context` argument).
    context (`str` or `list[str]`):
        One or several context(s) associated with the question(s) (must be used in conjunction 
    max_answer_len (`int`, *optional*, defaults to 15):
        The maximum length of predicted answers (e.g., only answers with a shorter length are considered).
    等等等
    这个max_answer_len是指这个答案的最大长度
    
    qa_pipe(question="刘亦菲是谁", context="刘亦菲,1987年8月8日出生于湖北省武汉市,中国内地女演员,毕业于中央戏剧学院表演系2002班。")
    {
         
         'score': 0.6130275130271912, 'start': 23, 'end': 30, 'answer': '中国内地女演员'}
    
目标检测

这个是一个零目标的目标检测算法

创建模型和管道
checkpoint = "google/owlvit-base-patch32"
detector = pipeline(model=checkpoint, task="zero-shot-object-detection")

导入图片
import requests
from PIL import Image
url = "https://www4.bing.com//th?id=OHR.HappySunflower_ZH-CN5840993161_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp"
im = Image.open(requests.get(url, stream=True).raw)
展示图片
im

由于模型可以检测到的类别不确定,所以我们有种方法可以确定这个图像可以检测的类别

print(detector.model.config.id2label)
利用这个方法即可检测这个模型支持的类别

不过这个checkpoint = "google/owlvit-base-patch32"模型比较特殊,这个是零样本目标检测,这类模型(如 OWL-ViT)不是固定类别的检测器,而是根据你输入的文本提示动态生成类别。
predictions = detector(
    im,
    candidate_labels=["flower", "bird"],
)
predictions

[{
   
   'score': 0.17662185430526733,
  'label': 'bird',
  'box': {
   
   'xmin': 66, 'ymin': 104, 'xmax': 156, 'ymax': 179}},
 {
   
   'score': 0.10747422277927399,
  'label': 'bird',
  'box': {
   
   'xmin': 168, 'ymin': 72, 'xmax': 265, 'ymax': 109}}]

如果我们想要观测这个图像中检测出来的位置,我们可以为图片添加边框

为图片添加这个边框
from PIL import ImageDraw # 导入 PIL 的绘图工具 ImageDraw,用于在图片上画框和写字。
draw = ImageDraw.Draw(im) #创建一个“画笔”对象 draw,绑定到图片 im 上,之后所有绘图都作用在这张图上

参考上面的输出对应的字典
for prediction in predictions: #遍历模型返回的每一个预测结果(每个目标一个字典)
    box = prediction["box"]
    label = prediction["label"]
    score = prediction["score"]
    #把 box 字典里的四个值解包成变量,方便后面画矩形框
    xmin, ymin, xmax, ymax = box.values()
    #在图片上画一个红色矩形框,标出目标位置
    draw.rectangle((xmin, ymin, xmax, ymax), outline="red", width=1)
    #在框的左上角写上类别名和置信度(保留两位小数),颜色也是红色
    draw.text((xmin, ymin), f"{
     
     label}: {
     
     round(score,2)}", fill="red")

im

Pipeline的背后实现

image

分为5步

初始化Tokenizer,利用Tokenizer进行预处理

​tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")​

初始化Model,利用model将进行预测

​model = AutoModelForSequenceClassification.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")​

数据预处理

input_text = "我觉得不太行!"
inputs = tokenizer(input_text, return_tensors="pt")
inputs

模型预测,将上一步模型处理结果塞

Transformers Tutorial教程3-7 Transformers库的一个使用,用这个库就可以很轻松地去使用和训练自己的一个预训练语言模型。outline介绍什么是Transformers,为什么要用它介绍一些比较常用的接口最后会给出一个demo,帮助你们快速地入门。 阅读详情

相关推荐

Transformer怎么入门?零基础一文读懂学习路线,从基础知识到动手实战

《Transformer入门实用指南》摘要:本文为零基础读者提供Transformer的实用学习路径。首先介绍必备基础知识,包括Python编程和深度学习概念。随后分四步学习:1)理解注意力机制;2)掌握Transformer整体架构;3)动手实现简化版模型;4)使用HuggingFace库进行实战项目。文章推荐了优质学习资源,解答常见问题,强调"理论+实践"的学习方法。通过循序渐进的路线,读者可逐步掌握这一核心AI技术。

OpenCVtuxiang的博客 1176

18.15 Transformers模型训练实战:5大核心技巧+避坑指南(附完整代码)

本文介绍了使用Hugging Face Transformers的Trainer类进行模型训练的核心方法。主要内容包括:1)Trainer的架构组成和初始化模板;2)关键参数详解(模型加载、数据整理器、评估函数);3)训练全流程控制机制;4)实战代码示例(含训练参数配置和模型保存);5)训练监控技巧(TensorBoard集成、回调函数);6)常见问题排查指南;7)进阶训练策略(混合精度、梯度累积、分布式训练)。文章提供了完整的代码模板和技术要点,帮助开发者快速掌握Transformers模型训练的核心技能

yonggeit的博客 3211

Linux系统下SAPGUI安装包选择与避坑指南

本文详细介绍了在Linux系统下选择和安装SAPGUI安装包的策略与避坑指南。重点解析了不同版本安装包的关键区别,特别是Linux版必须包含linux-lib.jar和linux64-lib.jar文件,避免误用Mac或Windows版导致的兼容性问题。文章还提供了针对Ubuntu、RHEL等不同Linux发行版的安装实战指南,以及常见报错的解决方案,帮助用户顺利完成SAPGUI的安装与配置。

weixin_28366353的博客 673

华为设备有关用户名密码的策略配置

命令用来开启对密码进行复杂度检查功能,设备默认已经是开启状态。1、密码长度大于等于12位,含数字大小写字母和特殊符号。2、设置密码更换周期为90天。取值范围8-16,默认长度为8位。登录失败后锁定时间大于15分钟。3、登录失败次数小于5次。4、登录超时30分钟以内。

简单的创作,希望可以帮助到跟我一样的学习者! 7840

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1970

手把手教你用CubeMX给GD32F103点灯、调串口(附完整工程)

本文详细介绍了如何使用CubeMX为GD32F103开发板配置GPIO点灯和串口通信,包含完整的工程创建、代码构建和测试流程。特别强调了GD32与STM32的差异点及常见避坑技巧,帮助开发者快速上手GD32开发。

weixin_42566424的博客 313

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建

RocketMQ5.3.0-control-多 Master 多 Salve-异步复制-集群搭建(详细文档)

m0_52369979的博客 730

[Python图像处理] 一.图像处理基础知识及OpenCV入门函数

该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~ 同时推荐作者的C++图像系列知识: [数字图像处理] 一.MFC详解显示BMP格式图片 [数字图像处理] 二.MFC单文档分割窗...

杨秀璋的专栏 7万+

把 OData V4 服务真正发布出去:事务码 /IWFND/V4_ADMIN 在 SAP S/4HANA On-Premise 里的定位与用法

本文介绍了SAP S/4HANA中的事务码/IWFND/V4_ADMIN,这是SAP Gateway管理OData V4服务的关键工具。该事务码主要负责将后端注册的OData V4服务以服务组形式发布到前端,并维护系统别名路由、测试入口和日志跳转。与OData V2不同,V4采用服务组概念以支持跨服务导航,类似商场统一管理多个专柜。文章还通过实际案例说明,未发布服务组会导致BAS等工具无法发现OData V4服务,并提供了验证服务组状态的访问路径和ABAP示例代码。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 207

万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)!

见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!)

车载系统攻城狮 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: leecode92 反转链表II
下一篇: leecode25 K个一组翻转链表
TranquilGlow
博客等级 码龄5年 132粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值