XLM:Cross-lingual Language Model Pretraining(2019-1-22)

模型介绍

尽管原有的BERT模型可以在上百种语言上进行预训练,语言之间的信息并不是互通的,不同的语言模型之间没有共享知识。Facebook的XLM模型克服了信息不互通的难题,将不同语言放在一起采用新的训练目标进行训练,从而让模型能够掌握更多的跨语言信息。这种跨语言模型的一个显著优点是,对于预训练后的后续任务(比如文本分类或者翻译等任务),训练语料较为稀少的语言可以利用在其他语料上学习到的信息。

训练XLM使用两种方式:

  1. 无监督学习方式,仅仅依赖于各种语言的语料文本。
  2. 监督学习方式,使用平行语料的一个新的跨域语言模型。

通过XLM将任何句子编码到一个共享的embedding空间。之前很多工作达到这样的效果都需要大量的平行语料,也就是类似于翻译语料的东西。但是发现有些人提出的无监督机器翻译,不使用平行语料也可以获得较高的BLEU。所以XLM也借鉴了这种思想。

模型改进

XLM的三个重要组成部分:CLM、MLM和TLM。前两个使用的是单语数据monolingual data(无监督学习);后一个使用的是平行语料(parallel sentences)也就是需要通过监督的方式学习。

共享子词(subword)词汇表

所有语言通过BPE(Byte Pair Encoding)创建共享词典,这样共享了各种字符或者一些恰当的发音。学习BPE的时候,通过一定的概率在各个语言的数据集上采样。然后将采样的这些句子串联起来。每一种语言的采样概率如下:

在这里插入图片描述

为了减轻不同语言语料频率的不均衡给BPE带来的影响,训练样本从新的分布中进行采样。在下图中选取alpha=0.5,可以提高训练预料较少的语言出现的频率,这可以防止小语种在BPE的过程中直接被切割成单个字符。

翻译语言模型(TLM)

CLM和MLM都是无监督学习方式,但是当存在平行语料时候,使用他们并不合适。这时候就需要翻译语言模型TLM(Translation Language Modeling),TLM的引入可以提高XLM的效果。本文的TLM是MLM的一个扩展。我们将翻译语料对连接,然后在源语言和目标语言中均做随机mask。如下图:

在这里插入图片描述

如果预测英语中的mask,模型既可以关注周围的英文单词,也可以关注法语的翻译,这样可以使得模型将英语和法语对齐。并且在预测某个MASK英语单词时候,如果英文信息不足以预测出这个单词,法语上下文可以辅助预测。为了便于对齐,mask法语时候,我们会对其中位置进行错开。

跨语言模型(Cross-lingual Language Models)

XLM的训练如果是纯无监督方式则使用CLM、MLM。使用batch size为64,每个句子由连续的256个字符组成。每个batch的数据采样自同一种语言,采样概率公式和上面的一样,只是α=0.7。

XLM如果是有监督方式则是MLM结合TLM或者CLM结合TLM。

模型参考

论文地址:https://arxiv.org/abs/1901.07291

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用XLM-RoBERTa模型微调的示例代码。 首先,安装必要的库: ``` !pip install transformers !pip install torch ``` 导入所需的库: ```python import torch from transformers import XLMRobertaTokenizer, XLMRobertaForSequenceClassification, Trainer, TrainingArguments ``` 加载模型和分词器: ```python model_name = "xlm-roberta-large" tokenizer = XLMRobertaTokenizer.from_pretrained(model_name) model = XLMRobertaForSequenceClassification.from_pretrained(model_name, num_labels=2) ``` 接下来,准备数据集。这里假设有一个名为 `train_data` 的训练集和一个名为 `eval_data` 的验证集,其中每个示例都包含一个文本字符串和一个标签(0或1)。 使用分词器对数据进行编码: ```python def encode_data(data): encoded = tokenizer.batch_encode_plus( [(d["text"], d["label"]) for d in data], add_special_tokens=True, return_attention_mask=True, pad_to_max_length=True, max_length=512, return_tensors="pt" ) return { "input_ids": encoded["input_ids"], "attention_mask": encoded["attention_mask"], "labels": torch.tensor([d["label"] for d in data]) } train_encoded = encode_data(train_data) eval_encoded = encode_data(eval_data) ``` 定义训练参数: ```python training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=8, per_device_eval_batch_size=16, warmup_steps=500, weight_decay=0.01, logging_dir="./logs", logging_steps=100, load_best_model_at_end=True, evaluation_strategy="epoch" ) ``` 定义训练器: ```python trainer = Trainer( model=model, args=training_args, train_dataset=train_encoded, eval_dataset=eval_encoded, compute_metrics=lambda pred: {"accuracy": (pred.predictions.argmax(axis=1) == pred.label_ids).mean()} ) ``` 开始训练: ```python trainer.train() ``` 训练完成后,可以使用以下代码评估模型: ```python trainer.evaluate() ``` 以上就是使用XLM-RoBERTa模型微调的示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不负韶华ღ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值