🚀 多语言MiniLMv2-L6-mnli-xnli
本多语言模型可对100多种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。它能有效解决在多种语言环境下进行文本分类和推理时数据稀缺的问题,为跨语言的文本处理提供了高效的解决方案。
🚀 快速开始
本多语言模型能够在100多种语言上执行自然语言推理(NLI)任务,因此也适用于多语言零样本分类。其底层的多语言MiniLM - L6模型由微软创建,是从XLM - RoBERTa - large中提炼而来(详见原论文以及此仓库中的最新信息)。随后,该模型在包含15种语言的假设 - 前提对的XNLI数据集以及英文MNLI数据集上进行了微调。
✨ 主要特性
- 多语言支持:支持多种语言,包括阿拉伯语(ar)、保加利亚语(bg)、德语(de)、希腊语(el)、西班牙语(es)、法语(fr)、印地语(hi)、俄语(ru)、斯瓦希里语(sw)、泰语(th)、土耳其语(tr)、乌尔都语(ur)、越南语(vi)和中文(zh)等。
- 零样本分类:适用于零样本分类任务,无需针对特定任务进行大量标注数据的训练。
- 模型蒸馏:通过蒸馏技术,模型体积更小,推理速度更快,内存需求更低。
📦 安装指南
文档未提及具体安装步骤,故跳过此章节。
💻 使用示例
基础用法
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/multilingual-MiniLMv2-L6-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-L6-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-L6-H384-distilled-from-XLMR-Large。
training_args = TrainingArguments(
num_train_epochs=3, # 训练总轮数
learning_rate=4e-05,
per_device_train_batch_size=64, # 训练时每个设备的批次大小
per_device_eval_batch_size=120, # 评估时的批次大小
warmup_ratio=0.06, # 学习率调度器的热身步数
weight_decay=0.01, # 权重衰减强度
)
评估结果
该模型在XNLI测试集的15种语言上进行了评估(每种语言5010篇文本,总共75150篇)。需要注意的是,多语言NLI模型能够在不接收特定语言的NLI训练数据的情况下对NLI文本进行分类(跨语言迁移)。这意味着该模型也能够对其他训练语言进行NLI任务,但性能可能低于XNLI中可用的语言。
论文中报告的多语言MiniLM - L6的平均XNLI性能为0.68(详见表11)。此重新实现的平均性能为0.713。性能的提升可能得益于在训练数据中加入了MNLI,并且该模型是从XLM - RoBERTa - large而非 - base(多语言MiniLM - L6 - v2)中提炼而来。
数据集 |
平均XNLI |
阿拉伯语(ar) |
保加利亚语(bg) |
德语(de) |
希腊语(el) |
英语(en) |
西班牙语(es) |
法语(fr) |
印地语(hi) |
俄语(ru) |
斯瓦希里语(sw) |
泰语(th) |
土耳其语(tr) |
乌尔都语(ur) |
越南语(vi) |
中文(zh) |
准确率 |
0.713 |
0.687 |
0.742 |
0.719 |
0.723 |
0.789 |
0.748 |
0.741 |
0.691 |
0.714 |
0.642 |
0.699 |
0.696 |
0.664 |
0.723 |
0.721 |
速度(文本/秒,A100 GPU,评估批次=120) |
6093.0 |
6210.0 |
6003.0 |
6053.0 |
5409.0 |
6531.0 |
6205.0 |
5615.0 |
5734.0 |
5970.0 |
6219.0 |
6289.0 |
6533.0 |
5851.0 |
5970.0 |
6798.0 |
数据集 |
MNLI匹配 |
MNLI不匹配 |
准确率 |
0.782 |
0.8 |
速度(文本/秒,A100 GPU,评估批次=120) |
4430.0 |
4395.0 |
🔧 技术细节
蒸馏模型的主要优点是比其“教师”模型(XLM - RoBERTa - large)更小(推理速度更快,内存需求更低)。缺点是会损失一些大型“教师”模型的性能。为了获得最高的推理速度,建议使用这个6层模型。若追求更高的性能,建议使用[mDeBERTa - v3 - base - mnli - xnli](https://huggingface.co/MoritzLaurer/mDeBERTa - v3 - base - mnli - xnli)(截至2023年2月14日)。
📄 许可证
本模型采用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联系我,或访问[LinkedIn](https://www.linkedin.com/in/moritz - laurer/)。