宝塔山 发表于 2024-10-16 21:50:04

AI开发-三方库-Hugging Face-Pipelines

1 需求

需求1:pipeline支持的任务类型
需求2:推理加速使用CPU还是GPU
需求3:基于pipeline的文本分类示例
需求4:pipeline实现原理
https://i-blog.csdnimg.cn/direct/21cfd0576a2f49c3aa9d8e230a120f83.png
https://i-blog.csdnimg.cn/direct/17e1bcdc06244839a684e49de82ab1b3.png
模型使用步骤(Raw text -》Input IDs -》Logits -》Predictions):


[*]第一步:数据预处理(Raw text -》Input IDs)
[*]第二步:模型调用(Input IDs -》Logits)
[*]第三步:效果后处理(Logits -》Predictions)
以下是对这个流程的表明:
一、Raw text -> Input IDs

[*]原始文本处理:

[*]“Raw text” 即原始文本,可能是一段自然语言的语句、文章段落等。
[*]在自然语言处理任务中,首先需要将原始文本举行预处理,以便模型可以或许理解和处理。

[*]分词与编码:

[*]通常使用分词器(tokenizer)将原始文本分割成一个个的词或子词单位。例如,对于英文文本,可能会将单词拆分成词根、词缀等更小的单位;对于中文文本,可能会按照字、词等举行分割。
[*]然后,分词器会为每个分割后的单位分配一个唯一的整数标识符,即 “Input IDs”。这些整数标识符可以被模型识别和处理。
[*]例如,使用 Hugging Face 的 Transformers 库中的分词器,可以这样将原始文本转换为输入 ID 序列:

text = "今天天气不错"

# 第一步:数据预处理(Raw text -》Input IDs)
from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('./model')
inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
print(inputs) 二、Input IDs -> Logits

[*]模型处理输入:

[*]“Input IDs” 被输入到深度学习模型中,例如 Transformer 架构的语言模型。
[*]模型会对输入的 ID 序列举行一系列的计算和处理,包罗嵌入(embedding)、多头注意力(multi-head attention)、前馈神经网络(feed-forward neural network)等操纵。

[*]天生对数概率:

[*]经过模型的计算,最终会输出一个向量,称为 “Logits”。Logits 是模型对每个可能的输出类别的对数概率。
[*]例如,在文本分类任务中,如果有两个类别(正面和负面),那么 Logits 可能是一个长度为 2 的向量,分别表示输入文本属于正面类别和负面类别的对数概率。
[*]以下是一个简单的示例,使用预训练的模型天生 Logits:

# 第二步:模型调用(Input IDs -》Logits)
from transformers import BertForSequenceClassification

model = BertForSequenceClassification.from_pretrained('./model')
# print(model.config)
outputs = model(**inputs)
logits = outputs.logits
print(logits) 三、Logits -> Predictions

[*]概率计算与预测:

[*]“Logits” 通常是未经过处理的对数概率,需要进一步转换为概率值。可以使用 softmax 函数将 Logits 转换为概率分布。
[*]Softmax 函数会将每个对数概率转换为一个介于 0 和 1 之间的概率值,而且所有概率值之和为 1。
[*]然后,根据概率分布,可以选择概率最高的类别作为模型的预测效果。
[*]例如:

# 第三步:结果后处理(Logits -》Predictions)
import torch

predictions = torch.nn.functional.softmax(logits, dim=-1)
predictions_class = torch.argmax(predictions).item()
print(predictions_class)
print(model.config.id2label.get(predictions_class)) 这个流程是自然语言处理中常见的文本分类任务的根本步骤,不同的任务和模型可能会有所不同,但总体上都遵循这个从原始文本到最终预测的过程。
2 接口

关键参数 


[*]task:指定任务类型
[*]model:指定模型
[*]tokenizer:指定分词器
[*]device:指定使用GPU举行推理加速
常见调用方式


[*]pipeline(task="text-classification")
[*]pipeline(task="text-classification", model="./model")
[*]pipeline(task="text-classification", model="./model", tokenizer="./model")
[*]pipeline(task="text-classification", model="./model", tokenizer="./model", device=-1)
https://i-blog.csdnimg.cn/direct/331e907b729745eb9a819436abdaa36e.png
https://i-blog.csdnimg.cn/direct/7e4d4148e9e447ceaf78820a8aaa9169.png
3.1 支持任务类型

from transformers.pipelines import SUPPORTED_TASKS

for k, v in SUPPORTED_TASKS.items():
    print(k) https://i-blog.csdnimg.cn/direct/b6f8b5949edf42008a63ce7970ac51d2.png
https://i-blog.csdnimg.cn/direct/de81929fbaed4573b6ab23b4d73c2a1c.png
3.2 推理加速使用CPU还是GPU

from transformers import pipeline

pipe = pipeline(task="text-classification", model="./model", tokenizer="./model")

print(pipe.model.device) https://i-blog.csdnimg.cn/direct/be458910e30c4e2ca783245169d37645.png
3.3 基于pipeline的文本分类示例

from transformers import pipeline

pipe = pipeline(task="text-classification", model="./model", tokenizer="./model", device=-1)
result = pipe("今天天气不错")
print(result) https://i-blog.csdnimg.cn/direct/862684e9f88949c6994dcfbe8c52e55d.png
3.4 pipeline实现原理

text = "今天天气不错"

# 第一步:数据预处理(Raw text -》Input IDs)
from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('./model')
inputs = tokenizer(text, return_tensors='pt', padding=True, truncation=True)
print(inputs)# 第二步:模型调用(Input IDs -》Logits)
from transformers import BertForSequenceClassification

model = BertForSequenceClassification.from_pretrained('./model')
# print(model.config)
outputs = model(**inputs)
logits = outputs.logits
print(logits)# 第三步:结果后处理(Logits -》Predictions)
import torch

predictions = torch.nn.functional.softmax(logits, dim=-1)
predictions_class = torch.argmax(predictions).item()
print(predictions_class)
print(model.config.id2label.get(predictions_class)) https://i-blog.csdnimg.cn/direct/6d5b43fca8b5444f8de3bcae35ec9ea5.png
4 参考资料

https://huggingface.co/docs/transformers/main_classes/pipelines
https://hf-mirror.com/docs/transformers/main_classes/pipelines
https://blog.csdn.net/weixin_48007632/category_12725843.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: AI开发-三方库-Hugging Face-Pipelines