语言:
- 多语言
- 英语
- 阿拉伯语
- 保加利亚语
- 德语
- 希腊语
- 西班牙语
- 法语
- 印地语
- 俄语
- 斯瓦希里语
- 泰语
- 土耳其语
- 乌尔都语
- 越南语
- 中文
许可证: mit
标签:
- 零样本分类
- 文本分类
- 自然语言推理
- pytorch
评估指标:
- 准确率
数据集:
- multi_nli
- xnli
管道标签: 零样本分类
小部件示例:
- 文本: "安格拉·默克尔是德国的一位政治家,也是基民盟的主席"
候选标签: "政治, 经济, 娱乐, 环境"
多语言MiniLMv2-L12-mnli-xnli模型
模型描述
这款多语言模型能够处理100多种语言的自然语言推理(NLI)任务,因此也适用于多语言零样本分类。其基础的多语言MiniLM-L12模型由微软开发,是从XLM-RoBERTa-large模型蒸馏而来(详见原论文及此仓库)。该模型随后在XNLI数据集上进行了微调,该数据集包含15种语言的假设-前提对,以及英语的MNLI数据集。
蒸馏模型的主要优势在于它们比原始大型教师模型(如XLM-RoBERTa-large)更小(推理速度更快,内存需求更低)。缺点是性能上会有所损失。
若追求最高推理速度,推荐使用6层模型(本页模型为12层,速度较慢)。若追求更高性能,截至2023年2月14日,推荐使用mDeBERTa-v3-base-mnli-xnli。
如何使用该模型
简易零样本分类流程
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="MoritzLaurer/multilingual-MiniLMv2-L12-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/multilingual-MiniLMv2-L12-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包含一个由MNLI数据集机器翻译至15种语言的训练集,但由于机器翻译的质量问题,本模型仅基于XNLI开发集中的专业翻译文本及原始英语MNLI训练集(392702条文本)进行训练。不使用机器翻译文本可以避免模型过度适应这15种语言;防止遗忘预训练时接触的其他语言;并显著降低训练成本。
训练过程
模型使用Hugging Face训练器进行训练,超参数如下。具体基础模型为mMiniLMv2-L12-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任务,但性能很可能低于XNLI中包含的语言。
原论文中报告的多语言MiniLM-L12的平均XNLI性能为0.711(参见表11)。此重新实现的平均性能为0.75。性能提升可能归功于训练数据中加入了MNLI,且本模型是从XLM-RoBERTa-large而非-base蒸馏而来(multilingual-MiniLM-L12-v2)。
数据集 |
平均XNLI |
阿拉伯语 |
保加利亚语 |
德语 |
希腊语 |
英语 |
西班牙语 |
法语 |
印地语 |
俄语 |
斯瓦希里语 |
泰语 |
土耳其语 |
乌尔都语 |
越南语 |
中文 |
准确率 |
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,eval_batch=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匹配 |
MNLI不匹配 |
准确率 |
0.818 |
0.831 |
处理速度(文本/秒,A100 GPU,eval_batch=120) |
2912.0 |
2902.0 |
局限性与偏差
请参考原始论文及关于不同NLI数据集的文献以了解潜在偏差。
引用
若使用此模型,请引用:Laurer, Moritz, Wouter van Atteveldt, Andreu Salleras Casas, 和 Kasper Welbers。2022年。
《减少标注,增加分类——通过深度迁移学习和BERT-NLI解决监督机器学习的数据稀缺问题》。
预印本,6月。Open Science Framework。https://osf.io/74b8k。
合作意向或问题咨询?
如有问题或合作意向,请联系:m{dot}laurer{at}vu{dot}nl 或 LinkedIn