中药说明书命名实体识别方案总结
参考链接:https://github.com/positivepeng/2020-tianchi-ChMedNER
阅读上面搜罗的几个方案,对每个方案进行概述,并写一个 CheckList 方便自己回忆思考,每个点都可以尝试一下,不保证有效,炼丹。
冠军方案
链接:https://github.com/z814081807/DeepNER
概述:模型采用 BERT + CRF,使用 UER 预训练模型,差分学习率,采用和 BERT 一样的参数初始化,滑动参数平均。在这个基础上,引入几个优化。第一,对抗训练,FGM 和 PGD。第二,使用混合精度训练,提高速度。第三,模型融合,不同数据划分、随机数种子和句子长度,不同模型(BERT + SPAN,BERT + MRC)。第四,半监督学习,充分利用初赛的测试集。
CheckList
- 使用不同的预训练模型,UER
- 差分学习率
- 参数初始化
- 滑动参数平均
- 对抗训练,FGM 和 PGD 等
- 混合精度加快速度
- 模型融合,不同模型、不同数据
- 半监督学习
- BERT 最后四层动态加权
- BERT 后面再接一个模块,BiLSTM、DGCNN 等
- 数据增强,对同类实体词进行随机替换
- 使用 focal loss、dice loss 缓解标签不平衡
- 构造领域词典,修正模型输出
- 预处理,清洗无效字符,长句切分,切分出来过短的句子合并
亚军方案
链接:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586969.1002.6.25a33e5b7SqxIw&postId=154948
概述:暴力十折 BERT + CRF,模型融合。第一阶段,先用十折 BERT base + CRF + FGM 融合模型,用这个模型去清洗数据,然后将原始数据和清洗数据混合。第二阶段,用上面的数据,十折 BERT large + CRF,模型融合。很暴力。
CheckList
- 数据清洗,用模型去预测训练集,解决漏标、错标、手滑
- 尝试考虑词汇的模型 Lattice LSTM、Soft-Lexicon、FLAT
- 模型融合策略:保留召回率高的模型,设置投票的阈值尽可能提高准确率。十折,要 7 票才保留,阈值越高,越准确,但是召回越低。反之,阈值越低,准确率越低,召回率越高。
亚军方案
链接:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586969.1002.12.25a33e5b7SqxIw&postId=154826
概述:关注数据集特点!模型架构,BERT + BiLSTM + CRF + FGM。在这个基础上,根据数据集特点进行优化。第一,实体补全。相同的句子,在不同位置上标注不同。第二,增加长度特征。这队观察到漏标和样本长度有关系,要让模型学习到这个特征,所以引入了长度特征。模型融合策略,和上个方案中类似。
CheckList
这个方案更多地关注数据集特点,他们的方案不一定能用到别处。不过看到他们关注数据集特点并给出解决方法,特别佩服。
- 实体补全。
- 增加长度特征。
季军方案
链接:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586969.1002.3.25a33e5b7SqxIw&postId=155024
概述:BERT + BiLSTM + CRF / SPAN + FGM。
CheckList
- 针对错标,标签矫正。选择标签最多的类别作为真实标记。
- 数据增强。初赛数据做伪标签。
- BERT 不同层动态权重融合。
- 标签平滑。
- 预热学习率,任务层一开始是随机的,可能对 BERT 产生影响,所以刚开始小一些,后面就按照原来的学习率进行。
- 对抗训练,FGM。
- 参数滑动平均,SWA。
- 模型融合,不同阈值策略。训练集出现过的实体和没出现过的实体采用不同的阈值。
其他方案
链接:https://tianchi.aliyun.com/forum/postDetail?spm=5176.12586969.1002.9.25a33e5bTKPiNR&postId=154762
概述:各种模型融合。
CheckList
- 领域语料库上进行微调。
- 模型融合策略:每一折的每一个模型,去投票。