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

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

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

Tokenizer

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

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

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

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

这些特点让我们决定将 Tokenizer 切换回 BERT 的 Tokenizer。但直接替换原始版本的中文 BERT 的 Tokenizer 是不够的,一来是我们之前的工作《提速不掉点:基于词颗粒度的中文 WoBERT》[3] 已经表明以词为单位来做生成模型能获得更好的效果。

二来哪怕只看字中文 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+),也欢迎读者尝试。

https://github.com/ZhuiyiTechnology/WoBERT

预训练任务

对于预训练任务,我们希望更加接近自然语言生成(而不是像 T5 那样的只预测挖空部分),并且尽可能具有实用价值。为此,我们关注到了 PEGASUS,来自论文《PEGASUS: Pre-training with Extracted Gap-sentences for Abstractive Summarization》[4]。

PEGASUS 在其论文称是专门为摘要定制的预训练模型,但在我们看来,它也可以作为通用的生成式预训练任务。PEGASUS 的大体思路是通过最长公共子序列的方式该摘要类似的数据对,T5 PEGASUS 并没有完全复现 PEGASUS 的做法,只是借鉴了 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 [5] 为 96,学习率为 ,使用 6 张 3090 训练了 100 万步,训练时间约 13 天,数据是 30 多 G 的精处理通用语料,训练 acc 约 47%,训练 loss 约 2.97。模型使用 bert4keras 进行编写、训练和测试。

Github地址:GitHub - ZhuiyiTechnology/t5-pegasus: 中文生成式预训练模型中文生成式预训练模型. Contribute to ZhuiyiTechnology/t5-pegasus development by creating an account on GitHub.https://github.com/ZhuiyiTechnology/t5-pegasus

实验与评测

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

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


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


小样本演示

下面是标注样本数为 10 个时训练出来的模型生成效果演示: 

输入:针对以超立方体网络为蓝本的多处理机系统的可靠性和容错能力的精准度量问题,结合多处理机系统遭受计算机病毒攻击时常常发生结构性故障的特点,研究了 n 维超立方体网络的结构连通性和子结构连通性评价问题。首先,使用构造 n 维超立方体网络的 3 路结构割的方法得到其 3 路结构连通度的一个上界;然后,使用构造 n 维超立方体网络的 3 路子结构集的等价变换或约简变换的方法,得到其 3 路结构子连通度的一个下界;最后,利用任意网络的 3 路结构连通度不小于 3 路子结构连通度的性质,证实了超立方体网络的 3 路结构连通度和子结构连通度均为该超立方体网络维数 

标题:超立方体网络的3路结构连通度及子结构连通度

预测:基于n维超立方体网络结构连通性和子结构连通性评价研究

输入:针对传统无线体域网(WBAN)预测模型对感知数据预测精度低、计算量大、能耗高的问题,提出一种基于惩罚误差矩阵的自适应三次指数平滑算法。首先在感知节点与路由节点之间建立轻量级预测模型,其次采用地毯式搜索方式对预测模型进行参数优化处理,最后采用惩罚误差矩阵对预测模型参数作进一步的细粒化处理。实验结果表明,与 Zig Bee 协议相比,在 1000 时隙范围内,所提方法可节省 12% 左右的能量;而采用惩罚误差矩阵与地毯式搜索方式相比,预测精度提高了 3.306%。所提方法在有效降低计算复杂度的同时能进一步降低 WBAN 的能耗。

标题:基于惩罚误差矩阵的同步预测无线体域网节能方法

预测:基于惩罚误差矩阵的自适应三次指数平滑算法

输入:针对车联网(IoV)环境下消息传输效率低下、网络资源开销较大等诸多问题,提出一种适用于城市交通场景下基于车辆节点认知交互的路由算法。首先,依据信任理论提出节点认知交互度的概念,并在此基础上对车联网中的车辆节点进行分类,赋予它们不同的认知交互度初值;同时还引入车辆节点交互时间、交互频率、车辆节点物理间隔距离、间隔跳数以及消息生存时间等影响因子,进而构建了车辆节点认知交互评估模型。基于该模型计算并更新节点的认知交互度,并通过比较对应车辆节点间的认知交互度值来选取认知交互度相对较高的邻居节点作为中继节点进行消息转。

标题:车联网环境下基于节点认知交互的路由算法

预测:基于车辆节点认知交互的路由算法

输入:针对近场源波达方向(DOA)和距离的联合估计问题,提出一种近场迭代自适应算法(NF-IAA)。首先通过划分二维网格表示出近场区域内信源所有可能的位置,每个位置都看作存在一个潜在的信源入射到阵列上,表示出阵列输出的数据模型;然后通过循环迭代利用上一次谱估计的结果构建信号的协方差矩阵,将协方差矩阵的逆作为加权矩阵估计出每个位置对应的潜在信源能量;最后绘制出三维能量谱图,由于只有真实存在的信源能量不为 0,因此谱峰对应的位置即为真实存在信源的位置。仿真实验表明在 10 个快拍条件下,NF-IAA的DOA 分辨概率达到了 9。

标题:基于迭代自适应方法的近场源二维参数联合估计

预测:基于nf-iaa的近场迭代自适应算法

输入:针对现有的软件众包工人选择机制对工人间协同开发考虑不足的问题,在竞标模式的基础上提出一种基于活跃时间分组的软件众包工人选择机制。首先,基于活跃时间将众包工人划分为多个协同开发组;然后,根据组内工人开发能力和协同因子计算协同工作组权重;最后,选定权重最大的协同工作组为最优工作组,并根据模块复杂度为每个任务模块从该组内选择最适合的工人。实验结果表明,该机制相比能力优先选择方法在工人平均能力上仅有 0.57% 的差距, 同时因为保证了工人间的协同而使项目风险平均降低了 32%,能有效指导需多人协同进行的众包软件任务的工。

标题:基于活跃时间分组的软件众包工人选择机制

预测:基于活跃时间分组的软件众包工人选择机制 

可以看到哪怕标注样本很少,但依然能够得到可读性较好的生成结果,这得益于 PEGASUS 式的伪摘要预训练与下游任务是很贴近的。 

简单的总结  

本文主要分享了我们的中文生成式预训练模型 T5 PEGASUS,它以 mT5 为基础,在中文语料上使用 PEGASUS 式的伪摘要预训练,最终有着不错的文本生成表现,尤其是出色的小样本学习能力,欢迎有文本生成需求的读者使用。

参考文献

[1] https://arxiv.org/abs/1912.08777

[2] https://github.com/google/sentencepiece

[3] https://kexue.fm/archives/7758

[4] https://arxiv.org/abs/1912.08777

[5] https://kexue.fm/archives/bert4keras
————————————————
版权声明:本文为CSDN博主「PaperWeekly」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/114859213

你可能感兴趣的:(自然语言,python,数据挖掘,机器学习)