[论文笔记] 2021-AAAI-Continual Learning for Named Entity Recognition
0 写在前面
什么是持续学习?
我们人类有能够将一个任务的知识用到另一个任务上的能力,学习后一个任务时也不会忘记如何做前一个任务。这种能力叫持续学习 (continual learning/ life-long learning) 总结为两点:
- 如何能把之前任务的经验用上,使得更快更好的学习当前任务;
- 学习当前任务时,不会忘记之前已经学会的任务。
Introduction
Motivation
-
一些真实场景下,需要经常引入新的实体类型
举例语音助手Siri,
-
当存储限制或安全问题限制访问时,为新的实体类型标注新的数据集代价昂贵,甚至不可能
-
原始的训练数据可能不再提供
-
原始的训练数据也不一定包含足够数量的新的实体类型
思路
-
为模型应该识别的所有实体注释一个新的数据集
随着实体类型的增加,为所有实体类型标注新的数据集不切实际且容易出错
-
仅为新的实体类型进行标注一个新的数据集,并结合持续学习,以此数据来更新模型
容易受到以前实体类型的灾难性遗忘
所以寻求让现有的NER模型的知识传授给一个新的模型
- 自训练
确实只用标新的实体类型了,但是旧模型的误差被传播到了新的模型 [ 1 ] ^{[1]} [1]中,而没有考虑到旧模型预测的不确定性可以帮助新模型更好的了解旧实体 [ 2 ] ^{[2]} [2]
[1] 自训练是用能识别旧实体的模型去标注新数据集中旧实体,这是hard label,旧模型也不是百分百准确的,旧模型的误差被传播到了新的模型中就是说的这个问题
[2] 这种不确定性是指soft label 取代one-hot
- 知识蒸馏
采用KD是为了避免以前实体类型的灾难性遗忘,而不是为了压缩模型
为了学生模型和教师模型的行为相似,学生模型被鼓励学习教室模型的输出概率分布,而不是标签
-
contribution
- 将CL技术应用到了NLU领域,以逐步学习NER的新的实体类型
- 方法可以是模型能够持续学习新的实体类型而不失去识别旧实体类型的能力
- 以半监督策略取得与完全监督设置相当的结果
Method
符号定义
最初已经训练好的模型为 M i M_i Mi,可识别的实体类型有 E i = { e 1 , … , e n } E_{i}=\left\{e_{1}, \ldots, e_{n}\right\} Ei={e1,…,en}
我们想要训练一个新的模型 M i + 1 M_{i+1} Mi+1,以期望识别新的实体类型 E new = { e n + 1 , e n + 2 , … , e n + m } E^{\text {new }}=\left\{e_{n+1}, e_{n+2}, \ldots, e_{n+m}\right\} Enew ={en+1,en+2,…,en+m}和旧的实体类型 E i E_i Ei
我们仅标注一个新的数据集 D n e w D^{new} Dnew中的新实体类型 E n e w E^{new} Enew
我们想要 M i + 1 M_{i+1} Mi+1能够学习到识别新实体类型 E n e w E^{new} Enew,同时也不遗忘识别旧的实体类型 E i E_i Ei的能力
AddNER模型

结构:
教师模型就是原来用于识别 E i E_i Ei的 M i M_i Mi,学生模型 M i + 1 M_{i+1} Mi+1是在 M i M_i Mi的基础上,添加了一个新的输出层,用于识别 E n e w E^{new} Enew
过程:
教师模型在 D n e w D^{new} Dnew上预测输出关于 E i E_i Ei的soft labels,学生模型在仅标注 E n e w E^{new} Enew的 D n e w D^{new} Dnew进行训练
旧的输出层识别用于识别 E i E^{i} Ei,输出one-hot结果 p E i M i + 1 p_{Ei}^{M_{i+1}} pEiMi+1,与教师模型输出的soft labels 结果 p E i M i p_{Ei}^{M_i} pEiMi计算两者之间的KL散度损失 L K L A d d = K L ( p E i M i , p E i M i + 1 ) L_{KL}^{Add}=KL(p_{E_i}^{M_i},p_{Ei}^{M_{i+1}}) LKLAdd=KL(pEiMi,pEiMi+1)
新的输出层识别用于识别 E n e w E^{new} Enew,输出one-hot结果 p E n e w M i + 1 p_{E^{new}}^{M_{i+1}} pEnewMi+1与人工标注数据y来计算交叉熵损失 L C E A d d = C E ( y , p E n e w M i + 1 ) L_{CE}^{Add}=CE(y,p_{E^{new}}^{M_{i+1}}) LCEAdd=CE(y,pEnewMi+1)
模型是根据每个标注的两个损失函数的加权求和进行训练的,即 L A d d = α L K L A d d + β L C E A d d L^{Add}=\alpha L_{KL}^{Add}+\beta L^{Add}_{CE} LAdd=αLKLAdd+βLCEAdd
QA
1. 不同输出层,对同一个token有不同的标注,如何处理?
比如南京市长江大桥, 可能是南京市,即标签为是I-,也可能是市长,即为B-
-
如果所有层都为O,则为O
-
如果有一个为B-,其他为O,则输出B-
-
如果多个输出层为B-,其他层为O,那么给最高概率的输出层B-
-
如果预测一个标签为I-,那么前面的标签必须与之匹配,否则再次使用启发性算法确定最终输出
比如预测一个标签为I-loc,那么前面不能是B-Org,或者不能是O,等等
启发性算法在此处应该指按照标签的概率,顺序尝试其他的标签,直到找到能匹配的标签
疑问
1. 每次新增加类型,是不是都要新增加一个输出层,还是说,模型训练完,就把输出层给删除了,最后只保留一个输出层?
ExtendNER模型

