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