语言:
- 多语言
- 英语
- 阿拉伯语
- 保加利亚语
- 德语
- 希腊语
- 西班牙语
- 法语
- 印地语
- 俄语
- 斯瓦希里语
- 泰语
- 土耳其语
- 乌尔都语
- 越南语
- 中文
许可证: mit
标签:
- 零样本分类
- 文本分类
- 自然语言推理
- pytorch
评估指标:
- 准确率
数据集:
- multi_nli
- xnli
管道标签: 零样本分类
小部件示例:
- 文本: "Angela Merkel ist eine Politikerin in Deutschland und Vorsitzende der CDU"
候选标签: "政治, 经济, 娱乐, 环境"
多语言MiniLMv2-L6-mnli-xnli模型
模型描述
该多语言模型能够对100多种语言执行自然语言推理(NLI),因此也适用于多语言零样本分类。其基础的多语言MiniLM-L6模型由微软开发,通过蒸馏XLM-RoBERTa-large模型得到(详见原论文及此仓库中的最新信息)。随后,模型在XNLI数据集(包含15种语言的假设-前提对)和英语MNLI数据集上进行了微调。
蒸馏模型的主要优势在于体积更小(推理速度更快,内存需求更低),但性能上会略逊于原始大模型。对于追求极致推理速度的场景,推荐使用这个6层模型;若更注重性能,建议选用mDeBERTa-v3-base-mnli-xnli(截至2023年2月14日)。
使用方法
简易零样本分类流程
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/multilingual-MiniLMv2-L6-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 "cpu")
model_name = "MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
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种特定语言,保持预训练语言能力,并显著降低训练成本。
训练参数
采用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, # 权重衰减强度
)
评估结果
在15种语言的XNLI测试集(每种语言5010条,总计75150条)上评估。多语言NLI模型具备跨语言迁移能力,即使未接受特定语言的NLI训练数据也能进行分类,但性能可能低于XNLI包含的语言。
原论文报告的多语言MiniLM-L6平均XNLI性能为0.68(表11),本再实现版本达到0.713,性能提升可能源于MNLI训练数据的加入及基于XLM-RoBERTa-large的蒸馏(v2版本)。
数据集 |
平均XNLI |
阿拉伯语 |
保加利亚语 |
德语 |
希腊语 |
英语 |
西班牙语 |
法语 |
印地语 |
俄语 |
斯瓦希里语 |
泰语 |
土耳其语 |
乌尔都语 |
越南语 |
中文 |
准确率 |
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, eval_batch=120) |
6093 |
6210 |
6003 |
6053 |
5409 |
6531 |
6205 |
5615 |
5734 |
5970 |
6219 |
6289 |
6533 |
5851 |
5970 |
6798 |
数据集 |
MNLI匹配集 |
MNLI不匹配集 |
准确率 |
0.782 |
0.8 |
推理速度(A100 GPU, eval_batch=120) |
4430 |
4395 |
局限性
建议参考原始论文及关于不同NLI数据集偏见的文献。
引用
若使用本模型,请引用:Laurer, Moritz等. 2022.《通过深度迁移学习和BERT-NLI解决监督机器学习数据稀缺问题》. 开放科学框架. https://osf.io/74b8k.
合作或咨询
请联系邮箱:m.laurer@vu.nl 或通过LinkedIn