Hugging Face的Transformers核心模块:Pipelines(参数说明,各种模型类型调用案例)_huggingfacepipeline
如果电脑配置不够可以参考文章《学AI-撸羊毛-免费GPU服务器-kaggle-每周30小时-可以进行数据训练,大模型微调》 申请免费服务器执行代码。
什么是Pipelines
- 将数据预处理、模型调用、结果后处理三部分组装成的流水线
- 使我们能够直接输入文本便获得最终的答案
Pipelines实现原理
Pipeline类的实现原理,是将多个模型串联起来,形成一个NLP任务的流水线。在流水线的不同位置,使用不同的模型完成不同的子任务。具体而言,Pipeline类将用户输入的文本进行预处理,然后使用预训练模型进行特征提取、模型训练和推理,最终得出任务的结果。Pipeline类支持的任务种类非常广泛,包括但不限于文本分类、命名实体识别、情感分析、问答系统等。
Pipelines 参数
常见任务类型:
“text-classification”: 文本分类任务(如情感分析、主题分类)。
“ner”: 命名实体识别(Named Entity Recognition)。
“sentiment-analysis”: 情感分析。
“summarization”: 文本摘要。
“question-answering”: 问答任务。
“zero-shot-classification”: 零样本分类。
“translation”: 翻译任务。
“text-generation”: 文本生成。
“fill-mask”: 填空任务(如 Masked Language Model)。
其他任务类型根据模型的不同也有所不同。
-1 表示使用 CPU。
0 表示使用第一个 GPU。如果系统中有多个 GPU,可以指定为其他数值(如 1 为第二个 GPU,2 为第三个 GPU)。
“cuda” 或 “cpu” 也可以作为参数指定设备。
说明: 如果不指定,pipeline 会自动根据加载的模型推断框架类型。
如何快速使用Hugging Face上的模型
首先进去模型主页
左手边是模型的任务类型 ,可以选择类型然后找到对应的模型
进去模型页面
如下图,进去模型页面后按步骤点击:
可以看到使用transformers调用的代码:
实例
Text classification(文本分类)
Text classification(文本分类)与任何模态中的分类任务一样,文本分类将一个文本序列(可以是句子级别、段落或者整篇文章)标记为预定义的类别集合之一。文本分类有许多实际应用,其中包括:
情感分析:根据某种极性(如积极或消极)对文本进行标记,以在政治、金融和市场等地方支持决策制定。
内容分类:根据某个主题对文本进行标记,以帮助组织和过滤新闻和社交媒体信息流中的信息(天气、体育、金融等)。
from transformers import pipelinetext_classification = pipeline(\'sentiment-analysis\', model=\"uer/roberta-base-finetuned-dianping-chinese\")text_classification(\"北京上个月召开了两会\")
Token Classification(Token分类)
在任何NLP任务中,文本都经过预处理,将文本序列分成单个单词或子词。这些被称为tokens。
Token Classification(Token分类)将每个token分配一个来自预定义类别集的标签。
两种常见的 Token 分类是:
命名实体识别(NER):根据实体类别(如组织、人员、位置或日期)对token进行标记。NER在生物医学设置中特别受欢迎,可以标记基因、蛋白质和药物名称。
词性标注(POS):根据其词性(如名词、动词或形容词)对标记进行标记。POS对于帮助翻译系统了解两个相同的单词如何在语法上不同很有用(作为名词的银行与作为动词的银行)。
from transformers import pipelineclassifier = pipeline(task=\"ner\")
preds = classifier(\"Hugging Face is a French company based in New York City.\")preds = [ { \"entity\": pred[\"entity\"], \"score\": round(pred[\"score\"], 4), \"index\": pred[\"index\"], \"word\": pred[\"word\"], \"start\": pred[\"start\"], \"end\": pred[\"end\"], } for pred in preds]print(*preds, sep=\"\\n\")
合并实体:
classifier = pipeline(task=\"ner\", grouped_entities=True)classifier(\"Hugging Face is a French company based in New York City.\")
Question Answering(问答)
Question Answering(问答)是另一个token-level的任务,返回一个问题的答案,有时带有上下文(开放领域),有时不带上下文(封闭领域)。每当我们向虚拟助手提出问题时,例如询问一家餐厅是否营业,就会发生这种情况。它还可以提供客户或技术支持,并帮助搜索引擎检索您要求的相关信息。
有两种常见的问答类型:
提取式:给定一个问题和一些上下文,模型必须从上下文中提取出一段文字作为答案,例如:QuestionAnsweringPipeline
生成式:给定一个问题和一些上下文,答案是根据上下文生成的;这种方法由Text2TextGenerationPipeline处理
from transformers import pipelinequestion_answerer = pipeline (task = \"question-answering\")
preds = question_answerer( question=\"What is the capital of China?\", context=\"On 1 October 1949, CCP Chairman Mao Zedong formally proclaimed the People\'s Republic of China in Tiananmen Square, Beijing.\",)print(preds)
Summarization(文本摘要)
Summarization(文本摘要)从较长的文本中创建一个较短的版本,同时尽可能保留原始文档的大部分含义。摘要是一个序列到序列的任务;它输出比输入更短的文本序列。有许多长篇文档可以进行摘要,以帮助读者快速了解主要要点。法案、法律和财务文件、专利和科学论文等文档可以摘要,以节省读者的时间并作为阅读辅助工具。
与问答类似,摘要有两种类型:
提取式:从原始文本中识别和提取最重要的句子
生成式:从原始文本中生成目标摘要(可能包括输入文件中没有的新单词);SummarizationPipeline使用生成式方法
from transformers import pipelinesummarizer = pipeline ( task = \"summarization\", model = \"t5-base\", min_length = 8, max_length = 32,)
summarizer(\"On your Kaggle journey, we mark certain milestones with tiers. Everyone starts as a “Novice,” but with these four actions, you can get better oriented with Kaggle and move up to the Contributor tier.\")
Audio classification(音频分类)
Audio classification(音频分类)是一项将音频数据从预定义的类别集合中进行标记的任务。这是一个广泛的类别,具有许多具体的应用,其中一些包括:
声学场景分类:使用场景标签(“办公室”、“海滩”、“体育场”)对音频进行标记。
声学事件检测:使用声音事件标签(“汽车喇叭声”、“鲸鱼叫声”、“玻璃破碎声”)对音频进行标记。
标记:对包含多种声音的音频进行标记(鸟鸣、会议中的说话人识别)。
音乐分类:使用流派标签(“金属”、“嘻哈”、“乡村”)对音乐进行标记。
情感识别(ER)为每个话语预测一个情感类别。我们采用了最广泛使用的ER数据集IEMOCAP,并遵循传统的评估协议:我们删除不平衡的情感类别,只保留最后四个具有相似数量数据点的类别,并在标准分割的五折交叉验证上进行评估。评估指标是准确率(ACC)。
在使用前要确保 已经安装了音频数据处理包:ffmpeg
$apt update & apt upgrade$apt install -y ffmpeg$pip install ffmpeg ffmpeg-python
from transformers import pipelineclassifier = pipeline(task=\"audio-classification\", model=\"superb/hubert-base-superb-er\")
preds = classifier(\"https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac\") preds
Automatic speech recognition(ASR 自动语音识别)
Automatic speech recognition(自动语音识别)将语音转录为文本。这是最常见的音频任务之一,部分原因是因为语音是人类交流的自然形式。如今,ASR系统嵌入在智能技术产品中,如扬声器、电话和汽车。我们可以要求虚拟助手播放音乐、设置提醒和告诉我们天气。
from transformers import pipelinetranscriber = pipeline( task = \"automatic-speech-recognition\", model = \"openai/whisper-small\")
preds = transcriber(\"https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/1.flac\") preds
Image Classificaiton(图像分类)
Image Classificaiton(图像分类)将整个图像从预定义的类别集合中进行标记。像大多数分类任务一样,图像分类有许多实际用例,其中一些包括:
- 医疗保健:标记医学图像以检测疾病或监测患者健康状况
- 环境:标记卫星图像以监测森林砍伐、提供野外管理信息或检测野火
- 农业:标记农作物图像以监测植物健康或用于土地使用监测的卫星图像
- 生态学:标记动物或植物物种的图像以监测野生动物种群或跟踪濒危物种
from transformers import pipelineclassifier = pipeline( task = \"image-classification\" )
preds = classifier (\"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg\")preds = [{\"score\": round(pred[\"score\"],4) , \"label\": pred[\"label\"]} for pred in preds ]print(*preds, sep = \"\\n\")
Object Detection(目标检测)
与图像分类不同,目标检测在图像中识别多个对象以及这些对象在图像中的位置(由边界框定义)。目标检测的一些示例应用包括:
自动驾驶车辆:检测日常交通对象,如其他车辆、行人和红绿灯
遥感:灾害监测、城市规划和天气预报
缺陷检测:检测建筑物中的裂缝或结构损坏,以及制造业产品缺陷
from transformers import pipelinedetector = pipeline (task = \"object-detection\")
preds = detector (\"https://inews.gtimg.com/om_bt/ORUA2A1fXPkHl_u6JYOzHphTFd6OLaF4Kaofdc1Bc9DUAAA/1000\")print(*preds, sep = \"\\n\")