模型:
MoritzLaurer/xlm-v-base-mnli-xnli
这个多语言模型可以对116种语言进行自然语言推理(NLI),因此也适用于多语言零样本分类。基于XLM-V-base模型,由Meta AI创建并在 CC100 multilingual dataset 上进行了预训练。然后在 XNLI dataset 上进行了微调,其中包含了来自15种语言的假设-前提对,以及英语 MNLI dataset 。XLM-V-base于2023年1月23日在 this paper 上发布。它的主要创新是更大、更好的词汇表:之前的多语言模型的词汇表含有25万个标记,而XLM-V的词汇表存在于100万个标记。改进后的词汇表可以更好地表示更多的语言。
from transformers import pipeline classifier = pipeline("zero-shot-classification", model="MoritzLaurer/xlm-v-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/xlm-v-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数据集的训练集,用于15种语言,但由于这些机器翻译的质量问题,该模型仅在XNLI开发集和原始英语MNLI训练集(共392,702个文本)上进行了训练。不使用机器翻译文本可以避免将模型过度拟合到这15种语言上,避免在其他101种语言(XLM-V的预训练语言)上发生灾难性遗忘,并显着降低训练成本。
xlm-v-base-mnli-xnli是使用Hugging Face训练器、以下超参数进行训练的。
training_args = TrainingArguments( num_train_epochs=3, # total number of training epochs learning_rate=2e-05, per_device_train_batch_size=32, # 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 )
该模型在15种语言的XNLI测试集上进行了评估(每种语言5010个文本,总共75150个)。请注意,多语言NLI模型能够对NLI文本进行分类,而无需接收特定语言的NLI训练数据(跨语言转移)。这意味着模型也能够对其他101种语言进行NLI,但性能很可能低于XNLI中可用的语言。
还请注意,如果模型库中的其他多语言模型声称在英语以外的语言上的性能达到90%左右,则作者在测试过程中很可能犯了一个错误,因为最新的论文中(大多数涉及较大模型)没有显示XNLI上的多语言平均性能超过80%几点(参见 here 或 here )。
XLM-V在论文中报告的XNLI平均性能为0.76( see table 2 )。此重新实现的平均性能为0.78。这一性能提升可能要归功于训练数据中包含MNLI。请注意, mDeBERTa-v3-base-mnli-xnli 的平均性能为0.808,且体积较小(XLM-V为3GB,mDeBERTa为560MB),速度较快(因为mDeBERTa的词汇表较小)。这种差异可能来自于mDeBERTa-v3的改进预训练目标。根据任务的不同,可能更好使用 mDeBERTa-v3-base-mnli-xnli ,但基于其改进的词汇表,XLM-V在某些语言上可能更好。
Datasets | average | ar | bg | de | el | en | es | fr | hi | ru | sw | th | tr | ur | vi | zh |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Accuracy | 0.780 | 0.757 | 0.808 | 0.796 | 0.79 | 0.856 | 0.814 | 0.806 | 0.751 | 0.782 | 0.725 | 0.757 | 0.766 | 0.729 | 0.784 | 0.782 |
Speed GPU A100 (text/sec) | na | 3501.0 | 3324.0 | 3438.0 | 3174.0 | 3713.0 | 3500.0 | 3129.0 | 3042.0 | 3419.0 | 3468.0 | 3782.0 | 3772.0 | 3099.0 | 3117.0 | 4217.0 |
Datasets | mnli_m (en) | mnli_mm (en) |
---|---|---|
Accuracy | 0.852 | 0.854 |
Speed GPU A100 (text/sec) | 2098.0 | 2170.0 |
请参考原始的XLM-V论文和不同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 与我联系。