AI大模型探索之路-训练篇9:大语言模型Transformer库-Pipeline组件实践

news2024/11/17 15:46:43

系列篇章💥

AI大模型探索之路-训练篇1:大语言模型微调基础认知
AI大模型探索之路-训练篇2:大语言模型预训练基础认知
AI大模型探索之路-训练篇3:大语言模型全景解读
AI大模型探索之路-训练篇4:大语言模型训练数据集概览
AI大模型探索之路-训练篇5:大语言模型预训练数据准备-词元化
AI大模型探索之路-训练篇6:大语言模型预训练数据准备-预处理
AI大模型探索之路-训练篇7:大语言模型Transformer库之HuggingFace介绍
AI大模型探索之路-训练篇8:大语言模型Transformer库-预训练流程编码体验


目录

  • 系列篇章💥
  • 一、Pipeline的简介
  • 二、Pipeline支持的任务类型
  • 三、Pipeline的使用
    • 1、Pipeline的创建与使用方式
    • 2、预先加载模型,再创建Pipeline
    • 3、CPU和GPU推理对比
    • 4、确定Pipeline参数的使用
  • 四、Pipeline背后的工作
    • 1、导入依赖,创建模型
    • 2、分词处理、生成模型输入
    • 3、模型推理
    • 4、获取原始分数、再归一化处理
    • 5、查看概率最高的类别索引
    • 6、查看标签映射
    • 7、根据我们得到的索引类别,从标签映射中取出结果
    • 8、Pipeline使用完整代码样例如下
  • 五、使用Pipeline优化
  • 总结


一、Pipeline的简介

在人工智能和机器学习领域,Pipeline是一种设计模式,它将多个处理步骤串联起来,形成一个有序的、自动化的工作流程。这一概念在自然语言处理(NLP)尤其重要,因为NLP任务通常涉及多个阶段,如文本清洗、特征提取、模型训练或预测等。Pipeline的设计旨在减少重复代码、提高代码的可维护性,并优化整个处理流程的效率。
官网API地址:https://huggingface.co/docs/transformers/main_classes/pipelines

二、Pipeline支持的任务类型

Pipeline能够支持多种机器学习任务,包括但不限于:
1)文本分类:将文本分配到预定义的类别。
2)情感分析:判断文本表达的情绪倾向。
3)机器翻译:将一种语言的文本转换为另一种语言。
4)问答系统:针对问题提供准确答案。
5)文本摘要:生成文本的简短摘要。
6)语言模型生成:基于语言模型生成新的文本内容。
在Python中,可以通过以下方式查询transformers库支持的所有任务类型:

from transformers.pipelines import SUPPORTED_TASKS

print(SUPPORTED_TASKS.items())

