说明文档
模型描述:bge-m3-zeroshot-v2.0
zeroshot-v2.0 系列模型
该系列模型专为使用 Hugging Face Pipeline 进行高效的零样本分类而设计。 这些模型无需训练数据即可进行分类,可同时在 GPU 和 CPU 上运行。 最新的零样本分类器概述可在我的 Zeroshot Classifier Collection 中查看。
该 zeroshot-v2.0 系列模型的主要更新是,部分模型已针对有严格许可要求的用户进行了完全商业友好数据的训练。
这些模型可以执行一种通用分类任务:给定一段文本,判断一个假设是"真"还是"非真"
(entailment vs. not_entailment)。
该任务格式基于自然语言推理任务(NLI)。
该任务具有通用性,任何分类任务都可以通过 Hugging Face Pipeline 重新构建为此任务形式。
训练数据
名称中带有 "-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 数据集:(MNLI、FEVER-NLI)。 添加这些数据集是为了提高泛化能力。
- 名称中没有 "
-c" 的模型还包含了更广泛的训练数据混合,许可证也更加多样:ANLI、WANALI、LingNLI, 以及 此列表 中所有used_in_v1.1==True的数据集。
如何使用模型
#!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") # 在此更改模型标识符
output = zeroshot_classifier(text, classes_verbalized, hypothesis_template=hypothesis_template, multi_label=False)
print(output)
multi_label=False 强制模型只决定一个类别。multi_label=True 允许模型选择多个类别。
指标
模型使用 f1_macro 指标在 28 个不同的文本分类任务上进行了评估。
主要参考点是 facebook/bart-large-mnli,在撰写本文时(2024.04.03),这是使用最广泛的商业友好型零样本分类器。

