模型:
MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7
该多语言模型可在100种语言上执行自然语言推理(NLI),因此也适用于多语言零样本分类。基于的mDeBERTa-v3-base模型由Microsoft在 CC100 multilingual dataset 上对100种语言进行了预训练。该模型随后在 XNLI dataset 和 multilingual-NLI-26lang-2mil7 dataset 上进行了微调。两个数据集中包含超过2.7百万个由40多亿人口使用的27种语言的假设-前提对。
截至2021年12月,mDeBERTa-v3-base是Microsoft在 this paper 中推出的表现最佳的多语言基准大小变压器模型。
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-xnli-multilingual-nli-2mil7" 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)
该模型是在 multilingual-nli-26lang-2mil7 dataset 和 XNLI 的验证数据集上进行训练的。
multilingual-nli-26lang-2mil7 数据集包含26种语言中273万个NLI假设-前提对。该数据集每种语言包含105,000个文本对。它基于英文数据集 MultiNLI , Fever-NLI , ANLI , LingNLI 和 WANLI 创建,使用最新的开源机器翻译模型。 数据集中的语言包括:['ar', 'bn', 'de', 'es', 'fa', 'fr', 'he', 'hi', 'id', 'it', 'ja', 'ko', 'mr', 'nl', 'pl', 'ps', 'pt', 'ru', 'sv', 'sw', 'ta', 'tr', 'uk', 'ur', 'vi', 'zh'] (参见 ISO language codes )。有关更多详细信息,请参阅数据表。此外,根据相同的采样方法,还为英语添加了105,000个文本对的样本,从而得到了27种语言。
此外,对于每种语言,还添加了一组随机选取的10%的假设-前提对,其中英语假设与其他语言的前提配对(英语前提与其他语言的假设相同)。文本对中的这种语言混合使用户能够为另一种语言的目标文本提出英文假设。
XNLI 验证集由从英语翻译成其他14种语言的2490个专业翻译文本组成(共37350个文本)。(请参阅 this paper )。请注意,XNLI还包含14种语言的MultiNLI数据集的机器翻译版本的训练集,但由于2018年的机器翻译质量问题,这些数据被排除在外。
请注意,为了测试该模型在NLI进行微调训练过程中未见过的语言上的性能,有三种语言从XNLI训练数据中排除,仅包含在测试数据中:["bg","el","th"]。 这样做是为了测试模型在仅在100种语言的预训练过程中接触到而未在27种语言的NLI微调过程中接触到的语言上的性能 - 请参阅下面的评估指标。
总的训练数据集大小为 3,287,280 个假设-前提对。
mDeBERTa-v3-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 gradient_accumulation_steps=2, # to double the effective batch size for warmup_ratio=0.06, # number of warmup steps for learning rate scheduler weight_decay=0.01, # strength of weight decay fp16=False )
该模型在XNLI测试集(每种语言5010个文本,总计75150个文本)和英语测试集 MultiNLI , Fever-NLI , ANLI , LingNLI 和 WANLI 上进行了评估。请注意,多语言NLI模型能够对NLI文本进行分类,而无需接收特定语言的NLI训练数据(跨语言迁移)。这意味着该模型也能够在mDeBERTa预训练的其他73种语言上进行NLI,但性能很可能低于在NLI微调过程中见过的语言。下表中["bg","el","th"]这些语言的性能很好地说明了这种跨语言迁移,因为这些语言未包括在训练数据中。
XNLI subsets | ar | bg | de | el | en | es | fr | hi | ru | sw | th | tr | ur | vi | zh |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Accuracy | 0.794 | 0.822 | 0.824 | 0.809 | 0.871 | 0.832 | 0.823 | 0.769 | 0.803 | 0.746 | 0.786 | 0.792 | 0.744 | 0.793 | 0.803 |
Speed (text/sec, A100-GPU) | 1344.0 | 1355.0 | 1472.0 | 1149.0 | 1697.0 | 1446.0 | 1278.0 | 1115.0 | 1380.0 | 1463.0 | 1713.0 | 1594.0 | 1189.0 | 877.0 | 1887.0 |
English Datasets | mnli_test_m | mnli_test_mm | anli_test | anli_test_r3 | fever_test | ling_test | wanli_test |
---|---|---|---|---|---|---|---|
Accuracy | 0.857 | 0.856 | 0.537 | 0.497 | 0.761 | 0.788 | 0.732 |
Speed (text/sec, A100-GPU) | 1000.0 | 1009.0 | 794.0 | 672.0 | 374.0 | 1177.0 | 1468.0 |
还请注意,如果模型中心的其他多语言模型声称在英语以外的语言上表现约为90%,则作者很可能在测试过程中犯了错误,因为最新的论文中没有一篇论文显示XNLI的多语言平均性能超过80%几个点(请参阅 here 和 here )。
有关潜在偏见,请参阅原始DeBERTa-V3论文以及不同NLI数据集的文献。此外,请注意,multilingual-nli-26lang-2mil7数据集是使用机器翻译创建的,这降低了对于像NLI这样复杂任务的数据质量。您可以通过Hugging Face 查看您感兴趣的语言的数据。请注意,由机器翻译引入的语法错误对于零样本分类来说不是问题,因为语法对此任务的重要性较低。
如果该数据集对您有用,请引用以下文章:
@article{laurer_less_2022, title = {Less {Annotating}, {More} {Classifying} – {Addressing} the {Data} {Scarcity} {Issue} of {Supervised} {Machine} {Learning} with {Deep} {Transfer} {Learning} and {BERT} - {NLI}}, url = {https://osf.io/74b8k}, language = {en-us}, urldate = {2022-07-28}, journal = {Preprint}, author = {Laurer, Moritz and Atteveldt, Wouter van and Casas, Andreu Salleras and Welbers, Kasper}, month = jun, year = {2022}, note = {Publisher: Open Science Framework}, }
要获取有关新模型和数据集的更新,请在 Twitter 上关注我。如果您有问题或合作的想法,请通过m{dot}laurer{at}vu{dot}nl或 LinkedIn 与我联系。
请注意,DeBERTa-v3在2021年末发布,较旧版本的HF Transformers似乎存在运行该模型的问题(例如,与分词器相关的问题)。使用Transformers == 4.13或更高版本可能会解决某些问题。请注意,mDeBERTa目前不支持FP16,可以参见这里: https://github.com/microsoft/DeBERTa/issues/77