dict_items([('audio-classification', {'impl': <class 'transformers.pipelines.audio_classification.AudioClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForAudioClassification'>,), 'default': {'model': {'pt': ('superb/wav2vec2-base-superb-ks', '372e048')}}, 'type': 'audio'}), ('automatic-speech-recognition', {'impl': <class 'transformers.pipelines.automatic_speech_recognition.AutomaticSpeechRecognitionPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForCTC'>, <class 'transformers.models.auto.modeling_auto.AutoModelForSpeechSeq2Seq'>), 'default': {'model': {'pt': ('facebook/wav2vec2-base-960h', '55bb623')}}, 'type': 'multimodal'}), ('text-to-audio', {'impl': <class 'transformers.pipelines.text_to_audio.TextToAudioPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForTextToWaveform'>, <class 'transformers.models.auto.modeling_auto.AutoModelForTextToSpectrogram'>), 'default': {'model': {'pt': ('suno/bark-small', '645cfba')}}, 'type': 'text'}), ('feature-extraction', {'impl': <class 'transformers.pipelines.feature_extraction.FeatureExtractionPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModel'>,), 'default': {'model': {'pt': ('distilbert-base-cased', '935ac13'), 'tf': ('distilbert-base-cased', '935ac13')}}, 'type': 'multimodal'}), ('text-classification', {'impl': <class 'transformers.pipelines.text_classification.TextClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSequenceClassification'>,), 'default': {'model': {'pt': ('distilbert-base-uncased-finetuned-sst-2-english', 'af0f99b'), 'tf': ('distilbert-base-uncased-finetuned-sst-2-english', 'af0f99b')}}, 'type': 'text'}), ('token-classification', {'impl': <class 'transformers.pipelines.token_classification.TokenClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForTokenClassification'>,), 'default': {'model': {'pt': ('dbmdz/bert-large-cased-finetuned-conll03-english', 'f2482bf'), 'tf': ('dbmdz/bert-large-cased-finetuned-conll03-english', 'f2482bf')}}, 'type': 'text'}), ('question-answering', {'impl': <class 'transformers.pipelines.question_answering.QuestionAnsweringPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForQuestionAnswering'>,), 'default': {'model': {'pt': ('distilbert-base-cased-distilled-squad', '626af31'), 'tf': ('distilbert-base-cased-distilled-squad', '626af31')}}, 'type': 'text'}), ('table-question-answering', {'impl': <class 'transformers.pipelines.table_question_answering.TableQuestionAnsweringPipeline'>, 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForTableQuestionAnswering'>,), 'tf': (), 'default': {'model': {'pt': ('google/tapas-base-finetuned-wtq', '69ceee2'), 'tf': ('google/tapas-base-finetuned-wtq', '69ceee2')}}, 'type': 'text'}), ('visual-question-answering', {'impl': <class 'transformers.pipelines.visual_question_answering.VisualQuestionAnsweringPipeline'>, 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForVisualQuestionAnswering'>,), 'tf': (), 'default': {'model': {'pt': ('dandelin/vilt-b32-finetuned-vqa', '4355f59')}}, 'type': 'multimodal'}), ('document-question-answering', {'impl': <class 'transformers.pipelines.document_question_answering.DocumentQuestionAnsweringPipeline'>, 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForDocumentQuestionAnswering'>,), 'tf': (), 'default': {'model': {'pt': ('impira/layoutlm-document-qa', '52e01b3')}}, 'type': 'multimodal'}), ('fill-mask', {'impl': <class 'transformers.pipelines.fill_mask.FillMaskPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForMaskedLM'>,), 'default': {'model': {'pt': ('distilroberta-base', 'ec58a5b'), 'tf': ('distilroberta-base', 'ec58a5b')}}, 'type': 'text'}), ('summarization', {'impl': <class 'transformers.pipelines.text2text_generation.SummarizationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSeq2SeqLM'>,), 'default': {'model': {'pt': ('sshleifer/distilbart-cnn-12-6', 'a4f8f3e'), 'tf': ('t5-small', 'd769bba')}}, 'type': 'text'}), ('translation', {'impl': <class 'transformers.pipelines.text2text_generation.TranslationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSeq2SeqLM'>,), 'default': {('en', 'fr'): {'model': {'pt': ('t5-base', '686f1db'), 'tf': ('t5-base', '686f1db')}}, ('en', 'de'): {'model': {'pt': ('t5-base', '686f1db'), 'tf': ('t5-base', '686f1db')}}, ('en', 'ro'): {'model': {'pt': ('t5-base', '686f1db'), 'tf': ('t5-base', '686f1db')}}}, 'type': 'text'}), ('text2text-generation', {'impl': <class 'transformers.pipelines.text2text_generation.Text2TextGenerationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSeq2SeqLM'>,), 'default': {'model': {'pt': ('t5-base', '686f1db'), 'tf': ('t5-base', '686f1db')}}, 'type': 'text'}), ('text-generation', {'impl': <class 'transformers.pipelines.text_generation.TextGenerationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForCausalLM'>,), 'default': {'model': {'pt': ('gpt2', '6c0e608'), 'tf': ('gpt2', '6c0e608')}}, 'type': 'text'}), ('zero-shot-classification', {'impl': <class 'transformers.pipelines.zero_shot_classification.ZeroShotClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSequenceClassification'>,), 'default': {'model': {'pt': ('facebook/bart-large-mnli', 'c626438'), 'tf': ('roberta-large-mnli', '130fb28')}, 'config': {'pt': ('facebook/bart-large-mnli', 'c626438'), 'tf': ('roberta-large-mnli', '130fb28')}}, 'type': 'text'}), ('zero-shot-image-classification', {'impl': <class 'transformers.pipelines.zero_shot_image_classification.ZeroShotImageClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForZeroShotImageClassification'>,), 'default': {'model': {'pt': ('openai/clip-vit-base-patch32', 'f4881ba'), 'tf': ('openai/clip-vit-base-patch32', 'f4881ba')}}, 'type': 'multimodal'}), ('zero-shot-audio-classification', {'impl': <class 'transformers.pipelines.zero_shot_audio_classification.ZeroShotAudioClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModel'>,), 'default': {'model': {'pt': ('laion/clap-htsat-fused', '973b6e5')}}, 'type': 'multimodal'}), ('conversational', {'impl': <class 'transformers.pipelines.conversational.ConversationalPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForSeq2SeqLM'>, <class 'transformers.models.auto.modeling_auto.AutoModelForCausalLM'>), 'default': {'model': {'pt': ('microsoft/DialoGPT-medium', '8bada3b'), 'tf': ('microsoft/DialoGPT-medium', '8bada3b')}}, 'type': 'text'}), ('image-classification', {'impl': <class 'transformers.pipelines.image_classification.ImageClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForImageClassification'>,), 'default': {'model': {'pt': ('google/vit-base-patch16-224', '5dca96d'), 'tf': ('google/vit-base-patch16-224', '5dca96d')}}, 'type': 'image'}), ('image-segmentation', {'impl': <class 'transformers.pipelines.image_segmentation.ImageSegmentationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForImageSegmentation'>, <class 'transformers.models.auto.modeling_auto.AutoModelForSemanticSegmentation'>), 'default': {'model': {'pt': ('facebook/detr-resnet-50-panoptic', 'fc15262')}}, 'type': 'multimodal'}), ('image-to-text', {'impl': <class 'transformers.pipelines.image_to_text.ImageToTextPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForVision2Seq'>,), 'default': {'model': {'pt': ('ydshieh/vit-gpt2-coco-en', '65636df'), 'tf': ('ydshieh/vit-gpt2-coco-en', '65636df')}}, 'type': 'multimodal'}), ('object-detection', {'impl': <class 'transformers.pipelines.object_detection.ObjectDetectionPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForObjectDetection'>,), 'default': {'model': {'pt': ('facebook/detr-resnet-50', '2729413')}}, 'type': 'multimodal'}), ('zero-shot-object-detection', {'impl': <class 'transformers.pipelines.zero_shot_object_detection.ZeroShotObjectDetectionPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForZeroShotObjectDetection'>,), 'default': {'model': {'pt': ('google/owlvit-base-patch32', '17740e1')}}, 'type': 'multimodal'}), ('depth-estimation', {'impl': <class 'transformers.pipelines.depth_estimation.DepthEstimationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForDepthEstimation'>,), 'default': {'model': {'pt': ('Intel/dpt-large', 'e93beec')}}, 'type': 'image'}), ('video-classification', {'impl': <class 'transformers.pipelines.video_classification.VideoClassificationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForVideoClassification'>,), 'default': {'model': {'pt': ('MCG-NJU/videomae-base-finetuned-kinetics', '4800870')}}, 'type': 'video'}), ('mask-generation', {'impl': <class 'transformers.pipelines.mask_generation.MaskGenerationPipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForMaskGeneration'>,), 'default': {'model': {'pt': ('facebook/sam-vit-huge', '997b15')}}, 'type': 'multimodal'}), ('image-to-image', {'impl': <class 'transformers.pipelines.image_to_image.ImageToImagePipeline'>, 'tf': (), 'pt': (<class 'transformers.models.auto.modeling_auto.AutoModelForImageToImage'>,), 'default': {'model': {'pt': ('caidas/swin2SR-classical-sr-x2-64', '4aaedcb')}}, 'type': 'image'})])

三、Pipeline的使用

使用Pipeline通常涉及以下几个步骤:
1)定义步骤:明确每个处理步骤和它们之间的顺序。
2)配置组件:为每个步骤选择合适的模型或算法,并配置必要的参数。
3)组装Pipeline:将各个步骤按照既定的顺序组装成一个完整的Pipeline。
4)训练模型:如果Pipeline中包含模型训练的步骤,需要提供训练数据并执行训练。
5)执行Pipeline:输入待处理的数据,Pipeline将自动按顺序执行每个步骤。
6)评估和调整:根据Pipeline的输出结果进行评估,并根据需要调整步骤或参数。