| facebook/bart-large-mnli | roberta-base-zeroshot-v2.0-c | roberta-large-zeroshot-v2.0-c | deberta-v3-base-zeroshot-v2.0-c | deberta-v3-base-zeroshot-v2.0 (fewshot) | deberta-v3-large-zeroshot-v2.0-c | deberta-v3-large-zeroshot-v2.0 (fewshot) | bge-m3-zeroshot-v2.0-c | bge-m3-zeroshot-v2.0 (fewshot) | |
|---|---|---|---|---|---|---|---|---|---|
| all datasets mean | 0.497 | 0.587 | 0.622 | 0.619 | 0.643 (0.834) | 0.676 | 0.673 (0.846) | 0.59 | (0.803) |
| amazonpolarity (2) | 0.937 | 0.924 | 0.951 | 0.937 | 0.943 (0.961) | 0.952 | 0.956 (0.968) | 0.942 | (0.951) |
| imdb (2) | 0.892 | 0.871 | 0.904 | 0.893 | 0.899 (0.936) | 0.923 | 0.918 (0.958) | 0.873 | (0.917) |
| appreviews (2) | 0.934 | 0.913 | 0.937 | 0.938 | 0.945 (0.948) | 0.943 | 0.949 (0.962) | 0.932 | (0.954) |
| yelpreviews (2) | 0.948 | 0.953 | 0.977 | 0.979 | 0.975 (0.989) | 0.988 | 0.985 (0.994) | 0.973 | (0.978) |
| rottentomatoes (2) | 0.83 | 0.802 | 0.841 | 0.84 | 0.86 (0.902) | 0.869 | 0.868 (0.908) | 0.813 | (0.866) |
| emotiondair (6) | 0.455 | 0.482 | 0.486 | 0.459 | 0.495 (0.748) | 0.499 | 0.484 (0.688) | 0.453 | (0.697) |
| emocontext (4) | 0.497 | 0.555 | 0.63 | 0.59 | 0.592 (0.799) | 0.699 | 0.676 (0.81) | 0.61 | (0.798) |
| empathetic (32) | 0.371 | 0.374 | 0.404 | 0.378 | 0.405 (0.53) | 0.447 | 0.478 (0.555) | 0.387 | (0.455) |
| financialphrasebank (3) | 0.465 | 0.562 | 0.455 | 0.714 | 0.669 (0.906) | 0.691 | 0.582 (0.913) | 0.504 | (0.895) |
| banking77 (72) | 0.312 | 0.124 | 0.29 | 0.421 | 0.446 (0.751) | 0.513 | 0.567 (0.766) | 0.387 | (0.715) |
| massive (59) | 0.43 | 0.428 | 0.543 | 0.512 | 0.52 (0.755) | 0.526 | 0.518 (0.789) | 0.414 | (0.692) |
| wikitoxic_toxicaggreg (2) | 0.547 | 0.751 | 0.766 | 0.751 | 0.769 (0.904) | 0.741 | 0.787 (0.911) | 0.736 | (0.9) |
| wikitoxic_obscene (2) | 0.713 | 0.817 | 0.854 | 0.853 | 0.869 (0.922) | 0.883 | 0.893 (0.933) | 0.783 | (0.914) |
| wikitoxic_threat (2) | 0.295 | 0.71 | 0.817 | 0.813 | 0.87 (0.946) | 0.827 | 0.879 (0.952) | 0.68 | (0.947) |
| wikitoxic_insult (2) | 0.372 | 0.724 | 0.798 | 0.759 | 0.811 (0.912) | 0.77 | 0.779 (0.924) | 0.783 | (0.915) |
| wikitoxic_identityhate (2) | 0.473 | 0.774 | 0.798 | 0.774 | 0.765 (0.938) | 0.797 | 0.806 (0.948) | 0.761 | (0.931) |
| hateoffensive (3) | 0.161 | 0.352 | 0.29 | 0.315 | 0.371 (0.862) | 0.47 | 0.461 (0.847) | 0.291 | (0.823) |
| hatexplain (3) | 0.239 | 0.396 | 0.314 | 0.376 | 0.369 (0.765) | 0.378 | 0.389 (0.764) | 0.29 | (0.729) |
| biasframes_offensive (2) | 0.336 | 0.571 | 0.583 | 0.544 | 0.601 (0.867) | 0.644 | 0.656 (0.883) | 0.541 | (0.855) |
| biasframes_sex (2) | 0.263 | 0.617 | 0.835 | 0.741 | 0.809 (0.922) | 0.846 | 0.815 (0.946) | 0.748 | (0.905) |
| biasframes_intent (2) | 0.616 | 0.531 | 0.635 | 0.554 | 0.61 (0.881) | 0.696 | 0.687 (0.891) | 0.467 | (0.868) |
| agnews (4) | 0.703 | 0.758 | 0.745 | 0.68 | 0.742 (0.898) | 0.819 | 0.771 (0.898) | 0.687 | (0.892) |
| yahootopics (10) | 0.299 | 0.543 | 0.62 | 0.578 | 0.564 (0.722) | 0.621 | 0.613 (0.738) | 0.587 | (0.711) |
| trueteacher (2) | 0.491 | 0.469 | 0.402 | 0.431 | 0.479 (0.82) | 0.459 | 0.538 (0.846) | 0.471 | (0.518) |
| spam (2) | 0.505 | 0.528 | 0.504 | 0.507 | 0.464 (0.973) | 0.74 | 0.597 (0.983) | 0.441 | (0.978) |
| wellformedquery (2) | 0.407 | 0.333 | 0.333 | 0.335 | 0.491 (0.769) | 0.334 | 0.429 (0.815) | 0.361 | (0.718) |
| manifesto (56) | 0.084 | 0.102 | 0.182 | 0.17 | 0.187 (0.376) | 0.258 | 0.256 (0.408) | 0.147 | (0.331) |
| capsotu (21) | 0.34 | 0.479 | 0.523 | 0.502 | 0.477 (0.664) | 0.603 | 0.502 (0.686) | 0.472 | (0.644) |
这些数字表示零样本性能,因为这些数据集的数据未添加到训练混合中。
请注意,标题中没有 "-c" 的模型进行了两次评估:一次运行不包含这 28 个数据集的任何数据,以测试纯零样本性能(各列中的第一个数字),
以及最终运行包含每个数据集每个类最多 500 个训练数据点(列中括号内的第二个数字,"fewshot")。没有模型在测试数据上进行训练。
不同数据集的详细信息可在此处查看:https://github.com/MoritzLaurer/zeroshot-classifier/blob/main/v1_human_data/datasets_overview.csv
何时使用哪个模型
- deberta-v3-zeroshot vs. roberta-zeroshot:deberta-v3 表现明显优于 roberta,但速度稍慢。 roberta 直接兼容 Hugging Face 的生产推理 TEI 容器和 flash attention。 这些容器是生产用例的良好选择。简而言之:为了准确性,请使用 deberta-v3 模型。 如果生产推理速度是您关注的焦点,您可以考虑使用 roberta 模型(例如在 TEI 容器和 HF Inference Endpoints 中)。
- 商业用例:标题中带有 "
-c" 的模型保证仅使用商业友好数据训练。 没有 "-c" 的模型使用了更多数据,表现更好,但包含非商业许可的数据。 法律意见分歧于这些训练数据是否影响训练模型的许可。对于有严格法律要求的用户, 建议使用标题中带有 "-c" 的模型。 - 多语言/非英语用例:请使用 bge-m3-zeroshot-v2.0 或 bge-m3-zeroshot-v2.0-c。 请注意,多语言模型的表现不如英语模型。因此,您也可以首先使用 EasyNMT 等库将文本机器翻译成英语, 然后将任何英语模型应用于翻译后的数据。如果您的团队不会说数据中的所有语言,机器翻译也便于验证。
- 上下文窗口:
bge-m3模型最多可处理 8192 个 token。其他模型最多可处理 512 个 token。请注意,较长的文本输入会使 模型变慢并降低性能,因此如果您只处理最多 400~ 词/1 页的文本,请使用 deberta 等模型以获得更好的性能。 - 有关新模型的最新更新,请始终查看 Zeroshot Classifier Collection。
复现
复现代码可在此处的 v2_synthetic_data 目录中获取:https://github.com/MoritzLaurer/zeroshot-classifier/tree/main
局限性及偏差
该模型只能进行文本分类任务。
偏差可能来自底层基础模型、人工 NLI 训练数据和 Mixtral 生成的合成数据。
许可
基础模型以 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@huggingface.co 或 LinkedIn 联系我。
灵活使用和"提示工程"
您可以通过更改零样本 pipeline 的 hypothesis_template 来制定自己的假设。
与 LLMs 的"提示工程"类似,您可以测试 hypothesis_template 和表达类别的不同表述方式来提高性能。
from transformers import pipeline
text = "Angela Merkel is a politician in Germany and leader of the CDU"
# 表述方式 1
hypothesis_template = "This text is about {}"
classes_verbalized = ["politics", "economy", "entertainment", "environment"]
# 表述方式 2,根据您的用例
hypothesis_template = "The topic of this text is {}"
classes_verbalized = ["political activities", "economic policy", "entertainment or music", "environmental protection"]
# 测试不同的表述方式
zeroshot_classifier = pipeline("zero-shot-classification", model="MoritzLaurer/deberta-v3-large-zeroshot-v2.0") # 在此更改模型标识符
output = zeroshot_classifier(text, classes_verbalized, hypothesis_template=hypothesis_template, multi_label=False)
print(output)
MoritzLaurer/bge-m3-zeroshot-v2.0
作者 MoritzLaurer
创建时间: 2024-04-02 09:31:59+00:00
更新时间: 2024-04-22 11:09:02+00:00
在 Hugging Face 上查看