模型简介
模型特点
模型能力
使用案例
🚀 模型描述:deberta-v3-large-zeroshot-v2.0
本项目的 deberta-v3-large-zeroshot-v2.0
模型属于零样本分类模型,无需训练数据即可完成分类任务,可在GPU和CPU上运行。通过自然语言推理任务(NLI)的任务格式,任何分类任务都能被重新表述为该模型可处理的任务。
🚀 快速开始
本系列模型专为使用Hugging Face管道进行高效零样本分类而设计。这些模型无需训练数据即可进行分类,并且可以在GPU和CPU上运行。最新零样本分类器的概述可在我的 零样本分类器集合 中找到。
✨ 主要特性
- 零样本分类能力:无需训练数据即可完成分类任务。
- 跨平台运行:可在GPU和CPU上运行。
- 通用性强:基于自然语言推理任务(NLI),任何分类任务都可通过Hugging Face管道重新表述为该模型可处理的任务。
- 商业友好:部分模型使用完全商业友好的数据进行训练,满足严格许可要求的用户需求。
📚 详细文档
零样本v2.0系列模型
该系列模型旨在通过Hugging Face管道进行高效的零样本分类。这些模型无需训练数据即可进行分类,并且可以在GPU和CPU上运行。最新零样本分类器的概述可在我的 零样本分类器集合 中找到。
zeroshot-v2.0
系列模型的主要更新是,有几个模型是在完全商业友好的数据上进行训练的,以满足对许可证有严格要求的用户。
这些模型可以完成一个通用的分类任务:给定一段文本,判断一个假设是“真”还是“不真”(entailment
与 not_entailment
)。这个任务格式基于自然语言推理任务(NLI)。这个任务非常通用,任何分类任务都可以通过Hugging Face管道重新表述为这个任务。
训练数据
名称中带有 “-c
” 的模型是在两种完全商业友好的数据上进行训练的:
- 合成数据:使用 Mixtral-8x7B-Instruct-v0.1 生成的合成数据。首先,在与Mistral-large的对话中,为25种职业创建了一个包含500多个不同文本分类任务的列表,并对数据进行了手动整理。然后,使用这些数据作为种子数据,通过Mixtral-8x7B-Instruct-v0.1为这些任务生成了数十万个文本。最终使用的数据集可在 synthetic_zeroshot_mixtral_v0.1 数据集中的
mixtral_written_text_for_tasks_v4
子集中找到。数据整理进行了多次迭代,并将在未来的迭代中得到改进。 - 商业友好的NLI数据集:两个商业友好的NLI数据集(MNLI,FEVER-NLI)。添加这些数据集是为了提高模型的泛化能力。
名称中没有 “-c
” 的模型还包括了更广泛的训练数据,这些数据具有更广泛的许可证:ANLI、WANLI、LingNLI,以及 此列表 中所有 used_in_v1.1==True
的数据集。
何时使用哪种模型
- deberta-v3-零样本与roberta-零样本:deberta-v3的性能明显优于roberta,但速度稍慢。roberta与Hugging Face的生产推理TEI容器和闪存注意力直接兼容。这些容器是生产用例的不错选择。简而言之:为了获得更高的准确性,请使用deberta-v3模型。如果生产推理速度是一个问题,您可以考虑使用roberta模型(例如,在TEI容器和 HF推理端点 中)。
- 商业用例:名称中带有 “
-c
” 的模型保证仅在商业友好的数据上进行训练。名称中没有 “-c
” 的模型在更多数据上进行训练,性能更好,但包含具有非商业许可证的数据。关于这种训练数据是否会影响训练模型的许可证,法律意见存在分歧。对于有严格法律要求的用户,建议使用名称中带有 “-c
” 的模型。 - 多语言/非英语用例:使用 bge-m3-zeroshot-v2.0 或 bge-m3-zeroshot-v2.0-c。请注意,多语言模型的性能不如仅英语模型。因此,您也可以首先使用 EasyNMT 等库将您的文本机器翻译为英语,然后将任何仅英语模型应用于翻译后的数据。如果您的团队不精通数据中的所有语言,机器翻译也有助于验证。
- 上下文窗口:
bge-m3
模型可以处理多达8192个标记。其他模型可以处理多达512个标记。请注意,较长的文本输入会使模型变慢并降低性能,因此如果您只处理最多400个单词/1页的文本,例如使用deberta模型可以获得更好的性能。
最新的模型更新始终可以在 零样本分类器集合 中找到。
局限性和偏差
该模型只能进行文本分类任务。偏差可能来自底层基础模型、人工NLI训练数据以及Mixtral生成的合成数据。
灵活使用和“提示”
您可以通过更改零样本管道的 hypothesis_template
来制定自己的假设。类似于大型语言模型的“提示工程”,您可以测试不同的 hypothesis_template
表述和语言化的类别,以提高性能。
💻 使用示例
基础用法
#!pip install transformers[sentencepiece]
from transformers import pipeline
text = "Angela Merkel is a politician in Germany and leader of the CDU"
hypothesis_template = "This text is about {}"
classes_verbalized = ["politics", "economy", "entertainment", "environment"]
zeroshot_classifier = pipeline("zero-shot-classification", model="MoritzLaurer/deberta-v3-large-zeroshot-v2.0") # change the model identifier here
output = zeroshot_classifier(text, classes_verbalized, hypothesis_template=hypothesis_template, multi_label=False)
print(output)
高级用法
from transformers import pipeline
text = "Angela Merkel is a politician in Germany and leader of the CDU"
# formulation 1
hypothesis_template = "This text is about {}"
classes_verbalized = ["politics", "economy", "entertainment", "environment"]
# formulation 2 depending on your use-case
hypothesis_template = "The topic of this text is {}"
classes_verbalized = ["political activities", "economic policy", "entertainment or music", "environmental protection"]
# test different formulations
zeroshot_classifier = pipeline("zero-shot-classification", model="MoritzLaurer/deberta-v3-large-zeroshot-v2.0") # change the model identifier here
output = zeroshot_classifier(text, classes_verbalized, hypothesis_template=hypothesis_template, multi_label=False)
print(output)
🔧 技术细节
指标
这些模型在28个不同的文本分类任务上使用 f1_macro 指标进行了评估。主要参考点是 facebook/bart-large-mnli
,在撰写本文时(2024年4月3日),它是最常用的商业友好型零样本分类器。
属性 | 详情 |
---|---|
模型类型 | 零样本分类模型 |
训练数据 | 名称中带有 “-c ” 的模型在两种完全商业友好的数据上训练:一是使用 Mixtral-8x7B-Instruct-v0.1 生成的合成数据;二是两个商业友好的NLI数据集(MNLI,FEVER-NLI)。名称中没有 “-c ” 的模型还包括更广泛的训练数据,如ANLI、WANLI、LingNLI等。 |
这些数字表示零样本性能,因为在训练混合中没有添加这些数据集的数据。请注意,名称中没有 “-c
” 的模型进行了两次评估:一次是在不使用这28个数据集中的任何数据的情况下进行的,以测试纯零样本性能(相应列中的第一个数字);最后一次是在每个类别中包含来自这28个数据集的多达500个训练数据点的情况下进行的(列中括号内的第二个数字,“fewshot”)。没有模型在测试数据上进行训练。
不同数据集的详细信息可在此处找到:https://github.com/MoritzLaurer/zeroshot-classifier/blob/main/v1_human_data/datasets_overview.csv
复现
复现代码可在 v2_synthetic_data
目录中找到:https://github.com/MoritzLaurer/zeroshot-classifier/tree/main
📄 许可证
基础模型根据MIT许可证发布。训练数据的许可证因模型而异,请参见上文。
引用
该模型是 此论文 中描述的研究的扩展。
如果您在学术上使用此模型,请引用:
@misc{laurer_building_2023,
title = {Building {Efficient} {Universal} {Classifiers} with {Natural} {Language} {Inference}},
url = {http://arxiv.org/abs/2312.17543},
doi = {10.48550/arXiv.2312.17543},
abstract = {Generative Large Language Models (LLMs) have become the mainstream choice for fewshot and zeroshot learning thanks to the universality of text generation. Many users, however, do not need the broad capabilities of generative LLMs when they only want to automate a classification task. Smaller BERT-like models can also learn universal tasks, which allow them to do any text classification task without requiring fine-tuning (zeroshot classification) or to learn new tasks with only a few examples (fewshot), while being significantly more efficient than generative LLMs. This paper (1) explains how Natural Language Inference (NLI) can be used as a universal classification task that follows similar principles as instruction fine-tuning of generative LLMs, (2) provides a step-by-step guide with reusable Jupyter notebooks for building a universal classifier, and (3) shares the resulting universal classifier that is trained on 33 datasets with 389 diverse classes. Parts of the code we share has been used to train our older zeroshot classifiers that have been downloaded more than 55 million times via the Hugging Face Hub as of December 2023. Our new classifier improves zeroshot performance by 9.4\%.},
urldate = {2024-01-05},
publisher = {arXiv},
author = {Laurer, Moritz and van Atteveldt, Wouter and Casas, Andreu and Welbers, Kasper},
month = dec,
year = {2023},
note = {arXiv:2312.17543 [cs]},
keywords = {Computer Science - Artificial Intelligence, Computer Science - Computation and Language},
}
合作建议或疑问
如果您有问题或合作想法,请通过 moritz{at}huggingface{dot}co 或 LinkedIn 与我联系。
⚠️ 重要提示
没有模型在测试数据上进行训练。
💡 使用建议
您可以通过更改零样本管道的
hypothesis_template
来制定自己的假设,测试不同的表述以提高性能。类似于大型语言模型的“提示工程”,不同的hypothesis_template
和语言化的类别表述可能会带来不同的性能表现。