1、Pipeline的创建与使用方式

使用Hugging Face的transformers库中的pipeline功能来创建一个文本分类模型的接口,并对其进行使用

##导入pipeline
from transformers import pipeline
## 指定任务类型,再指定模型,创建基于指定模型的Pipeline
# https://huggingface.co/models
# roberta-base-finetuned-dianping-chinese:是专门为中文评论情感分析预训练和微调过的模型。
pipe = pipeline("text-classification", model="uer/roberta-base-finetuned-dianping-chinese")
pipe("我觉得不太行!")

输出

[{'label': 'negative (stars 1, 2 and 3)', 'score': 0.9735506772994995}]

代码中模型将输入的句子分类为负面情感,并且给出了相应的置信度(score)。在这个例子中,模型非常有信心(置信度约为0.974)认为这条评论是负面的,对应的是1星到3星的评价。

2、预先加载模型,再创建Pipeline

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 这种方式,必须同时指定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("今天天气很晴朗,处处好风光!")

输出

[{'label': 'positive (stars 4 and 5)', 'score': 0.9193938374519348}]

代码中模型对输入句子的分类结果。模型预测该句子是正面情感的,并且给出了一个高分(约0.919),这表明模型对于这个预测非常有信心。标签’positive (stars 4 and 5)'意味着根据模型的判断,这条评论相当于4星或5星的评价。

