🚀 多语言 mDeBERTa-v3-base-mnli-xnli
这个多语言模型可以对100种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。它能帮助用户在多种语言场景下高效地完成文本分类等任务,节省大量标注数据的成本。
📚 详细文档
模型描述
这个多语言模型可以对100种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。基础模型由微软在CC100多语言数据集上进行预训练。然后在XNLI数据集(包含来自15种语言的假设 - 前提对)以及英文MNLI数据集上进行微调。
截至2021年12月,mDeBERTa-base是表现最佳的多语言基础大小的Transformer模型,由微软在这篇论文中提出。
如果你正在寻找一个更小、更快(但性能稍低)的模型,可以尝试multilingual-MiniLMv2-L6-mnli-xnli。
💻 使用示例
基础用法
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/mDeBERTa-v3-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)
高级用法
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model_name = "MoritzLaurer/mDeBERTa-v3-base-mnli-xnli"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
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)
🔧 技术细节
训练数据
该模型在XNLI开发数据集和MNLI训练数据集上进行训练。XNLI开发集由2490篇从英语专业翻译为其他14种语言的文本组成(总共37350篇文本)(见这篇论文)。需要注意的是,XNLI包含15种语言的MNLI数据集的15个机器翻译版本的训练集,但由于这些机器翻译存在质量问题,该模型仅在XNLI开发集的专业翻译文本和原始英文MNLI训练集(392702篇文本)上进行训练。不使用机器翻译文本可以避免模型对15种语言过拟合;避免对mDeBERTa预训练的其他85种语言产生灾难性遗忘;并显著降低训练成本。
训练过程
mDeBERTa-v3-base-mnli-xnli使用Hugging Face训练器进行训练,使用了以下超参数:
training_args = TrainingArguments(
num_train_epochs=2, # total number of training epochs
learning_rate=2e-05,
per_device_train_batch_size=16, # batch size per device during training
per_device_eval_batch_size=16, # batch size for evaluation
warmup_ratio=0.1, # number of warmup steps for learning rate scheduler
weight_decay=0.06, # strength of weight decay
)
评估结果
该模型在XNLI测试集的15种语言上进行评估(每种语言5010篇文本,总共75150篇)。需要注意的是,多语言NLI模型能够在不接收特定语言的NLI训练数据的情况下对NLI文本进行分类(跨语言迁移)。这意味着该模型也能够对mDeBERTa训练的其他85种语言进行NLI,但性能很可能低于XNLI中可用的语言。
此外,如果模型中心的其他多语言模型声称在非英语语言上的性能约为90%,作者很可能在测试过程中犯了错误,因为最新的论文中没有一篇显示在XNLI上的多语言平均性能比80%高出几个百分点(见这里或这里)。
语言 |
准确率 |
平均 |
0.808 |
阿拉伯语 (ar) |
0.802 |
保加利亚语 (bg) |
0.829 |
德语 (de) |
0.825 |
希腊语 (el) |
0.826 |
英语 (en) |
0.883 |
西班牙语 (es) |
0.845 |
法语 (fr) |
0.834 |
印地语 (hi) |
0.771 |
俄语 (ru) |
0.813 |
斯瓦希里语 (sw) |
0.748 |
泰语 (th) |
0.793 |
土耳其语 (tr) |
0.807 |
乌尔都语 (ur) |
0.740 |
越南语 (vi) |
0.795 |
中文 (zh) |
0.8116 |
📄 许可证
本项目采用MIT许可证。
局限性和偏差
请参考原始的DeBERTa - V3论文和不同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联系我,或在领英上与我交流。
调试与问题解决
需要注意的是,DeBERTa - v3于2021年末发布,较旧版本的HF Transformers似乎在运行该模型时存在问题(例如,导致分词器出现问题)。使用Transformers >= 4.13或更高版本可能会解决一些问题。另外,mDeBERTa目前不支持FP16,详情见:https://github.com/microsoft/DeBERTa/issues/77
⚠️ 重要提示
若模型中心的其他多语言模型声称在非英语语言上的性能约为90%,作者很可能在测试过程中犯了错误。
💡 使用建议
使用Transformers >= 4.13或更高版本可能会解决模型运行时的一些问题。