2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享

2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第1张图片

前言

今年CCF-BDCI共有13道算法赛,其中涵盖了数据挖掘、自然语言处理、计算机视觉、数据库等多个方向;今年乘此机会参加了两个赛题,除了这个赛题还有另一个赛题【乘用车细分市场销量预测】,方案分享点此处。本赛题队友之前也分享过,传送门。“遥想公瑾当年“,自然语言处理还停留在word2vec,不知Bert是何物。说到这,特意感谢郭大、苏神,本次竞赛使用的微调Bert的代码是借鉴他们两位的,感谢他们无私的技术分享!最后留下一句感叹,时光已逝,技术迭代更新太快,保持学习才能保证我们的竞争力;2020,只争朝夕,不负韶华!


团队介绍

本团队5位成员分别来自华为、武汉大学、重庆邮电大学。团队成员配合默契,各尽其才,早在2019DigSci科学数据挖掘竞赛中取得不错的成绩。团队能取得当前成绩,跟每一位成员都密不可分。


赛题分析

赛题描述如下图所示,其实这题可以看作两个子任务。
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第2张图片


我们对训练集和测试集中的title和text长度进行了可视化展示,如下图所示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第3张图片
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第4张图片
由上图可知,title和text长度在训练集和测试集中的分布几乎一致。


由于数据集中很多样本的title和text一样或者很相近,因此不是所有样本都需要考虑将title和text拼接作为文本,因此统计了title与text的编辑距离小于100的样本数量在训练集和测试集中的占比,如下图所示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第5张图片


经大致分析发现,实体列表中很多实体与该列表中其它实体存在包含关系,而大多数子实体都不是key_entity;因此我们统计了实体列表中含有子实体的样本数量在训练集和测试集中的占比,可视化结果如下:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第6张图片


以下是我们对本题的难点描述和解题思路展示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第7张图片


因为该题数据不规范,含有噪声,因此需要对文本进行清洗,清洗流程如下图所示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第8张图片


我们还对实体列表进行了相关处理,即去子词:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第9张图片


方案设计

首先展示我们团队的整体方案,如下图所示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第10张图片
我们总共提出了三种不同方案来解决该问题,分别是:

  • 实体SA(Sentiment Analysis)
  • 文档SA+实体SA
  • 多任务模型

接下来分别对三种方案进行讲解,第一种是实体SA,即把两个子任务当成一个实体情感分析-分类任务:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第11张图片
样本构造样例:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第12张图片
以下是文本构造方法设计:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第13张图片
文本构造之后我们对该样本实体列表中的其它实体进行了替换,起到了标记其它实体位置的作用,替换方案如下:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第14张图片
最后是模型设计,我们通过构造句子对分类任务,微调bert[1]模型:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第15张图片


第二种是文档SA+实体SA,该方法就是先判断样本是否是负面的,如果样本是负面的再判断该样本的实体列表中每个实体的情感:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第16张图片
下图是文档SA、实体SA的输入设计和模型构建方法:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第17张图片


第三种是多任务模型,该方法将两个子任务结合起来共同学习;该方法启发于层次性多任务模型[2] 和多任务中的特征共享[3]:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第18张图片
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第19张图片
将多任务模型应用到本赛题中,将bert的最底层[CLS]向量取出来,在其后接两个单独的全连接层;两个全连接层分别对应文档情感二分类任务和实体二分类任务的特征表示,最后再在两个特征表示后面加上相应的输出层;微调过程中损失函数由上图的公式计算得出。


经过线上验证,我们的文档SA效果应该就比其它团队高至少将近一个千分点,因此为了方便后期模型融合和纠正方案一和方案三的negative准确性,本团队提出了情感校验的后处理方法,如下图所示:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第20张图片
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第21张图片


最后是模型融合,我们分别尝试了stacking和voting,最终决定采用voting,因为voting效果更好,鲁棒性更强。
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第22张图片


方案总结

最后是总结部分:
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第23张图片
三种方案对比下来,多任务模型表现优于另外两种方案。
2019-CCF-BDCI-金融信息负面及主体判定-top1赛后分享_第24张图片
初赛受规则的影响,有点过拟合A榜;到了复赛阶段,摒弃了所有后处理人工规则,因此在B榜切换之后只降了5个万分点,足以说明模型的稳定性。在文本预处理方面我们团队进行了充分地探索,提出了实体掩盖和多种文本构造方法;在模型方面,我们提出了bert+特征三输入、多任务模型;最后还提出了情感校验,进一步提升了预测的准确性。


开源代码

https://github.com/rogeroyer/2019-CCF-BDCI-Finance-Information-Negative-Judgment


参考文献

[1] Devlin J, Chang M, Lee K. et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT, 2019.
[2] Hashimoto K, Xiong C, Tsuruoka Y, et al. A joint many-task model: Growing a neural network for multiple nlp tasks[J]. arXiv preprint arXiv:1611.01587, 2016.
[3] Pentyala, Shiva K., Mengwen Liu and Markus Dreyer. “Multi-Task Networks With Universe, Group, and Task Feature Learning.” ACL (2019).

你可能感兴趣的:(大数据竞赛)