3、CPU和GPU推理对比

我们可以对比看一下CPU和GPU推理的效率。
1)使用CPU推理
也可以在CPU上进行推理训练,默认就是使用CPU

pipe.model.device
#输出,默认使用CPU  device(type='cpu')
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)

输出耗时
0.015748867988586424

2)使用GPU进行推理
我们可以对比发现,在GPU下进行推理效率会比CPU 高很多

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

输出
device(type=‘cuda’, index=0)

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)

输出耗时
0.0058620524406433104

4、确定Pipeline参数的使用

使用了Hugging Face的transformers库中的pipeline功能来创建一个问答系统(Question Answering, QA)的接口,并对其进行使用。

#创建了一个专门用于问答任务的Pipeline对象qa_pipe。问答任务是指系统根据给定的问题和上下文,找出并返回答案的任务。
#"question-answering":指定了要执行的任务类型为问答。
#model="uer/roberta-base-chinese-extractive-qa":指定了使用的模型,这个模型是专门为中文的抽取式问答(extractive QA)任务预训练过的模型。
qa_pipe = pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")
qa_pipe

输出,查看pipe的类型
<transformers.pipelines.question_answering.QuestionAnsweringPipeline at 0x1f1eb647880>

效果测试

# question="云南的省会是哪里?":提供了要回答的问题。
# context="云南的省会是昆明":提供了回答问题所需的上下文信息。
# max_answer_len=2:指定了答案的最大长度。在这个例子中,设置为2意味着模型将尝试返回长度为2的最短可能答案。
qa_pipe(question="云南的省会是哪里?", context="云南的省会是昆明", max_answer_len=2)

输出:
{‘score’: 0.876051127910614, ‘start’: 6, ‘end’: 8, ‘answer’: ‘昆明’}

结果参数说明:
‘score’:模型对找到的答案的置信度分数。在这个例子中,分数比较高,表明模型对这个答案是很有信心。
‘start’:答案在给定上下文中的起始索引。
‘end’:答案在给定上下文中的结束索引。
‘answer’:模型找到的答案,这里是根据索引从上下文中提取的文本片段。

