pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型
今天介绍NLP自然语言处理的第十篇:零样本文本分类(zero-shot-classification),在huggingface库内有313个零样本文本分类(zero-shot-classification)模型。
零样本文本分类是自然语言处理中的一项任务,其中模型在一组标记的示例上进行训练,但随后能够从以前看不见的类别中对新示例进行分类。
BART,一种用于预训练序列到序列模型的去噪自动编码器。BART 的训练方式是 (1) 使用任意噪声函数破坏文本,以及 (2) 学习模型以重建原始文本。它使用基于标准 Tranformer 的神经机器翻译架构,尽管它很简单,但可以看作是 BERT(由于双向编码器)、GPT(使用从左到右的解码器)和许多其他较新的预训练方案的泛化。
str
或ModelCard
,可选) — 属于此管道模型的模型卡。str
,可选)— 要使用的框架,"pt"
适用于 PyTorch 或"tf"
TensorFlow。必须安装指定的框架。str
,默认为""
)— 管道的任务标识符。int
,可选,默认为 8)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的工作者数量。int
,可选,默认为 1)— 当管道将使用DataLoader(传递数据集时,在 Pytorch 模型的 GPU 上)时,要使用的批次的大小,对于推理来说,这并不总是有益的,请阅读使用管道进行批处理。int
,可选,默认为 -1)— CPU/GPU 支持的设备序号。将其设置为 -1 将利用 CPU,设置为正数将在关联的 CUDA 设备 ID 上运行模型。您可以传递本机torch.device
或str
太str
或torch.dtype
,可选) - 直接发送model_kwargs
(只是一种更简单的快捷方式)以使用此模型的可用精度(torch.float16
,,torch.bfloat16
...或"auto"
)bool
,可选,默认为False
)——标志指示管道的输出是否应以序列化格式(即 pickle)或原始输出数据(例如文本)进行。str
或List[str]
)——如果模型输入太大,则要分类的序列将被截断。str
或List[str]
)— 用于将每个序列归类的可能的类标签集。可以是单个标签、逗号分隔的标签字符串或标签列表。str
,可选,默认为"This example is {}."
) — 用于将每个标签转换为 NLI 样式假设的模板。此模板必须包含 {} 或类似语法,以便将候选标签插入到模板中。例如,默认模板是 ,"This example is {}."
使用候选标签"sports"
,它将像 一样输入到模型中"<cls> sequence to classify <sep> This example is sports . <sep>"
。默认模板在许多情况下效果很好,但根据任务设置尝试使用不同的模板可能是值得的。bool
,可选,默认为False
)— 多个候选标签是否可以为真。如果为False
,则对分数进行归一化,使得每个序列的标签似然度之和为 1。如果为True
,则将标签视为独立,并通过对蕴涵分数与矛盾分数进行 softmax 来对每个候选的概率进行归一化。str
) — 这是输出的序列。List[str]
)——按可能性排序的标签。List[float]
)——每个标签的概率。基于pipeline的zero-shot-classification任务,采用bart-large-mnli进行零样本文本分类,代码如下:
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
from transformers import pipeline
oracle = pipeline(model="facebook/bart-large-mnli")
output=oracle(
"I have a problem with my iphone that needs to be resolved asap!!",
candidate_labels=["urgent", "not urgent", "phone", "tablet", "computer"],
)
print(output)
oracle(
"I have a problem with my iphone that needs to be resolved asap!!",
candidate_labels=["english", "german"],
)
print(output)
执行后,自动下载模型文件并进行识别:
在huggingface上,我们将零样本分类(zero-shot-classification)模型按下载量从高到低排序,总计313个模型,文中facebook的bart排名第一。
本文对transformers之pipeline的零样本文本分类(zero-shot-classification)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用NLP中的零样本文本分类(zero-shot-classification)模型。