语言:
- 多语言
- 英语
- 阿拉伯语
- 保加利亚语
- 德语
- 希腊语
- 西班牙语
- 法语
- 印地语
- 俄语
- 斯瓦希里语
- 泰语
- 土耳其语
- 乌尔都语
- 越南语
- 中文
许可证: apache-2.0
标签:
- 零样本分类
- 文本分类
- 自然语言推理
- pytorch
评估指标:
- 准确率
数据集:
- multi_nli
- xnli
管道标签: 零样本分类
小部件示例:
- 文本: "安格拉·默克尔是德国的一位政治家,也是基民盟的主席"
候选标签: "政治, 经济, 娱乐, 环境"
多语言ernie-m-base-mnli-xnli模型
模型描述
这款多语言模型能在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。
使用方法
简易零样本分类流程
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/ernie-m-base-mnli-xnli")
sequence_to_classify = "安格拉·默克尔是德国的一位政治家,也是基民盟的主席"
candidate_labels = ["政治", "经济", "娱乐", "环境"]
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 = "安格拉·默克尔是德国的一位政治家,也是基民盟的主席"
hypothesis = "埃马纽埃尔·马克龙是法国总统"
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 = ["蕴含", "中立", "矛盾"]
prediction = {name: round(float(pred) * 100, 1) for pred, name in zip(prediction, label_names)}
print(prediction)
训练数据
本模型在XNLI开发集和MNLI训练集上训练。XNLI开发集包含2490条从英语专业翻译至14种其他语言的文本(总计37350条)(参见该论文)。注意:XNLI包含15种语言的MNLI数据集机器翻译版本,但由于翻译质量问题,本模型仅使用XNLI开发集中的专业翻译文本和原始英文MNLI训练集(392702条文本)。避免使用机器翻译文本可防止模型过拟合15种语言、防止遗忘ernie-m预训练的其他85种语言,并显著降低训练成本。
训练参数
使用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,
)
评估结果
在XNLI测试集(15种语言,每种5010条文本,总计75150条)上评估。注意:多语言NLI模型无需特定语言的NLI训练数据即可分类(跨语言迁移),意味着模型也能处理ernie-m预训练的其余85种语言,但性能可能低于XNLI包含的语言。
若其他多语言模型声称在非英语语言上达到约90%准确率,作者可能在测试时存在错误,因最新研究显示XNLI多语言平均性能仅略高于80%(参见此处或此处)。
数据集 |
avg_xnli |
mnli_m |
mnli_mm |
ar |
bg |
de |
el |
en |
es |
fr |
hi |
ru |
sw |
th |
tr |
ur |
vi |
zh |
准确率 |
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, batch=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 |
局限与偏差
请参考原始ernie-m论文及不同NLI数据集文献了解潜在偏差。
引用
若使用本模型,请引用:Laurer, Moritz等。《Less Annotating, More Classifying – Addressing the Data Scarcity Issue of Supervised Machine Learning with Deep Transfer Learning and BERT - NLI》。2022年6月预印本。Open Science Framework。https://osf.io/74b8k。
合作或问题咨询
如有疑问或合作意向,请联系m{dot}laurer{at}vu{dot}nl或访问LinkedIn
调试与问题
ernie-m架构仅支持transformers==4.27或更高版本(截至2023年3月3日尚未发布,导致推理小部件报错)。在4.27版本发布前,需通过pip install git+https://github.com/huggingface/transformers
安装transformers源码,并通过pip install sentencepiece
安装sentencepiece分词器。发布后可通过pip install transformers[sentencepiece]>=4.27
安装。