四、Pipeline背后的工作

Pipeline背后自动化了从数据预处理到模型预测的整个流程,减少了很多手动操作。比如:
1)分词处理、生成模型输入
2)将模型输入给到模型,进行模型推理
3)归一化:获取原始分数、再归一化处理
4)后处理:将模型输出转换为可读的格式。

使用一个预训练的文本分类模型来对给定的文本进行分类,并输出预测的标签

1、导入依赖,创建模型

#这行代码尝试从transformers库中导入所有公共对象。通常,这种导入方式不推荐使用,因为它可能会导入大量不相关的对象,造成命名空间的混乱。
from transformers import *
import torch # PyTorch是一个开源的机器学习库,广泛用于深度学习。

# 加载与预训练模型相对应的分词器
tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
# 加载预训练的文本分类模型。
model = AutoModelForSequenceClassification.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")

2、分词处理、生成模型输入

#定义了要进行分类的输入文本
input_text = "今天天气好晴朗,处处好风光!"
#使用分词器将输入文本转换为模型所需的格式,并指定返回的张量类型为PyTorch张量("pt"代表PyTorch)
#这里的inputs变量将包含分词器处理后的结果,它是一个字典,包含分词器生成的编码张量、注意力掩码(attention mask)等信息
inputs = tokenizer(input_text, return_tensors="pt")
# 打印输出inputs变量,
Inputs

输出结果

