pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理(NLP)、多模态(Multimodal)等4大类,28小类任务(tasks)。共计覆盖32万个模型
今天介绍NLP自然语言处理的第二篇:问答(question-answering),在huggingface库内有1.2万个问答(question-answering)模型,最典型的是在bert上的改进模型RoBERTa。
问答模型可以从给定的文本中检索问题的答案,这对于在文档中搜索答案非常有用。一些问答模型可以在没有上下文的情况下生成答案!
最初的BERT预训练模型并没有得到很好的训练,导致其在下游任务上的性能比之后发布的模型性能要略差(例如XLNet),但实际上,BERT模型的性能还有提升的空间,通过对BERT预训练过程的优化,可以进一步提升下游任务的表现,并且具有更强的鲁棒性
RoBERTa主要通过以下四种方式来提升BERT性能:
RoBERTa已经被广泛的应用于各类由BERT衍生的模型参数初始化,可以视为是完全体形态的BERT。
RoBERTa只是应用了更好的训练技巧, 因此整体结构是没有发生任何变化的。其模型结构与BERT模型结构相同。
更多关于RoBERTa的原理、预训练和微调方法可以参考【NLP】预训练语言模型——RoBERTa
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)或原始输出数据(例如文本)进行。SquadExample
或列表)——包含问题和上下文的SquadExample
一个或多个。SquadExample
SquadExample
或列表SquadExample
,可选) - 一个或多个SquadExample
包含问题和上下文(将以与传递第一个位置参数相同的方式处理)。SquadExample
或列表SquadExample
,可选) -SquadExample
包含问题和上下文的一个或多个(将以与作为第一个位置参数传递相同的方式处理)。str
或List[str]
)——一个或多个问题(必须与论点结合使用context
)。str
或List[str]
)—— 与问题相关的一个或多个上下文(必须与论点结合使用 question
)。int
,默认为 1)— 返回的答案数量(将按可能性顺序选择)。请注意,如果上下文中没有足够的选项,我们将返回少于 topk 个答案。int
,可选,默认为 128)— 如果上下文太长,无法与模型的问题相匹配,则会将其分成几个部分,并有一定的重叠。此参数控制重叠的大小。int
,可选,默认为 15)——预测答案的最大长度(例如,只考虑长度较短的答案)。int
,可选,默认为 384) — 传递给模型的每个块的标记中整个句子(上下文 + 问题)的最大长度。如果需要,上下文将被分成几个块(使用doc_stride
重叠)。int
,可选,默认为 64) — 标记化后问题的最大长度。如果需要,它将被截断。bool
,可选,默认为False
)——我们是否接受不可能作为答案。bool
,可选,默认为True
)— 尝试将答案与真实单词对齐。提高空格分隔语言的质量。可能会损害非空格分隔语言(如日语或中文)的质量float
)—— 与答案相关的概率。int
) — 答案的字符起始索引(在输入的标记化版本中)。int
) — 答案的字符结束索引(在输入的标记化版本中)。str
) — 问题的答案。采用pipeline,使用google的bert中文版模型bert-base-chinese对文本进行补全。
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["CUDA_VISIBLE_DEVICES"] = "2"
from transformers import pipeline
qa = pipeline(model="deepset/roberta-base-squad2", task="question-answering")
output = qa(question="Where do I live?", context="My name is Wolfgang and I live in Berlin")
print(output)
执行后,自动下载模型文件并进行识别:
在huggingface上,我们将填充蒙版(fill-mask)模型按下载量从高到低排序,总计1.2万个模型,排名第一的当属google-bert/bert-base-uncased。
本文对transformers之pipeline的问答(question-answering)从概述、技术原理、pipeline参数、pipeline实战、模型排名等方面进行介绍,读者可以基于pipeline使用文中的2行代码极简的使用NLP中的问答(question-answering)模型。