1、EMNLP-2019-Text Summarization with Pretrained Encoders
论文地址
https://aclanthology.org/D19-1387/
代码地址
pytorch
https://github.com/nlpyang/PreSumm
带有部分注释的pytorch代码
https://github.com/tyistyler/PreSumm_Annotation
注意事项
(1)pyrouge需要正确安装;github中提供了预处理好的数据集,建议下载json数据自己处理一遍。
(2)抽取式摘要:
- 抽取的目标句子需要根据特定的方法预先生成;
- 得到bert每个token的输出后,利用每个句子的cls标签,得到batch个句向量-[batch_size, cls_num, hidden_dim],然后通过一个全连接网络得到输出目标-[batch_size, cls_num],最后与真实标签label计算loss。
- 在验证阶段,使用loss来保存模型(即保存loss最小的模型) 。
- 在预测阶段,选择得分最高的前n个句子即可,n是超参数。
(3)生成式摘要:
- 在训练阶段,对于一句话的前n-1个token,利用Bert和Transformer_Decoder,预测这句话的后n-1个token;
- 在训练阶段,loss使用了平滑技术和KL散度,调用方法为
batch_stats = self.loss.sharded_compute_loss(batch, outputs, self.args.generator_shard_size, normalization)。- 在验证/测试阶段,loss计算调用方法为batch_stats = self.loss.monolithic_compute_loss(batch, outputs)。
- 在验证阶段,使用loss来保存模型(即保存loss最小的模型) 。
- 在测试/预测阶段,使用Beam search来生成结果。
附Beam search例子。