2022年天马杯新闻文本扩充生成赛道冠军方案分享( 二 )


可以说明训练集和测试集标题长度基本一致 。
下两图是训练集和测试集中新闻素材(中根据[SEP]划分后的第二段)个数分布 。
训练集新闻素材个数分布
测试集新闻素材个数分布
可以看出训练集和测试集新闻素材个数基本一致 。
简单分析赛题和数据后可以得到如下结论:
03
基础模型选用
该任务是一个任务,因此适合使用-架构的模型 。我们决定使用中文预训练的BART模型,这是因为BART的预训练任务和本赛题的任务相当接近 。BART的预训练任务去噪自编码器(DAE),即输入一段通过片段增加、删除、掩蔽、乱序等方式添加了噪声的文档,训练模型来还原出原始的文档 。本赛题其实就相当于从原始文本中掩蔽了一些片段,要求模型完整还原被掩蔽掉的片段,同时尽量保证文本的流畅性 。(甚至我上面任务说明的图都是用BART改的)
为什么不使用GPT等模型:不适合扩写任务,强行使用估计要大1个数量级以上的参数才能达到相同效果 。
为什么不用中文T5:T5的无监督训练任务和BART思想一致,但做法有一些差别 。T5预训练中会随机MASK一些Span,但在端只需要模型输出被MASK的部分而不是像BART一样让模型输出完整的原始文本 。因此BART的任务形式和本题更为接近 。(当然,T5其实不是不能用,只要把任务改造成类似T5的填空任务形式就好了,但想了想会有些很麻烦的细节问题所以就没用这个方案)
具体到模型,我们选用了IDEA研究院开源的封神榜系列模型中的139M参数量的“燃灯”中文BART模型,半精度格式保存的模型文件大小278M,符合比赛要求 。
实际上,我们也比较了几种不同的预训练模型,包括mT5-small,复旦,燃灯T5,燃灯BART 。线下比较的结果是燃灯BART > 复旦 > 燃灯T5 > mT5-small 。
BART和T5的比较已在上面说明,但为什么燃灯BART比复旦BART效果好,我个人无责猜测:燃灯BART使用的是类似T5的,使用分词机制,的结果是字词混合的;而复旦BART使用,对中文的结果是按字切分 。所以燃灯BART输入的文本长度其实会比复旦BART输入的文本短一些,而且新闻文本很多也是常见词组合,词组的稀疏问题也不明显,文本长度短就减少了对长文本建模的压力 。
04
优化思路与方法
主要是一些简单有效的改进点,拒绝花里胡哨 。
词表扩充
经过对实验结果和模型词表的分析,我们发现各个预训练模型使用的都缺失了一部分常用的中文字符,主要是一些常见的中文标点符号(复旦BART和燃灯BART的词表都缺了很多全角中文标点,但复旦后来更新了中文BART的词表应该没有这个问题了) 。如果不对词表进行扩充的话会对训练和生成的过程造成很大的影响 。
扩充词表对结果影响比较大,是关键的上分点(当然,也可以考虑把训练集中不在词表里的标点符号映射到在词表里的,后处理的时候再映射回去) 。
对端输入的随机替换
曝光偏差( Bias)是生成模型中老生常谈的问题 。训练过程中使用 的方式并行训练,端的输入和输出只差别一个Token的Shift,训练每一个Token的时候模型看到的上文都是正确答案,然而推理过程模型依赖的上文是模型自身生成的结果,如果模型前面生成错了,就容易把自己带到沟里去,引起误差传播的问题 。
所以有一个大家都知道的简单方法来缓解曝光偏差问题:在构造训练样本时随机选取端输入的一部分Token,将其替换为其他随机Token,模拟生成过程中出错的情况 。
当然,也有更复杂的替换策略,比如首先随机选取替换多少个Token,然后再选取要替换的位置,或者替换的时候一部分Token选择替换为输入序列中存在的Token模拟重复生成的情况,不过这里我就没有考虑 。