{'input_ids': tensor([[ 101,  791, 1921, 1921, 3698, 1962, 3252, 3306, 8024, 1905, 1905, 1962,
         7599, 1045, 8013,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

3、模型推理

#将 **inputs(即经过分词器处理的输入文本)作为参数传递给模型进行推理。

res = model(**inputs)
#打印结果
Res

SequenceClassifierOutput(loss=None, logits=tensor([[-1.0786, 0.9897]], grad_fn=), hidden_states=None, attentions=None)

4、获取原始分数、再归一化处理

##获取了模型的输出logits。Logits是模型在每个可能的类别上的得分或概率,还没有经过概率归一化处理。
logits = res.logits
## 使用PyTorch中的torch.softmax函数对logits进行softmax操作。softmax函数将每个logit值转换为在[0, 1]范围内的概率值,使得所有类别的概率之和为1
## dim=-1表示在最后一个维度上进行softmax操作。在情感分类任务中,通常最后一个维度是类别维度
logits = torch.softmax(logits, dim=-1)
Logits

5、查看概率最高的类别索引

#使用argmax找到logits中概率最高的类别索引,并通过.item()将其转换为一个普通的Python整数。
pred = torch.argmax(logits).item()
#打印结果
Pred

输出: 1

6、查看标签映射

#访问模型配置中的id2label映射,这是一个从索引到标签的映射
model.config.id2label	
#输出如下
{0: 'negative (stars 1, 2 and 3)', 1: 'positive (stars 4 and 5)'}

索引0对应标签’negative (stars 1, 2 and 3)‘,表示负面情感或低星级评价。
索引1对应标签’positive (stars 4 and 5)’,表示正面情感或高星级评价。

7、根据我们得到的索引类别,从标签映射中取出结果

#使用预测得到的类别索引pred从id2label映射中获取对应的标签。
result = model.config.id2label.get(pred)
#打印标签结果
result

输出如下:
‘positive (stars 4 and 5)’
这意味着模型预测输入文本表达的是正面情感,并且根据标签的含义,这相当于4星或5星的高分评价

8、Pipeline使用完整代码样例如下

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# 加载预训练的Tokenizer和Model
tokenizer = AutoTokenizer.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")
model = AutoModelForSequenceClassification.from_pretrained("uer/roberta-base-finetuned-dianping-chinese")

# 对输入文本进行编码
encoded_input = tokenizer("今天天气好晴朗,处处好风光!", return_tensors="pt")

# 模型推理
res = model(**encoded_input)

# 获取并处理logits
logits = res.logits
probabilities = torch.nn.functional.softmax(logits, dim=-1)

# 获取最可能的类别
pred = torch.argmax(probabilities).item()

五、使用Pipeline优化

Pipeline可以极大地简化模型预测的代码。以下是使用Pipeline重写先前示例的优化版本:

from transformers import pipeline

# 创建Pipeline,指定任务类型、模型和分词器
pipe = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0)

# 执行预测
optimized_result = pipe("今天天气好晴朗,处处好风光!")
print(optimized_result)

接下来我们采用Pipeline对我们前面篇章《AI大模型探索之路-训练篇8:大语言模型Transformer库-预训练流程编码体验》中的样例进行优化;主要优化改造“步骤## 8:模型预测”中的相关代码

from transformers import pipeline
#model.config.id2label = id2label
pipe = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0)
#调用执行
pipe(sen)	
#输出
[{'label': 'LABEL_1', 'score': 0.9772003293037415}]

结果会发现,在pipe的使用下,我们只需要一两行代码就搞定了,非常的丝滑。

总结

Pipeline是Hugging Face transformers库中一个功能强大的工具,它允许研究人员和开发者以一种简洁、高效的方式处理复杂的NLP任务。通过自动化常用的NLP流程,Pipeline不仅提高了性能,还使得代码更加易于编写和维护。正确地选择和使用Pipeline对于任何希望利用Transformer模型的NLP项目来说都是至关重要的。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大连宇都环境 | 成都5月水科技大会暨技术装备成果展览会

中华环保联合会水环境治理专业委员会 秘书处 王小雅 13718793867 —— 展位号&#xff1a;A09 —— 一、企业介绍 大连宇都环境成立于2002年&#xff0c;公司20年 MBBR填料产品及工艺技术&#xff0c;&#xff0c;构建了研发、制造、设计、工程、运营链式服务能力&#xff…

CGAL 点云数据生成DSM、DTM、等高线和数据分类

原文链接 CGAL 点云数据生成DSM、DTM、等高线和数据分类 - 知乎 在GIS应用软件中使用的许多传感器(如激光雷达)都会产生密集的点云。这类应用软件通常利用更高级的数据结构&#xff1a;如&#xff1a;不规则三角格网 (TIN)是生成数字高程模型 (DEM) 的基础&#xff0c;也可以利…

docker系列8:容器卷挂载(上)

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…

1.初探MPI——MPI简介

系列文章目录 初探MPI——MPI简介初探MPI——点对点通信初探MPI——集体通信 文章目录 系列文章目录前言一、MPI_COMM_WORLD, size and ranks二、Hello WorldInstructions 总结参考 前言 Message Passing Interface (MPI) 是一种标准化的消息传递库接口规范。该标准是消息传递…

结构体的对齐原则

一、C语言结构体对齐步骤: 1.每个成员对齐 2.总体对齐 二、C语言结构体对齐规则: 1.结构体第一个成员存放在相较于结构体变量起始位置的偏移量为0的位置 2.从第二个成员开始&#xff0c;往后的每一个成员都要对齐到某个对齐数的整数倍处。 对齐数&#xff1a;结构体成员自身的…

C 408—《数据结构》图、查找、排序专题考点(含解析)

目录 Δ前言 六、图 6.1 图的基本概念 6.2 图的存储及基本操作 6.3 图的遍历 6.4 图的应用 七、查找 7.2 顺序查找和折半查找 7.3 树型查找 7.4 B树和B树 7.5 散列表 八、排序 8.2 插入排序 8.3 交换排序 8.4 选择排序 8.5 归并排序和基数排序 8.6 各种内部排序算法的比较及…

33.基础乐理-原调、移调、转调、离调

原调、移调、转调、离调分为两类&#xff1a;原调是一个定义、一个名词&#xff0c;移调、转调、离调可以称之为是技术或者操作&#xff0c;是一种动词。也就是分为名词和动词两类。 原调&#xff1a; 一种音乐原本的调&#xff0c;就是它的原调&#xff0c;或者说按照简谱的调…

Codeforces Round 941 (Div. 2) (A~D)

1966A - Card Exchange 题意&#xff1a; 思路&#xff1a;手玩一下发现当存在某个数字个数超过k个&#xff0c;那么就能一直操作下去。那么答案就是k-1. void solve() {cin >> n >> m;map<int,int>mp;int maxx 1;for(int i 0 ; i < n ; i ){int x;c…

【热闻速递】Google 裁撤 Python研发团队

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 【&#x1f525;热闻速递】Google 裁撤 Python研发团队引入研究结论 【&#x1f5…

Android AOSP探索之Ubantu下Toolbox的安装

文章目录 概述安装Toolbox解决运行的问题 概述 由于最近需要进军android的framework,所以需要工具的支持&#xff0c;之前听说江湖上都流传source insight,我去弄了一个破解版&#xff0c;功能确实强大&#xff0c;但是作为多年android开发的我习惯使用android studio。虽然使…

SpringWebFlux RequestBody多出双引号问题——ProxyPin抓包揪出真凶

缘起 公司有个服务做埋点收集的&#xff0c;可以参考我之前的文章埋点日志最终解决方案&#xff0c;今天突然发现有些数据日志可以输出&#xff0c;但是没法入库。 多出的双引号 查看Flink日志发现了JSON解析失败&#xff0c;Flink是从Kafka拿数据&#xff0c;Kafka本身不处…

2024深圳杯数学建模竞赛D题(东三省数学建模竞赛D题):建立非均质音板振动模型与参数识别模型

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓&#xff08;浏览器打开&#xff09; https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 2024深圳杯数学建模竞赛D题&#xff08;东三省数学建模竞赛D题&#xff0…

深入理解多层感知机MLP

1. 基础理论 神经网络基础&#xff1a; 目标&#xff1a;了解神经网络的结构&#xff0c;包括神经元、权重、偏置和激活函数。 神经网络是由多个层次的神经元组成的网络&#xff0c;它模拟了人脑处理信息的方式。每个神经元可以接收输入、处理输入并生成输出。这一过程涉及到…

Vue项目打包APK----Vue发布App

时隔多年我又来跟新了&#xff0c;今天给大普家及下前端Vue傻瓜式发布App&#xff0c;话不多说直接上干货。 首先准备开发工具HBuilder X&#xff0c;去官网直接下载即可&#xff0c;算了直接给你们上地址吧HBuilderX-高效极客技巧。 打开软件&#xff0c;文件-->新建--&g…

通用漏洞评估系统CVSS4.0简介

文章目录 什么是CVSS&#xff1f;CVSS 漏洞等级分类历史版本的 CVSS 存在哪些问题&#xff1f;CVSS 4.0改进的“命名法”改进的“基本指标”考虑“OT/IOT”新增的“其他指标”CVSS 4.0存在的问题 Reference: 什么是CVSS&#xff1f; 在信息安全评估领域&#xff0c;CVSS为我们…

可视化大屏也在卷组件化,组件绝对是效率利器呀。

组件化设计在B端上应用十分普遍&#xff0c;其实可视化大屏组件更为规范&#xff0c;本期分享组件化设计的好处&#xff0c;至于组件源文件如何获取&#xff0c;大家都懂的。 组件化设计对可视化大屏设计有以下几个方面的帮助&#xff1a; 提高可重用性&#xff1a; 组件化设…

打印x型图案Java

KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的X形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线…

Codeforces Round 942 (Div. 2)

Codeforces Round 942 (Div. 2) Codeforces Round 942 (Div. 2) A. Contest Proposal 题意&#xff1a;给出两个长度为n的非递减排序的ab序列&#xff0c;通过向a序列中插入新元素&#xff0c;然后排序后删除最大元素&#xff0c;使得两个长度为n的排列中每一个 a i a_i ai​…

软件定义汽车落地的五大关键要素

1、架构升级 1.1 软件架构&#xff1a;分层解耦、服务化、API 接口标准化 随着企业向软件定义汽车开发方法的转变&#xff0c;软件架构也需要同步进行升级&#xff0c;引入面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;简称 SOA&#xff09;方法论。…

探索Plotly交互式数据可视化

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Plotly交互式数据可视化 在数据科学和数据分析领域&#xff0c;可视化是一种强大的工具…