🚀 多语言 ernie-m-base-mnli-xnli
多语言 ernie-m-base-mnli-xnli 模型可对 100 种语言进行自然语言推理(NLI),适用于多语言零样本分类任务。该模型在同等规模下,性能优于 RoBERTa 模型。
🚀 快速开始
本模型可用于多语言自然语言推理和零样本分类任务。以下是使用示例:
简单的零样本分类管道
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/ernie-m-base-mnli-xnli")
sequence_to_classify = "Angela Merkel ist eine Politikerin in Deutschland und Vorsitzende der CDU"
candidate_labels = ["politics", "economy", "entertainment", "environment"]
output = classifier(sequence_to_classify, candidate_labels, multi_label=False)
print(output)
NLI 使用场景
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model_name = "MoritzLaurer/ernie-m-base-mnli-xnli"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name).to(device)
premise = "Angela Merkel ist eine Politikerin in Deutschland und Vorsitzende der CDU"
hypothesis = "Emmanuel Macron is the President of France"
input = tokenizer(premise, hypothesis, truncation=True, return_tensors="pt")
output = model(input["input_ids"].to(device))
prediction = torch.softmax(output["logits"][0], -1).tolist()
label_names = ["entailment", "neutral", "contradiction"]
prediction = {name: round(float(pred) * 100, 1) for pred, name in zip(prediction, label_names)}
print(prediction)
✨ 主要特性
- 多语言支持:可对 100 种语言进行自然语言推理。
- 零样本分类:适用于多语言零样本分类任务。
- 性能优越:在同等规模下,性能优于 RoBERTa 模型。
📦 安装指南
ernie-m 架构仅支持 transformers==4.27 或更高版本(截至 2023 年 3 月 3 日尚未发布,会在推理小部件中引发错误)。在 4.27 版本发布之前,若要运行该模型,你需要从源代码安装 transformers:
pip install git+https://github.com/huggingface/transformers
同时安装 sentencepiece 分词器:
pip install sentencepiece
4.27 版本发布后,你可以运行:
pip install transformers[sentencepiece]>=4.27
📚 详细文档
模型描述
这个多语言模型可以对 100 种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。其基础模型由百度基于 Meta 的 RoBERTa 进行预训练(在 CC100 多语言数据集 上预训练)。然后在 XNLI 数据集 上进行微调,该数据集包含 15 种语言的假设 - 前提对,以及英文 MNLI 数据集。该模型由百度在 这篇论文 中提出,在同等规模下,性能优于 RoBERTa 模型。
如果你正在寻找一个更快(但性能稍低)的模型,可以尝试 multilingual-MiniLMv2-L6-mnli-xnli。在同等规模的模型中,mDeBERTa-v3-base-mnli-xnli 在 XNLI 基准测试中表现更好。若追求更好的性能,你可以尝试速度较慢的 ernie-m-large-mnli-xnli。
训练数据
该模型在 XNLI 开发数据集和 MNLI 训练数据集上进行训练。XNLI 开发集包含 2490 条从英语专业翻译为其他 14 种语言的文本(总共 37350 条文本)(详见 这篇论文)。需要注意的是,XNLI 包含 15 种语言的 MNLI 数据集的 15 个机器翻译版本的训练集,但由于这些机器翻译存在质量问题,该模型仅在 XNLI 开发集的专业翻译和原始英文 MNLI 训练集(392702 条文本)上进行训练。不使用机器翻译文本可以避免模型对 15 种语言过拟合;避免对 ernie-m 预训练的其他 85 种语言产生灾难性遗忘;并显著降低训练成本。
训练过程
ernie-m-base-mnli-xnli 使用 Hugging Face 训练器进行训练,使用了以下超参数:
training_args = TrainingArguments(
num_train_epochs=3,
learning_rate=3e-05,
per_device_train_batch_size=16,
gradient_accumulation_steps=2,
per_device_eval_batch_size=16,
warmup_ratio=0.1,
weight_decay=0.01,
fp16=True,
)
评估结果
该模型在 15 种语言的 XNLI 测试集上进行了评估(每种语言 5010 条文本,总共 75150 条)。需要注意的是,多语言 NLI 模型能够在不接收特定语言的 NLI 训练数据的情况下对 NLI 文本进行分类(跨语言迁移)。这意味着该模型也能够对 mDeBERTa 训练的其他 85 种语言进行 NLI,但性能很可能低于 XNLI 中可用的语言。
另外需要注意的是,如果模型中心的其他多语言模型声称在非英语语言上的性能约为 90%,作者很可能在测试过程中出现了错误,因为最新的论文均未显示在 XNLI 上的多语言平均性能比 80% 高出几个百分点(详见 此处 或 此处)。
数据集 |
平均 XNLI |
MNLI-m |
MNLI-mm |
阿拉伯语 |
保加利亚语 |
德语 |
希腊语 |
英语 |
西班牙语 |
法语 |
印地语 |
俄语 |
斯瓦希里语 |
泰语 |
土耳其语 |
乌尔都语 |
越南语 |
中文 |
准确率 |
0.78 |
0.849 |
0.85 |
0.777 |
0.812 |
0.804 |
0.797 |
0.854 |
0.814 |
0.803 |
0.744 |
0.784 |
0.711 |
0.765 |
0.776 |
0.717 |
0.793 |
0.749 |
推理速度(文本/秒,A100,批量大小 = 120) |
3310.0 |
1967.0 |
1944.0 |
3443.0 |
3277.0 |
3338.0 |
2884.0 |
3696.0 |
3439.0 |
3071.0 |
3094.0 |
3222.0 |
3445.0 |
3490.0 |
3690.0 |
3175.0 |
3295.0 |
3096.0 |
🔧 技术细节
模型基于 Meta 的 RoBERTa 架构,先在 CC100 多语言数据集上进行预训练,再在 XNLI 开发数据集和 MNLI 训练数据集上进行微调。通过不使用机器翻译文本,避免了模型过拟合和灾难性遗忘问题,同时降低了训练成本。
📄 许可证
本模型采用 Apache-2.0 许可证。
📋 局限性和偏差
请参考原始 ernie-m 论文和不同 NLI 数据集的相关文献,以了解潜在的偏差。
📖 引用
如果你使用了这个模型,请引用:Laurer, Moritz, Wouter van Atteveldt, Andreu Salleras Casas, and Kasper Welbers. 2022. ‘Less Annotating, More Classifying – Addressing the Data Scarcity Issue of Supervised Machine Learning with Deep Transfer Learning and BERT - NLI’. Preprint, June. Open Science Framework. https://osf.io/74b8k.
💬 合作建议或问题咨询
如果你有问题或合作建议,请通过 m{dot}laurer{at}vu{dot}nl 联系我,或在 LinkedIn 上与我交流。