T5 PEGASUS:开源一个中文生成式预训练模型

资料仓库 NLP  收藏
0 / 1301

去年在文章《那个屠榜的T5模型,现在可以在中文上玩玩了》中我们介绍了Google的多国语言版T5模型(mT5),并给出了用mT5进行中文文本生成任务的例子。诚然,mT5做中文生成任务也是一个可用的方案,但缺乏完全由中文语料训练出来模型总感觉有点别扭,于是决心要搞一个出来。

经过反复斟酌测试,我们决定以mT5为基础架构和初始权重,先结合中文的特点完善Tokenizer,然后模仿PEGASUS来构建预训练任务,从而训练一版新的T5模型,这就是本文所开源的T5 PEGASUS。

Tokenizer

首先,这里介绍我们对Tokenizer的完善工作。mT5使用的Tokenizer是sentencepiece,这是一个C++所写的分词库,具有高效轻便的特点,但是很遗憾,对于中文来说它并不是特别友好,主要体现为:

1、sentencepiece会把某些全角符号强制转化为半角符号,这在某些情况下是难以接受的,而且还可能影响任务的评测结果;

2、sentencepiece内置的算法虽然有能力分出中文词来,但对于中文分词来说其实还是不够智能的;

3、sentencepiece用C++写的,虽然开源了,但对于用惯Python的人来说C++就相当于黑箱,难以阅读源码,改起来也不容易。

这些特点让我们决定将Tokenizer切换回BERT的Tokenizer。但直接替换原始版本的中文BERT的Tokenizer是不够的,一来是我们之前的工作《提速不掉点:基于词颗粒度的中文WoBERT》已经表明以词为单位来做生成模型能获得更好的效果,二来哪怕只看字中文BERT的vocab.txt也是很不完善的,漏了一些常见的标点符号(如双引号)和中文字(比如“琊”等)。为此,我们选择给BERT的tokenizer加入分词功能,并进一步完善vocab.txt。

具体来说,我们往原始中文BERT的token_dict里边加入结巴分词的前20万个词,然后修改Tokenizer的逻辑,使得它能够切分出词来,这些改动都已经内置在bert4keras中了,直接调用就行。接着,我们用这个修改后的Tokenizer去遍历切分我们准备的预训练语料,统计各个token的频数,最后只保留最高频的5万个token,得到一个规模为5万的vocab.txt来构建我们最终的Tokenizer。

除了用这个新Tokenizer来训练T5 PEGASUS外,我们还用它来重新训练了一版WoBERT模型(WoBERT+),也欢迎读者尝试(链接)。

预训练任务

对于预训练任务,我们希望更加接近自然语言生成(而不是像T5那样的只预测挖空部分),并且尽可能具有实用价值。为此,我们关注到了PEGASUS,来自论文《PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization》。PEGASUS在其论文称是专门为摘要定制的预训练模型,但在我们看来,它也可以作为通用的生成式预训练任务。PEGASUS的大体思路是通过最长公共子序列的方式该摘要类似的数据对,T5 PEGASUS并没有完全复现PEGASUS的做法,只是借鉴了PEGASUS的思路做语料构建。

T5 PEGASUS的训练数据示例

T5 PEGASUS的训练数据示例

具体来说,假设一个文档有n个句子,我们从中挑出大约n/4个句子(可以不连续),使得这n/4个句子拼起来的文本,跟剩下的3n/4个句子拼起来的文本,最长公共子序列尽可能长,然后我们将3n/4个句子拼起来的文本视为原文,n/4个句子拼起来的文本视为摘要,这样就构成了一个“(原文, 摘要)”的伪摘要数据对了,就用这些数据对去训练Seq2Seq模型即可。注意,如果文档里没有重复句子的话,那么原文跟摘要的句子是不会有交集的,所以这样的生成任务并非是原文的简单复制,因此还是有一定难度的。

搜索算法则是通过如下的贪心算法逐步搜索至满足长度要求:

1、先找出1个句子,使得它跟生成的n−1个句子的最长公共子序列最长;

2、假设已经找到了k个句子,那么继续找第k+1个句子,使得这k+1个句子拼起来的文本,跟剩下的n−k−1个句子拼起来的文本的最长公共子序列最长。

参数与配置

目前开源的T5 PEGASUS是base版,总参数量为2.75亿,训练时最大长度为512,batch_size为96,学习率为$10^{-4}$,使用6张3090训练了100万步,训练时间约13天,数据是30多G的精处理通用语料,训练acc约47%,训练loss约2.97。模型使用bert4keras进行编写、训练和测试。

Github地址:https://github.com/ZhuiyiTechnology/t5-pegasus

实验与评测

在CSL和LCSTS两个文本生成任务上,T5 PEGASUS是我们已知的所有模型中的SOTA:
1.png

更重要的是,T5 PEGASUS有着非常出色的小样本学习能力:
2.png

哪怕样本标注样本降低到10个,T5 PEGASUS依然可以微调出一个摘要(标题)生成模型出来,性能显著超过其他模型。在LCSTS上,T5 PEGASUS具有类似的小样本学习效果,只不过非T5 PEGASUS模型效果实在太差了,所以就没