模型:
MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli
这个多语言模型可以在100多种语言上执行自然语言推理(NLI),因此也适用于多语种零样本分类。基于微软的多语言-MiniLM-L6模型,该模型是从XLM-RoBERTa-large中提炼出来的(详见 in the original paper 和 this repo 中的详细信息)。该模型在 XNLI dataset 中进行了微调,该数据集包含来自15种语言的假设-前提对,以及英语 MNLI dataset 。
蒸馏模型的主要优点是它们比其教师模型(XLM-RoBERTa-large)更小(推理速度更快,内存需求更低)。缺点是它们失去了一些较大教师模型的性能。
对于最高的推理速度,我建议使用此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 = "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)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-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)) # device = "cuda:0" or "cpu" 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个文本)(详见 this paper )。请注意,XNLI包含15种机器翻译版本的MNLI数据集的训练集,但由于这些机器翻译的质量问题,该模型只是在XNLI开发集和原始的英文MNLI训练集(392,702个文本)上进行训练。不使用机器翻译文本可以避免将模型过度拟合到这15种语言上,避免对其进行预训练的其他语言的灾难性遗忘,并显著降低训练成本。
该模型使用Hugging Face的trainer训练,使用了以下超参数。确切的底层模型是 mMiniLMv2-L6-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中可用的语言。
多语言-MiniLM-L6在论文中报告的平均XNLI性能为0.68( see table 11 )。该重新实现的平均性能为0.713。这种性能提升可能归功于训练数据中MNLI的添加,以及该模型是从XLM-RoBERTa-large而不是-base(多语言-MiniLM-L6-v2)中提炼出来的。
Datasets | avg_xnli | ar | bg | de | el | en | es | fr | hi | ru | sw | th | tr | ur | vi | zh |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Accuracy | 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 |
Speed text/sec (A100 GPU, eval_batch=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 |
Datasets | mnli_m | mnli_mm |
---|---|---|
Accuracy | 0.782 | 0.8 |
Speed text/sec (A100 GPU, eval_batch=120) | 4430.0 | 4395.0 |
有关潜在偏差的详细信息,请参阅原始论文和不同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 与我联系。