🚀 多语言MiniLMv2-L12-mnli-xnli
本多语言模型可对100多种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。它能有效解决不同语言文本分类数据稀缺的问题,为多语言处理提供高效的解决方案。
🚀 快速开始
本多语言模型可对100多种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。
✨ 主要特性
- 多语言支持:能够在100 + 种语言上执行自然语言推理(NLI),适用于多语言零样本分类。
- 模型蒸馏优势:相较于XLM - RoBERTa - large,蒸馏后的模型体积更小,推理速度更快,内存需求更低。
- 训练数据优质:使用XNLI开发集的专业翻译文本和原始英文MNLI训练集进行训练,避免了机器翻译质量问题,降低过拟合风险,减少训练成本。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/multilingual-MiniLMv2-L12-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/multilingual-MiniLMv2-L12-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种语言过拟合,避免对预训练的其他语言产生灾难性遗忘,并显著降低训练成本。
训练过程
该模型使用Hugging Face训练器进行训练,采用以下超参数。确切的基础模型是mMiniLMv2 - L12 - H384 - distilled - from - XLMR - Large。
training_args = TrainingArguments(
num_train_epochs=3, # total number of training epochs
learning_rate=4e-05,
per_device_train_batch_size=64, # batch size per device during training
per_device_eval_batch_size=120, # batch size for evaluation
warmup_ratio=0.06, # number of warmup steps for learning rate scheduler
weight_decay=0.01, # strength of weight decay
)
评估结果
该模型在XNLI测试集的15种语言上进行评估(每种语言5010条文本,总共75150条)。需要注意的是,多语言NLI模型能够在不接收特定语言的NLI训练数据的情况下对NLI文本进行分类(跨语言迁移)。这意味着该模型也能够对其训练过的其他语言进行NLI,但性能可能低于XNLI中可用的语言。
论文中报告的multilingual - MiniLM - L12的平均XNLI性能为0.711(见表11)。此重新实现的平均性能为0.75。性能的提升可能得益于在训练数据中加入了MNLI,并且该模型是从XLM - RoBERTa - large而不是 - base(multilingual - MiniLM - L12 - v2)蒸馏而来。
数据集 |
平均XNLI |
阿拉伯语(ar) |
保加利亚语(bg) |
德语(de) |
希腊语(el) |
英语(en) |
西班牙语(es) |
法语(fr) |
印地语(hi) |
俄语(ru) |
斯瓦希里语(sw) |
泰语(th) |
土耳其语(tr) |
乌尔都语(ur) |
越南语(vi) |
中文(zh) |
准确率 |
0.75 |
0.73 |
0.78 |
0.762 |
0.754 |
0.821 |
0.779 |
0.775 |
0.724 |
0.76 |
0.689 |
0.738 |
0.732 |
0.7 |
0.762 |
0.751 |
速度(文本/秒,A100 GPU,评估批次 = 120) |
4535.0 |
4629.0 |
4417.0 |
4500.0 |
3938.0 |
4959.0 |
4634.0 |
4152.0 |
4190.0 |
4368.0 |
4630.0 |
4698.0 |
4929.0 |
4291.0 |
4420.0 |
5275.0 |
数据集 |
mnli_m |
mnli_mm |
准确率 |
0.818 |
0.831 |
速度(文本/秒,A100 GPU,评估批次 = 120) |
2912.0 |
2902.0 |
🔧 技术细节
本模型基于微软创建的multilingual - MiniLM - L12模型,该模型是从XLM - RoBERTa - large蒸馏而来。通过在XNLI开发集和MNLI训练集上进行微调,使其具备多语言自然语言推理和零样本分类的能力。蒸馏模型虽然在性能上较原模型有所损失,但在速度和内存使用上有显著优势。
📄 许可证
本项目采用MIT许可证。
⚠️ 重要提示
请查阅关于不同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联系我,或在领英上与我交流。