结构:
M i + 1 M_{i+1} Mi+1是在 M i {M_i} Mi的基础上,对输出层进行了扩展,拓展部分能够识别 E n e w E^{new} Enew(m个)新实体类型.假定 M i M_i Mi能识别n个实体类型,那么对应的标记矩阵为h×(2n+1),则 M i + 1 {M_{i+1}} Mi+1对应的标记层维度为h×(2n+2m+1)
h是token的数量, 每个实体标签有 一个B- 一个I- +1 是 O标签
过程
如果一个token被标记为新实体类型,那么将使用交叉熵损失函数,否则教室模型的软标签和结果使用KL散度损失
损失计算和AddNER一致,
获得最终 标签是通过Viterbi算法获取,其中发射矩阵时 M i + 1 M_{i+1} Mi+1的输出结果,转移矩阵是是防止出现不可能的转换,直接硬编码
疑问
发射矩阵时 M i + 1 M_{i+1} Mi+1的输出结果是one-hot还是软标签??
如果是one-hot,就不需要 维特比算法了
Experimental Evaluation
数据集
- CoNLL-03

- OntoNotes
Experimental setup
CoNLL-03、OntoNotes分别划分为4、6个不相交的子集 D 1 , D 2 , D 3... D_1,D_2,D3... D1,D2,D3...
Experiment
AddNER&ExtendNER
避免实体的顺序之间有任何依赖关系,使用了不同的实体顺序
因为在训练过程中,每次新增的数据集只标注新的实体类型,防止某种顺序影响结果,定义多种顺序训练
对照实验
研究KD对传授先前知识的效果
使用一个no-KD的方法----自训练
前面提到过,主要区别是使用的hard label

对比迁移学习方法
和AddNER一样,在 M i {M_i} Mi基础上,增加一个输出层,不同的是,把老的输出层frozen,以保留识别老实体的能力,然后用 D n e w D^{new} Dnew(仅标注了 E n e w E^{new} Enew)训练新的输出层
从模仿AddNER的结构上,进行实验
result
free transfer model the average performance at step 2 was 56.21.(F1 score)
frozen transfer model , the average overall F1 scores at step 2 was 57.49
frozen transfer model 即限制编码器更新,这是限制了模型学习新实体的能力
free transfer model 这分数是因为先前知识的灾难性遗忘
疑问
-
识别老实体的能力不是在模型里吗??感觉没啥用
-
in this setting,we may choose to freeze the encoder when updating the model (frozen transfer) or not (free transfer).
D n e w D^{new} Dnew仅标注 E n e w E^{new} Enew和完全标注的对比
1. CL fully-annotated model
每一步,使用完全标注的 D i D_i Di进行训练
2. non-CL last slice model
每一步,使用 D i D_i Di从头开始训练
3. non-CL complete model
每一步,使用( D 1 , . . . , D i ) D_1,...,D_i) D1,...,Di)进行训练
疑问
- CL fully-annotated model完全标注了,是怎么进行CL的
Result

-
在CoNLL-03数据集 student模型分数逐步增加,说明模型能学到识别新实体能力的同时,也保留识别老实体的能力
-
对比硬标签模型,CoNNL-03中平均比硬标签好0.37分,OntoNotes中比硬标签模型好0.81
感觉是这个文字游戏,在OntoNotes数据集中,整体好0.81…不过整体确实比硬标签模型好
-
比每一步的non-CL last slice model都要好,说明从 M i M_{i} Mi到 M i + 1 M_{i+1} Mi+1克隆编码器对student模型的成功至关重要,或者说,仅对新数据进行从头训练,即使新数据完全标注,也并不是特别有效
-
non-CL complete model和CL fully-annotated model显然会比extendNER结果好,但随着新的实体类型的增加,他们标注数据的代价太过昂贵,extendNER可以在仅标注新的数据类型,就可以达到良好的整天性能
验证学生模型是否能够在学习一个新的实体类型时,保留先前学习过的实体类型知识

在ExtendNER Student模型上进行测试, e 1 e_1 e1折线表示 每一步 s t e p i step_i stepi中模型预测实体类型 e 1 e_1 e1的平均F1 score,这表示了学生模型在每一步中保留识别 e 1 e_1 e1知识的程度,
虽然部分出现下降的确实,但是这种下降并不显著,可以说明对先前知识有着很好的保留,甚至可以获取通过KD训练的实体的知识
Conclusions
提出了一种用于命名实体识别的持续学习的方法,通过拓展模型来识别新的实体类型,并且更新训练时,只需要标注数据集中的新实体类型,并利用知识蒸馏,防止遗忘和逐步学习新的实体类型
展望
-
集成一个学习过的crf层来考虑标签之间的全局依赖关系
-
研究类似的方法来更新在一个领域的模型,以支持不同领域的新实体类型