法研杯参赛总结:“抽取-生成”式长文本摘要

本文介绍了作者在“法研杯”司法摘要比赛中采用的SPACES模型,该模型结合抽取和生成方式,利用新型Copy机制、Sparse Softmax等方法提升性能。通过“抽取+生成”的思路,模型能在长文本摘要任务中取得较好效果,尤其在保证摘要忠实度方面有显著优势。
摘要由CSDN通过智能技术生成

©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

“法研杯” [1] 算是近年来比较知名的 NLP 赛事之一,今年是第三届,包含四个赛道,其中有一个“司法摘要”赛道引起了我们的兴趣。经过了解,这是面向法律领域裁判文书的长文本摘要生成,这应该是国内第一个公开的长文本生成任务和数据集。过去一年多以来,我们在文本生成方面都有持续的投入和探索,所以决定选择该赛道作为检验我们研究成果的“试金石”。很幸运,我们最终以微弱的优势获得了该赛道的第一名。在此,我们对我们的比赛模型做一个总结和分享。

▲ 比赛榜单截图

在该比赛中,我们跳出了纯粹炼丹的过程,通过新型的 Copy 机制、Sparse Softmax 等颇具通用性的新方法提升了模型的性能。整体而言,我们的模型比较简洁有效,而且可以做到端到端运行。窃以为我们的结果对工程和研究都有一定的参考价值。

赛题分析

观察、分析任务数据是 NLP 的第一步,也是相当重要的一步,它关系到我们后面的模型选择,也关系到后面的提升方向。

1.1 统计信息

这次比赛官方共提供了 9484 个标注样本,以“(原文, 摘要)”这样的数据对形式出现,原训练数据还附带了其他的一些辅助标注信息,但为了模型的通用性,我们没有用这些辅助信息,所以我们的模型原则上适用于所有单条样本格式为“(原文, 摘要)”的监督式摘要任务。

下面是训练数据的一些统计信息:

1、总量:9484;

2、输入:平均字数 2568,字数标准差 1122,最大字数 13064,最小数字 866;

3、输出:平均字数 283,字数标准差 36,最大字数 474,最小数字 66;

4、指标:以词为单位的加权 Rouge。

因此,简单来说这大概就是一个“输入 3000 字、输出 300 字”的文本生成任务,其难度在于两千多的平均长度远远超出了我们平时处理的文本长度。

1.2 样本预览

▲ 法研杯2020司法摘要赛道样本演示

上图演示的是训练集的某个样本,其中上面是输入(裁判文书原文),下面是输出(人工标注的摘要),其中绿色部分标注的是两者的“最长公共子序列”。可以看到,输出跟输入是高度重合的。

1.3 建模思路

综合上述数据特性,我们不难想到应该采取“抽取+生成”相结合的方式进行摘要,并配合一些新方法来保证摘要的忠实程度与提升最终的效果。最终的模型笔者我们命名为 SPACES:

S:Sparse Softmax(新设计的 Softmax 替代品);

P:Pretraiend Language Model(预训练模型);

A:Abstractive(抽象式,即生成式);

C:Copy Mechanism(新设计的 Copy 机制);

E:Extractive(抽取式);

S:Special Words(将特殊词添加到预训练模型)。

很显然,这是笔者“煞费苦心”强行拼凑的(捂脸),对应于本人博客的域名之一“spaces.ac.cn”。不过,上述缩写确实已经把我们的模型的主要技术点都罗列出来了。下面我们将仔细介绍 SPACES 为何物。

抽取模型

这一节我们将对抽取模型部分做一个简要介绍。抽取模型的思路是先通过规则将原始的生成式语料转化为序列标注式语料,然后用笔者常用的 DGCNN 模型来建模。

2.1 语料转换

首先,我们需要记住的是,抽取模型只是过程而不是结果,我们还要把抽取的结果送入到 Seq2Seq 模型优化。因此,抽取模型的原则是“求全”,即尽量把最终摘要所需要的信息覆盖到。为此,我们按照如下规则将原始训练语料转换为抽取式语料:

1、自行构建分句函数,使得句子的颗粒度更细;

2、人工摘要的每个句子,都在原文中匹配与之相似度最高的那个句子(可以重复匹配);

3、将所有匹配到的原文句子作为抽取句子标签;

4、删掉部分匹配出来的句子,使得与人工摘要的 Rouge 得分最高。

注意,我们在最终模型中删掉了第 4 点,而它本来是我们最初版模型的默认选择。事实上,加上第 4 点有利于提高抽取模型的指标,但是综合生成模型后最终得分反而下降了。

这不难理解,生成模型本来有删改功能,而且比抽取模型做得更好;如果抽取模型意外地把本应该抽取的关键句子删掉了的话,那么生成模型就很难把它恢复出来了,从而导致性能下降。也就是说,第 4 点不满足抽取模型的“求全”原则,我们应该把删改工作教程生成模型来做,不应该放到抽取模型中。

2.2 指标问题

上述转换流程涉及到一个“相似度”的选择,根据前面的介绍,本次比赛选择“以词为单位的加权 Rouge”作为评测指标,因此我们可以直接选择这个加权 Rouge 作为相似度指标。事实上,我们一开始确实是这样做的,但是后来在调试的时候发现,这样并不是一个好的选择,我们最终选择的是“以字为单位的加权 Rouge”。

