第6篇 多语言模型

多语言模型

大多数模型都是单语言的(英语,汉语,德语)。有一小部分可用的多语言模型,它们与单语言模型有着不同的机制。本篇教程详细叙述这些模型的使用方法。

XLM

XLM总共拥有10个不同的checkpoint,只有一个是单语言的。其余9个可以划分为两类:使用了语言嵌入的checkpoint,和没有使用语言嵌入的checkpoint。

XLM & 语言嵌入

这部分主要关注如下checkpoint:

  • xlm-mlm-ende-1024 (Masked language modeling, English-German)
  • xlm-mlm-enfr-1024 (Masked language modeling, English-French)
  • xlm-mlm-enro-1024 (Masked language modeling, English-Romanian)
  • xlm-mlm-xnli15-1024 (Masked language modeling, XNLI languages)
  • xlm-mlm-tlm-xnli15-1024 (Masked language modeling + Translation, XNLI languages)
  • xlm-clm-enfr-1024 (Causal language modeling, English-French)
  • xlm-clm-ende-1024 (Causal language modeling, English-German)
    这些checkpoint要求语言嵌入,即指定推理时使用的语言。这些语言嵌入被表示为一个与输入到模型中的id相同形状的张量。这些张量中的数值取决于使用的语言,并且可以使用tokenizer中的lang2id和id2lang参数区分。

下面是使用xlm-clm-enfr-1024 checkpoint (Causal language modeling, English-French)的例子:

import torch
from transformers import XLMTokenizer, XLMWithLMHeadModel

tokenizer = XLMTokenizer.from_pretrained("xlm-clm-enfr-1024")
model = XLMWithLMHeadModel.from_pretrained("xlm-clm-enfr-1024")

模型处理的语言以及语言的编号都是可以通过lang2id看到的:

print(tokenizer.lang2id)

'''
output:
{'en': 0, 'fr': 1}
'''

这些编号应该在传入模型语言参数时使用,让我们定义我们的输入:

input_ids = torch.tensor([tokenizer.encode("Wikipedia was used to")])  # batch size of 1
print(input_ids)

'''
output:
tensor([[    0,  4018,  5545, 51104,    32,   308,    18,     1]])
'''

我们现在应该通过之前定义的语言编号来定义语言嵌入。我们希望创建一个用恰当语言编号填充的张量,并且与input_ids具有相同的形状。对于英语,编号为0:

language_id = tokenizer.lang2id["en"]  # 0
langs = torch.tensor([language_id] * input_ids.shape[1])  # torch.tensor([0, 0, 0, ..., 0])

# We reshape it to be of size (batch_size, sequence_length)
langs = langs.view(1, -1)  # is now of shape [1, sequence_length] (we have a batch size of 1)

然后你可以将其作为输入,放进模型中了:

outputs = model(input_ids, langs=langs)

案例run_example.py可以使用XLM的CLM checkpoint通过语言嵌入生成文本。

没有语言嵌入的XLM

这一部分主要关注一下checkpoint:

  • xlm-mlm-17-1280 (Masked language modeling, 17 languages)
  • xlm-mlm-100-1280 (Masked language modeling, 100 languages)
    这些checkpoint在推断时不要求语言嵌入。这些模型与前面提到的XLM checkpoint不同,它们常常用于生成通用的句子表示。

BERT

BERT有两个可以用于多语言任务的checkpoint:

  • bert-base-multilingual-uncased (Masked language modeling + Next sentence prediction, 102 languages)
  • bert-base-multilingual-cased (Masked language modeling + Next sentence prediction, 104 languages)
    这些checkpoint在推断时不要求语言嵌入。他们应该识别上下文中使用的语言,并据此推断。

XLM-RoBERTa

XLM-RoBERTa是在2.5TB新创建的100种语言的干净的CommonCrawl数据上训练出来的。相对于之前发布的多语言模型(如:mBERT、XLM),它在下游任务,比如:分类、序列标注和问答上有着显著的提升。

两个XLM-RoBERTa checkpoint可以用于多语言任务:

  • xlm-roberta-base (Masked language modeling, 100 languages)
  • xlm-roberta-large (Masked language modeling, 100 languages)
posted @ 2022-02-13 11:58  pbc的成长之路  阅读(619)  评论(0)    收藏  举报