查看原文
其他

【源头活水】CPT:兼顾理解和生成的中文预训练模型



“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—邵云帆
地址:https://zhuanlan.zhihu.com/p/421402341
分享一篇我们最近在中文预训练方面的一个工作。
标题:CPT: A Pre-Trained Unbalanced Transformer for Both Chinese Language Understanding and Generation
论文:https://arxiv.org/pdf/2109.05729.pdf
代码:https://github.com/fastnlp/CPT
模型已开源于Transformers,欢迎下载使用!
https://github.com/fastnlp/CPT/blob/master/README.md#pre-trained-models

01

引言
中文预训练模型层出不穷,但一般来说,市面上的中文预训练模型可以概况为下面几类,它们在在理解和生成任务中有所侧重。
1. Transformer Encoder:采用了双向attention,即token之间能相互attention,对NLU类任务占据优势。
2. Transformer Decoder:仅包含单向attention,即每个token只能与它之前的token做attention,通常用于Left-to-Right的无条件生成任务。
3. Full Transformer:这类模型同时包含Encoder和Decoder。Encoder采用双向attention对输入进行建模,Decoder则使用两种attention,单向attention用于生成文本;cross-attention用于从Encoder端获取输入的信息。这类模型通常在条件生成任务中有优势。
注意到,中文的Full Transformer类预训练模型稍显不足。我们已知有大规模预训的CPM-2,一些复现得到的中文T5,但无法完全满足生成类任务的使用需求。这里缺乏一个扎实的、高质量的BART。这对于中文摘要、QA等生成类任务都能带来很大的帮助。
另外,在同等量级参数量的情况下,不同结构的模型有不同的侧重。在做生成任务时,采用了Decoder的模型能取得很好的性能。而对于理解类任务,通常是BERT、RoBERTa这类Encoder模型占优势。如何能用同一个模型做好理解和生成?需要怎样的模型结构来完成这一目标?

针对这些问题,本论文尝试做以下两件事:
1. 训练比较可靠的中文版BART,为中文生成类任务如摘要等提供Baseline。
2. 在BART的基础上,提出兼顾NLU和NLG的模型结构CPT。

02

中文BART
中文BART的训练大体上遵循原版BART模型,采用 Denoising Auto-Encoding (DAE) 进行训练,包括两个子任务:
1. Text Infilling:训练方式接近 Masked Language Modeling (MLM)。区别在于mask时,如果多个连续token被mask,只使用一个mask token替换它们。为了更好的建模中文,我们只mask完整词和短语,而非BART原文中的根据概率分布采样连续的几个token。
2. Sentence Permutation:在输入时将段落中句子打乱顺序,让模型生成原始段落。
接下来,我们在200GB的开源数据集上训练,得到了中文的BART-base 和BART-large两个版本。实验发现在中文生成类任务上,我们的BART取得了很好的效果,够格成为一个可靠的基线模型。

03

CPT结构
CPT的具体结构可以看作一个输入,多个输出的非对称结构,主要包括三个部分:
1. S-Enc (Shared Encoder): 共享Encoder,双向attention结构,建模输入文本。
2. U-Dec (Understanding Decoder): 理解用Decoder,双向attention结构,输入S-Enc得到的表示,输出MLM的结果。为模型增强理解任务。
3. G-Dec (Generation Decoder): 生成用Decoder,正如BART中的Decoder模块,利用encoder-decoder attention与S-Enc相连,用于生成。
需要注意的是,这样的增加模型的参数量,同时,S-Enc如果太浅,就无法发挥共享Encoder的优势。因此,CPT的两个Decoder被设计的很浅。实验发现,这样的深层Encoder,浅层Decoder结构同时保证了下游任务的性能和使用的方便灵活性。


04

预训练CPT
预训练时,我们使用Masked Language Modeling (MLM) 监督U-Dec端,而使用 Denoising Auto-Encoding (DAE) 来训练G-Dec端。这样的多任务训练方式,可以充分训练CPT中的每个模块。

05

下游任务微调
在下游任务微调时,CPT这样的一输入多输出的结构,带来了更多可能。比如在文本分类上微调CPT,就可以选择下图多种训练方式。
中    对应传统的外接分类器的微调方式,分别微调了U-Dec,G-Dec和二者的组合。   和    采用了基于Prompt的微调。    使用MLM方式,输入带有prompt的文本,在mask位置让模型预测标签对应的单词 (label words)。    使用文本生成,让模型根据输入文本,生成带有对应标签的prompt。

06

实验
我们首先探究不同的微调方式,会对CPT带来怎样的影响。这里我们在文本分类上,采用前面提到的五种方式进行微调。
可以发现,取得最好的效果的微调方式,在不同数据集上略有不同,暗示我们针对单一数据集,可能需要切换模型的使用方式。而对于整个 CLUE 而言,采用 U-Dec 的模型效果不错。
接下来,我们在不同理解任务上检验CPT(如文本分类,中文分词,NER和阅读理解),都取得了不错的效果。对于每一个任务,我们都尝试多种方式微调CPT,最后保留dev集上综合效果最好的,来在test上验证。
此外,在生成任务上,在生成任务上CPT拥有与BART匹配的能力。我们在两个摘要数据集 (LCSTS和CSL) 和一个长文本生成数据集ADGEN测试我们的模型。
另一方面,因为CPT有着深层Encoder,浅层Decoder的特点,在生成时,CPT的速度比BART要快很多。实验结构也说明这一点。


07

结语
本文提出了一种兼顾理解和生成的预训练模型CPT。通过采用单输入多输出的结构,使得CPT可以针对不同的下游任务,进行灵活的分离或组合使用,充分发挥模型潜力。与此同时,作为研究副产物,提供了一个可靠的中文BART模型。
未来的研究方向可以是引入更多针对中文语言相关的设计,如使用更好的tokenization,预训练任务和模型结构等。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存