T5:https://arxiv.org/pdf/1910.10683.pdf
T5 blog: https://ai.googleblog.com/2020/02/exploring-transfer-learning-with-t5.html
mT5: https://arxiv.org/pdf/2010.11934.pdf
mT5 code: https://github.com/google-research/multilingual-t5
背景
Bert和GPT2之后,各种预训练模型层出不穷。单语种模型训练完了,又开始了多语种预训练模型。因工作需要,首先关注到mT5模型,粗略的读后,就直接上手了。一段时候后,发现只记得个大概,还是应该好好梳理下思路。
先上整理的思路,再谈细节。
T5做了什么?
- 不同模型结构比较,LM,BERT-style,Deshuffling,BERT-style的encoder-decoder模型一般比decoder-only(LM)好;
- 不同目标函数比较,BERT-style denoising objective最好;
- 不同corruption rate(MLM)比较,10%,15%,25%,50%,15%最好;
- 不同corrupted span length比较,2,3,5,10,长度为3最好;
- 训练集数据重复比较;
- 训练策略比较:先pretrain再fine-tune的multitask learning非常有竞争力,但是需要谨慎选择不同任务训练频次;
- 模型规模比较:比较了不同size的模型(base,small,large,3B和11B),训练时间,以及融合模型,来决定如何充分利用计算性能。
1. T5/mT5区别
T5 | mT5 | |
---|---|---|
训练数据 | C4 | mC4: cld3区分101种语言 |
模型参数 | 60million | 11billion,1trillion tokens |
模型框架 | transformer encoder-decoder | T5.1.1 |
分词 | SentencePiece,32,000 wordpieces, fine-tune做了机器翻译,因此词表包含non-English |
同XLM-R,250,000 wordpieces |
补充:
- T5使用了standard encoder-decoder Transformer,和原始transformer在layer norm上有个区别,T5是Pre-Norm,即在sub-block前使用Layer Normalization,sub-block输出时,加入初始输入;
- 模型框架:T5.1.1和T5的区别
详情:https://github.com/huggingface/transformers/issues/6285
a. 激活函数变更:Gated-GELU activation替代ReLU;
b. 无标签数据不做dropout;
c. embedding和分类层不做参数共享;
d. 更大的d_model,更小的num_heads和d_ff;
e. Pre-trained on C4 only without mixing in the downstream tasks.(不是很清楚,待梳理)
- 词表:mT5中,不同语种词表有差异,比如词组规模很大的中文,use a character coverage of 0.99999 and enable SentencePiece’s “byte-fallback” feature to ensure that any string can be uniquely encoded;
- 学习率:mT5和T5一样,square_root learning rate:
,n为当前的iteration; - Self-supervised objective:mT5和T5一样,mask 15% tokens,平均noise span length为3。
2. 和其他模型比较
model | 基础框架 | 训练集 | 补充 |
---|---|---|---|
mBERT | BERT | Wikipedia的104个语种 | 和BERT主要区别就是训练语料 |
XLM | BERT | Wikipedia的100个语种 | 通过cross-lingual pre-training objectives提升模型效果 |
XLM-R | RoBERTa,改进XLM | Common Crawl的100个语种 | 基于Wikipedia的n-gram语言模型对训练语料做清洗 |
mBART | BART | XLM-R的子集,只使用了其中25个语种 | 预训练时做了span masking和sentence shuffling |
MARGE | encoder-decoder | Wikipedia和CC-News,共26个语种 | 对其中一种语言的文档进行重建时,检索对应文档的其他语种 |
补充:
- mT5和XLM-R比较:XLM-R是encoder-only模型,mT5是encoder-decoder,后者参数量差不多是前者2倍。但在进行分类任务时,参数量接近。
XLM-R只需要处理CLS token,mT5的decoder部分会生成2个token,class label和EOS token。因此,XLM-R处理T+1个token,而mT5处理T+2个token。
T5
1. 训练数据的清洗
- 仅保留句末为句号、感叹号、问号或结尾引号这些有效符号的句子;
- 去掉包含冒犯性词汇的页面,比如List of Dirty, Naughty, Obscene or Otherwise Bad Words;
- 过滤包含JavaScript脚本的文本行;
- 去掉包含类似'lorem ipsum'占位符的页面;
- 去掉包含'{'的页面;
- 句子去重,连续3个句子重复出现,则去重;
- 因为下游任务主要是英文,使用langdetect 以至少 0.99 的概率过滤掉任何未被归类为英语的页面。
C4: Colossal Clean Crawled Corpus, unlabeled public Common Crawl web from April 2019,通过以上方式,得到750GB English-language text。
2. 输入输出:Text-to-Text
输入输出都是文本,文本前缀(text prefix)也是超参数,表示任务类型。
如上图,
- 对翻译任务:
输入:‘translate English to German: That is good'
输出:'Das ist gut' - 对回归任务:
输入:'stsb sentence1: The rhino grazed on the grass. sentence2: A rhino is grazing in a field.'
输出:'3.8',输出类型为string,而不是number。
为什么采用这种形式?
这种形式,天然的对翻译,摘要等文本生成任务有效;
BERT-stype模型只输出class label或者a span of input,T5可以使用同一个模型,同一损失函数(teacher-forced maximum-likelihood),同一超参数,实现任一NLP任务,这些任务包含机器翻译,文本摘要,QA,分类等。
3. 模型结构
优化器:AdaFactor;
测试:greedy decoding;
Unsupervised objective:denoising objective (masked language modeling)
- 受BERT MLM启发,denoising objective模型效果最好(见下面不同目标函数实验结果);
- 输入序列随机drop掉15%的token:
做了10%,15%,25%,50%对比实验,corruption rates为15%时效果最好; - 连续的token用一个‘sentinel’ token表示,输出为被drop掉的token:
假如输入序列长度为500共25个span,则有500*15%=75个被打断的tokens,平均span长度为75/25=3,论文还对span length做了实验,最终发现长度为3时,模型效果最好。
3种模型结构
输入序列:x,输出序列:y,其中:
-
左,Baseline model:standard encoder-decoder Transformer
Encoder,Decoder的size和configuration和BERT-base相似,共220m个参数,差不多是Bert-base参数的2倍;
encoder是fully-visible,做self-attention;
decoder是auto-regressive,每个output timestep,根据predicted distribution选择输出token,作为下一个输入,输出下一个predicted token; - 中,language model:transformer decoder;
-
右,prefix LM:将输入x和输出y拼接,x是fully-visible,y是autoregressive。
和1的主要区别是模型的输出,更适用于text-to-text类型的任务。
训练时,prefix的部分是随机选择的。
不同模型结构参数配置
type | encoder layers | decoder layers | shared params. | # of params. | computation cost |
---|---|---|---|---|---|
1 | L | L | False | 2P | M-FLOP |
2 | L | L | True | P | M-FLOP |
3 | L/2 | L/2 | False | P | M/2-FLOP |
4 | 0 | L | - | P | M-FLOP |
5 | 0 | L | decoder-only prefix LM, with fully-visible self-attention over input | P | M-FLOP |
4. 实验结果
下游任务
- Machine translation:WMT English to German, French, and Romanian translation;
- QA:SQuAD;
- Abstractive summarization:CNN/Daily Mail;
- Text classification:GLUE, SuperGLUE。
1. 不同模型结构结果比较
2. 不同目标函数结果比较
3. 不同预训练数据集结果比较
数据集 | 说明 |
---|---|
C4 | - |
Unfiltered C4 | 没有经过deduplication, removing bad words, only retaining sentences的数据 |
RealNews-like | C4中的RealNews数据集 |
WebText-like | 使用C4中的URL数据,只有2GB,太少了,因此下载了2018.8~2019.08一年经过Reddit 得分大于3的数据,共17GB |
Wikipedia | 高质量的English Wikipedia text data from TensorFlow Datasets |
Wikipedia + Toronto Books Corpus | 和BERT一样 |
4. 重复数据对模型效果的影响分析
5. 训练策略对模型影响
常规的训练模式:unlabeled data的预训练 + supervised task 的fine-tuning
问题:因为low-resource tasks,fine-tuning可能会带来suboptimal。
a. 对T5的encoder-decoder模型结构,进行fine-tuning,有2种方式;
b. 除了fine-tuning,还可以进行多任务训练,混合不同任务数据集一起训练,进行各项任务判断时,选择对应的ckpt。这里有个问题,就是 how much data from each task the model should be trained on,基于这个疑问,做了3个策略比较;
c. 除了以上2大类训练模式,还进行multi-task with fine-tuning训练模型,训练模型类似MT-DNN,在所有任务上进行预训练,单一监督式任务上进行fine-tuning。
Fine-tuning
- Adapter layers
fix大部分的模型参数,仅adapter layer和normalization layer参数会被更新。Adapter layers are additional dense-ReLU-dense blocks that are added after each of the preexisting feed-forward networks in each block of the Transformer。 - Gradual unfreezing
常见于语言模型,一开始,仅更新final layer,然后更新2~最后一层的参数,接着是整个模型参数更新。在T5中,并行更新encoder和decoder的模型,也就是说decoder的top层参数更新时,encoder的top层也会被更新。
Multitask learning
- Examples-proportional mixing
N个任务,每个任务对应数据集为,K人工设置的dataset size limit,采样概率为 - Temperature-scaled mixing
参考了multilingual BERT,保证模型充分训练了low-resource的数据,引入temperature T,采样概率 - Equal mixing
每个任务均等采样,在每个batch,每个样本是均匀采样,是suboptimal,对high-resource任务是underfit,low-resource任务时overfit
Multi-task + Fine-tuning
- Base
pre-train on Examples-proportional mixing + fine-tuning 每个下游任务 - Leave-one-out
pre-train on Examples-proportional mixing + fine-tuning pre-train没有做的下游任务,pre-train时过滤下游任务类型 - Supervised multi-task pre-training
pre-train on Examples-proportional mixing of all of the supervised tasks
mT5
1. 训练数据的清洗
- 文档去重,去除包含bad words的页面;
- 不同语种的标点符号不同,通过line length filter进行筛选,要求页面至少有3行文本包含200以上个characters;
- 通过cld3检测每一页的主要语种是哪一个,保留置信度高于70%的页面。
不同语种数据的采样
不同语种数据占比不同,有的语言样本少,比较简单常见,模型就会过拟合;如果样本量太大,内容丰富,模型又可能欠拟合。
mT5对low-resource的语种进行 的采样方式:
:预训练中,给定语种的样本,采样概率;
:给定语种的样本数量;
:超参数,control how much to “boost” the probability of training on low-resource languages,模型测试了0.2(MMNMT),0.3(XLM-R),0.7(mBERT),经过消融测试,最终发现0.3效果最好。
2. 实验
XTREME(Cross-lingual TRansfer Evaluation of Multilingual Encoders) benchmark:
- XNLI:包含了14种语言,模型输出label text;
- XQuAD:阅读理解任务,包含了10种语言,模型输出答案;
- MLQA:阅读理解任务,包含了7种语言,模型输出答案;
- TyDi QA:阅读理解任务,包含了11种语言,模型输出答案;
- NER of WikiAnn:包含了40种语言,模型输出entity tags和labels:
如果存在多个实体,则按顺序进行concat,如果没有实体,则输出None; - PAWS-X:包含了7种语言,模型输出label text。
2.1 3种训练方式
- zero-shot:只用English-data进行fine-tuned,在non-English上做测试;
- translate-train:机器翻译,英文翻译到目标语种,做数据增强;
- in-language multitask:在所有目标语言的gold data上进行训练。
- mT5-XXL模型在所有分类和QA任务上都超过SOTA,在NER任务上也接近SOTA (69.2 vs. 70.1);
- 在translate_train任务类型上,模型同样在XTREME的分类和QA任务上超过SOTA,fine_tune阶段,数据集使用了带标签的英文数据和机器翻译数据;
- 3种训练方式比较,使用gold data训练(in-language multitask),模型效果比zero-shot和translate-train好,且模型规模越大,模型效果的差距最小。
以mT5-XXL为例子,zero-shot,translate-train,in-language multitask在TyDi QA的数据集的f1分别为80.8, 82.8,88.5,比mT5-Small的35.2, 48.2,73.0差距小的多。
这意味着,machine translations of the monolingual dataset bring diminishing returns as model capacity increases。These trends point to the possibility of avoiding the costly step of annotating data in more than one language when using large models(做多语种的大模型时,可以避免数据标注)。
随着模型规模扩大,mT5和T5模型在SQuAD任务上的结果越来越接近, 这也意味着模型有足够的能力学习到101个语言,且不受不同语种的干扰。
2.2 消融实验
在mT5-Large上做了消融实验:
- dropout提高到0.1, 希望缓解在low-resource languages上的过拟合问题;
- 序列长度从1024降低到512;
- 提高平均noise span length,从3提高到10,因为作者发现和T5相比,每个token有更少的characters;
- 数据采样,取值范围(0.2, 0.7);
- 关闭line length filter数据筛选策略;
- 补充预训练数据到103种语种。
实验结果如下:
2.3 Zero-shot generation
虽然,前面实验表格显示,模型在各种QA任务上都超过了SOTA。
但是,实验发现,进行XQuAQ zero-shot时,fine-tuning英文数据,因为accidental translation,导致模型生成freestyle。
解决方式:在fine-tuning阶段,混合少量多语种预训练任务,就可以抵消这个问题。
问题:Illegal prediction
任务:zero-shot cross-lingual span selection,跨语言短语选择
模型:多语言模型预训练,在英文数据集上做fine-tuning,然后在其他语言数据集上做测试
模型输出:legal non-English prediction
实际输出:illegal prediction,如下表:
这种不合法输出可以归为以下3个类别:
- Normalization:prediction是合法的,但是unicode characters被替代了,可以通过Unicode NFKC normalization来恢复;
- Grammatical adjustment:answer本身就存在语法问题;
- Accidental translation:模型直接做了翻译,将目标语言翻译成英文了,以至于生成部分或者完整英文。
怎么避免Accidental translation?
在做span selection时,怎么避免被翻译到英文?
作者觉得,输入为non-English,输出English的原因是因为模型没有在fine-tuning阶段看到non-English。没看到non-English的原因是,仅在English数据集上做fine-tuning的模型,在non-English上做推理时,non-English的likelihood会降低,以至于English变成最可能的输出。
为了防止模型忘记生成non-English,在fine-tuning阶段,混合无监督的多语言预训练任务。怎么理解?
- 删除目标序列的‘sentinel’ token(对应没有被mask的输入序列),否则在下游任务时就有可能观察到;
- 样本采样参数更新,从0.3降低到0.1,差不多是均匀采样。
在进行XQuAQ 的fine-tuning时,以1比100的比例,混合少量的无监督任务(包含101种语言)。加入这批多语种语料后,模型效果显著提升,illegal问题也降低了70%。