一、赛题任务
本赛题为抽取出京东商品标题中包含的商品实体信息,其与传统的实体抽取不同点在于京东商品标题文本的实体密度高、实体粒度细。本任务包括52种实体类型,并全部脱敏,标注标签采用“BIO”的形式。
官方给出100万条无标注数据+4万条标注数据。由此可以得出本赛题可以采用预训练或者半监督的方式进行构建模型,并且官方要求最终提交的模型为单模型。
二、各决赛选手方案
入围决赛的一共有6只队伍,主要有两种方案,分别为预训练方案和半监督方案,其中5/6的选采用预训练方案,1/6的选手采用半监督方案。基础模型采用的都是nezha+global pointer。
1、预训练方案
5/6的选手采用的是此方案,模型训练流程为:
(1)预训练:有的选手尝试了多种预训练方案,包括MLM、N-gram、WWM,最终3/6的选手使用了MLM,2/6的选手采用的是N-gram。预训练模型采用的都是nezha,其中5/6采用的是nezha-base,1/6的选手采用的是nezha-large。
(2)五折交叉验证预测无标注数据得到伪标签数据:预训练模型后,为了充分利用无标注数据,5/6的选手都使用五折交叉验证对无标注数据进行预测。
(3)筛选上述打了伪标签的无标注数据:这里主要方法有筛选置信度高的无标注数据,筛选一部分置信度高的+随机选择的无标注数据、使用全部伪标签数据。
(4)原始训练集融合微调模型:6位选手的微调模型都采用的是nezha+global point的结构,使用的数据为上述筛选得到的伪标签数据和原始训练数据。
2、半监督方案
在所有入围决赛的6位选手中,有一位选手没有采用预训练的方式,但是最终和采用预训练的选手的结果只在万分位上有差别。其方案流程为:首先提出一种针对电商领域命名实体识别的数据增强方法,并采用UDA半监督方式构建模型。模型整体结构为nezha+FLAT(Chinese NER Using Flat-Lattice Transformer)相对位置编码+global pointer。
(1)数据增强:针对电商命名实体识别任务,提出新的数据增强方法,主要包括三种:D1(样本内同类型实体随机替换)、D2(样本内n-gram随机交换位置)、D3(知识库内同类型实体随机替换)。最终使用单个增强方案没有提升,但是综合使用提升很多,达到和原始标注数据差不多的结果。并在先使用D1+D2+D3先微调模型,再使用原始数据微调模型得到了更好的结果。
(2) UDA半监督训练:将无标注数据、 原始标注数据、增强的标注数据一起输入模型,使用UDA论文中的训练方法进行训练。此选手尝试了三种训练方法,分别为不使用增强数据训练、所有数据放到一起直接训练、先使用增强数据训练有监督模型,再使用无标注和原始标签数据使用UDA方法进行半监督训练。最终最后一种达到最好的结果。
此选手最终加入了FGM对抗训练、R-drop、伪标签得到最终最高的结果。
三、各选手训练策略
采用的都是基本的训练策略,主要包括以下几种:
(1)对抗训练:FGM对抗训练、FGM和PGD交叉训练、AWP、PGD,使用PGD对embedding层进行扰动和AWP对注意力层进行扰动相结合。
(2)EMA(指数滑动平均)。
(3)两阶段微调:先使用伪标签微调或者增强数据微调,再使用标注数据微调。
(4)混合精度训练。
(5)衰减学习率、分层学习率。
(6)融合nezha输出的几层结果,而不是只使用最后的输出。
(7)SWA(随机加权平均)。
(8)Spatial Dropout。
(9)标签平滑的损失函数。
(10)R-drop。
四、各选手预处理、后处理策略
1、预处理策略
(1)将空格换成逗号或者特殊符号。
(2)输入转为小写,减少未登陆词。
2、后处理策略
(1)处理标点符号和单子实体。
(2)使用训练数据,统计实体的名称、类别、数量,制作知识库。对于存在多个实体类别的情况,选择知识库中对应的实体的实体类型最大的类别输出。对于嵌套实体,有限选择知识库中存在的实体,如果都存在,则按照模型预测数值选择。
(3)对于重叠实体选择概率最高的实体。
五、其他策略
1、解决实体类型预测不准的问题
有一位采用预训练方案的选手发现实体边界的准确率可以达到90%多,因此为了提升实体类型的准备率,使用论文Simplify the Usage of Lexicon in Chinese NER中的方法加入词汇信息,其中句子使用上述模型结构划分实体,而不是采用jieba分词(选手发现jieba分词后加入模型对模型没有效果)。然后使用word2vec训练实体embedding,最后按照此论文的方式加入预训练模型结构。
2、优化GlobalPointer的解码策略
有一位选手发现训练任务的损失函数(交叉熵)与评价指标(微平均)侧重点不同,损失函数的最优解并不是评价指标的最优解,其针对Micro F1指标进行了阈值搜索。
3、模型结构优化
有一位选手在nezha后续加入BILSTM,并使用拼接BILSTM的输出和nezha的输出,再输入GlobalPointer。
注:本文图片来源于参赛选手答辩PPT。