赞
踩
目录
可以通过“from transformers.pipelines import SUPPORTED_TASKS”进行查看。
注意,我们使用的是Jupiter(猪皮特),故以下代码皆为部分代码。
1)根据任务类型直接创建,不自己指定模型,使用该类任务默认模型:
- pipe = pipeline("text-classification")
- pipe(["very good!", "vary bad!"])
2)指定任务类型,接着继续指定具体模型:
模型链接:Huggingface官网
- pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese")
- pipe("我很开心哦!")
3)预先加载模型和分词器,接着再创建Pipeline
- # 这种方式,必须同时指定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)
- pipe("我觉得不太行!")
1)查看当前pipeline执行设备:
pipe.model.device
2)粗略估计执行时间:
- import torch
- import time
- times = []
- for i in range(100):
- torch.cuda.synchronize()
- start = time.time()
- pipe("我觉得不太行!")
- torch.cuda.synchronize()
- end = time.time()
- times.append(end - start)
- print(sum(times) / 100)
3)使用GPU进行推理
- pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese", device=0)
- #后边的数字0表示选取第0块显卡,没有该参数则默认采用cpu训练
有那么多模型,我们怎么知道该如何设置它的参数呢?
1)首先我们可以参考官网的教程;
2)其次就是我们可以跳到所用模型的定义去查阅samples;
- qa_pipe = pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")
- qa_pipe
- #生成<transformers.pipelines.question_answering.QuestionAnsweringPipeline at 0x2f42d953d30>
- #接着复制我们使用的模型到代码框QuestionAnsweringPipeline,进入其定义
3)也可以通过help的方式在控制台查看:
- from transformers.pipelines.question_answering import QuestionAnsweringPipeline
- help(QuestionAnsweringPipeline)
- checkpoint = "google/owlvit-base-patch32"
- detector = pipeline(model=checkpoint, task="zero-shot-object-detection")
-
- #显示图片
- import requests
- from PIL import Image
-
- url = "https://unsplash.com/photos/oj0zeY2Ltk4/download?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MTR8fHBpY25pY3xlbnwwfHx8fDE2Nzc0OTE1NDk&force=true&w=640"
- im = Image.open(requests.get(url, stream=True).raw)
- im
-
- #对图片内容进行零样本预测
- predictions = detector(
- im,
- candidate_labels=["hat", "sunglasses", "orange"],
- )
- predictions
-
- #绘制预测框
- from PIL import ImageDraw
-
- draw = ImageDraw.Draw(im)
-
- for prediction in predictions:
- box = prediction["box"]
- label = prediction["label"]
- score = prediction["score"]
- 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
- # 准备数据(文本)
- input_text = "我觉得不太行!"
-
- # 初始化Tokennizer
- inputs = tokenizer(input_text, return_tensors="pt")
- inputs
-
- # 初始化model
- from transformers import *
- import torch
- tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
- model = AutoModelForSequenceClassification.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
-
- # 模型预测
- res = model(**inputs)
- res
-
- # 得到预测部分的内容,经过一个softmax层归一化为0-1,化为概率
- logits = res.logits
- logits = torch.softmax(logits, dim=-1)
- logits
-
- # 得到类别
- pred = torch.argmax(logits).item()
- pred
-
- # 映射回去,得到直观结果
- result = model.config.id2label.get(pred)
- result
1)原始数据:
“我觉得不太行!”
2)经过tokenizer 后:
{
'input_ids': tensor([[ 101, 2769, 6230, 2533, 679, 1922, 6121, 8013, 102]]),
'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0]]),
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1]])
}这是一个字典对象,其中包含三个键值对:
'input_ids'
:输入文本被转换为对应的token ID序列。'token_type_ids'
:用于区分不同句子或片段的标识符,该示例中为单句文本,因此所有标识符都为0。'attention_mask'
:用于指示哪些位置的token需要被注意,该示例中所有位置都被注意到(值为1)。
3)经过模型训练后的结果
SequenceClassifierOutput(
loss=None,
logits=tensor([[ 1.7376, -1.8681]], grad_fn=<AddmmBackward0>),
hidden_states=None,
attentions=None
)
loss
:损失值,表示模型在训练过程中的损失。损失值为None
,表示没有计算损失。logits
:模型的输出logits。它是一个张量(tensor),其中包含模型对每个类别的分数或概率。logits的值为tensor([[ 1.7376, -1.8681]])
。hidden_states
:隐藏状态。隐藏状态为None
,表示没有返回隐藏状态。attentions
:注意力权重。注意力权重为None
,表示没有返回注意力权重。
4)经过Softmax层
tensor([[0.9736, 0.0264]], grad_fn=<SoftmaxBackward0>)
得到归一化概率分布
5)取最大概率的下标,得到类别
0 #其中0表示负类,1表示正类
6)映射回去,得到直观结果
'negative (stars 1, 2 and 3)'
将上述一整个东西封装好,就是一个Pipeline。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。