模型:
MoritzLaurer/mDeBERTa-v3-base-mnli-xnli
该多语言模型可在100种语言上执行自然语言推理(NLI),因此也适用于多语言零样本分类。底层模型是由Microsoft在 CC100 multilingual dataset 上进行预训练的。然后,在 XNLI dataset 以及英文 MNLI dataset 上进行微调,其中包含来自15种语言的假设-前提对。截至2021年12月,mDeBERTa-base是Microsoft于 this paper 引入的表现最佳的多语言基础大小变换器模型。
如果您正在寻找一个更小、更快(但性能较差)的模型,可以尝试 multilingual-MiniLMv2-L6-mnli-xnli 。
from transformers import pipeline classifier = pipeline("zero-shot-classification", model="MoritzLaurer/mDeBERTa-v3-base-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/mDeBERTa-v3-base-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训练集(392702条文本)上进行了训练。不使用机器翻译文本可以避免过拟合模型到这15种语言上,避免了mDeBERTa预训练的其他85种语言的灾难性遗忘,并大大减少了训练成本。
mDeBERTa-v3-base-mnli-xnli使用Hugging Face训练器以以下超参数进行训练。
training_args = TrainingArguments( num_train_epochs=2, # total number of training epochs learning_rate=2e-05, per_device_train_batch_size=16, # batch size per device during training per_device_eval_batch_size=16, # batch size for evaluation warmup_ratio=0.1, # number of warmup steps for learning rate scheduler weight_decay=0.06, # strength of weight decay )
该模型在XNLI测试集上对15种语言(每种语言5010条文本,总共75150条文本)进行了评估。请注意,多语言NLI模型可以在没有特定语言的NLI训练数据的情况下对NLI文本进行分类(跨语言转移)。这意味着该模型也可以在其他85种mDeBERTa训练过的语言上进行NLI,但性能很可能低于XNLI上的语言。
另请注意,如果模型中心的其他多语言模型声称在英语以外的语言上的性能达到90%左右,那么作者很可能在测试过程中犯了一个错误,因为最新的论文中没有显示多语言平均性能超过80%(参见 here 或 here )。
average | ar | bg | de | el | en | es | fr | hi | ru | sw | th | tr | ur | vi | zh |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.808 | 0.802 | 0.829 | 0.825 | 0.826 | 0.883 | 0.845 | 0.834 | 0.771 | 0.813 | 0.748 | 0.793 | 0.807 | 0.740 | 0.795 | 0.8116 |
请查阅原始DeBERTa-V3论文以及关于不同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{点}laurer{在}vu{点}nl或 LinkedIn 与我联系。
请注意,DeBERTa-v3是在2021年末发布的,旧版本的HF Transformers似乎存在运行该模型的问题(例如,与标记器相关的问题)。使用Transformers>=4.13或更高版本可能会解决一些问题。请注意,mDeBERTa目前不支持FP16,请参阅此处: https://github.com/microsoft/DeBERTa/issues/77 。