这两者有什么区别呢?对于以词为单位来算评测指标的做法,我们也不难理解其目的,就是为了使得专有名词能够完全匹配上。比如本来是“中华人民共和国未成年人保护法”,你预测成了“中华人民共和国文物保护法”,如果以字为单位的话,最长公共子序列为“中华人民共和国xxx保护法”,至少还是算对了大部分,但是如果以词为单位的话,两者就是不同的词,因此算全错。因此,以词为单位有利于专有名词匹配得更精准

然而,以词为单位会带来一个严重的副作用,那就是降低了长词的权重。比如“根据 《 中华人民共和国未成年人保护法 》 的 有关 规定”中,核心词“中华人民共和国未成年人保护法”的权重仅为 1,剩下的“根据”、“《”、“》”、“的”等我们认为无关紧要的词权重分别都为 1,占了大部分,这样一来,模型宁愿去匹配“根据”、“《”、“》”、“的”等词,也不愿意去拟合核心词“中华人民共和国未成年人保护法”了。说白了,以词为单位的话,得分高的摘要未必是有什么关键信息的摘要。 

那怎么调和两者呢?事实上,最好的方案应该还是以词为单位,但是算指标的时候,按照字数跟每个词加权,比如“中华人民共和国未成年人保护法”,匹配不上就给 0 分,匹配对了就给 14 分(因为有 14 个字)而不是 1 分才好。不过,这需要自己来实现 Rouge 计算函数,有点麻烦,我们最终是直接选择以字为单位来算加权 Rouge,这也勉强够用,因为在转换语料的时候,我们知道摘要和原文都是在描述同一件案子,因此基本不会出现“中华人民共和国未成年人保护法”预测成“中华人民共和国文物保护法”的情况。

2.3 模型结构

回到模型方面,我们使用的是以句为单位的序列标注模型作为抽取模型,句向量部分用“BERT+平均池化”来生成,并固定不变,标注模型主体方面则用 DGCNN 模型构建。关于 DGCNN 模型,请参考基于 CNN 的阅读理解式问答模型:DGCNN、开源一版 DGCNN 阅读理解问答模型(Keras版)[2] 、基于DGCNN和概率图的轻量级信息抽取模型等。

▲ SPACES的抽取模型示意图

值得指出的一个细节是,在训练抽取模型的时候,我们是以 0.3 为阈值做 EarlyStop 的,但最终以  0.2  为阈值构建生成模型的数据,依据还是前面说的抽取模型的原则是要“求全”。

2.4 输出数据

我们需要将原文作为输入,通过抽取模型输出抽取摘要,然后把抽取摘要作为生成模型的输入,来输出最终摘要。但是,这有一个问题,训练的数据我们都是见过的,但我们真正预测的是未见过的数据,如果直接训练一个抽取模型,然后用该模型抽取训练集的摘要,那么很明显由于都被训练过了,抽取出来的摘要分数肯定会偏高,而新样本的效果则会偏低,造成训练预测的不一致性。

这时候的解决方案就是交叉验证了。具体来说,我们将标注数据分为 n 份,其中 n-1 份训练抽取模型,然后用这个抽取模型预测剩下的那份数据的抽取摘要,如此重复 n 遍,就得到全部数据的抽取摘要,并且尽可能地减少了训练和预测阶段的不一致性。

生成模型

生成模型是我们投入主要时间的部分,也是我们的主要贡献点。生成模型就是一个Seq2Seq 模型,以抽取模型的输出结果作为输入、人工标注的摘要作为输出进行训练,我们可以理解为是对抽取结果做进一步的“润色”。

3.1 模型总览

如果用一张图概括我们的生成模型,那么大概如下:

▲ SPACES的生成模型示意图

接下来我们会介绍模型的各个模块。

3.2 基础架构

Seq2Seq模型依然选择了经典的UniLM(参考从语言模型到 Seq2Seq:Transformer 如戏,全靠 Mask),并且考虑到“输入+输出”的总长度基本上都超过 512 了,所以选择华为的 NEZHA 模型作为基础模型架构,因为 NEZHA 使用了相对位置编码,不限长度。

当然,这是当时的选择,现在的话我们至少还有如下两个选择:

1、参考层次分解位置编码,让 BERT 可以处理超长文本中的直接延拓绝对位置编码的做法,使得 BERT 有能力直接处理更长序列(理论上可达 26 万),自然也可以用于“BERT+UniLM”中;

2、使用那个屠榜的 T5 模型,现在可以在中文上玩玩了 [3] 的多国语言版 T5 模型(mT5),它用的也是相对位置编码,不限长度,但要注意 T5 用的 tokenizer 会将全角逗号转为半角逗号,这会导致评测分数下降。

此外,在使用预训练模型方面,我们首创地将部分词语加入到了 NEZHA 模型中,改变了中文预训练模型以字为单位的通用选择,这使得模型的效果和速度都有一定的提升。这部分结果已经发布在之前的文章提速不掉点:基于词颗粒度的中文 WoBERT [4] 之中,读者可以移步参考。

3.3 BIO Copy

Copy机制在摘要生成模型中并不新鲜,甚至可以说已经成为了生成式摘要的标配了。常规的 Copy 机制一般就是 PointerNet [5] 的做法,但这种做法有两个不足之处:1)每次只能 Copy 一个 token,不能保证 Copy 一个连续片段(n-gram)出来;2)实现起来比较复杂,不够即插即用。为此,我们构思了一种新型的 Copy 机制,暂时称为 BIO Copy,它实现起来非常简单,而且具有 Copy 连续片段的能力。

其实前面的图示已经展示了这种 Copy 机制,它其实就是在 Decoder 部分多加一个序列预测任务,即原来 Decoder 建模的是每个 Token 的分布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值