IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 读论文 2021-AAAI-Continual Learning for Named Entity Recognition -> 正文阅读

[游戏开发]读论文 2021-AAAI-Continual Learning for Named Entity Recognition

读论文 2021-AAAI-Continual Learning for Named Entity Recognition

0 写在前面

什么是持续学习?

我们人类有能够将一个任务的知识用到另一个任务上的能力,学习后一个任务时也不会忘记如何做前一个任务。这种能力叫持续学习 (continual learning/ life-long learning) 总结为两点:

  • 如何能把之前任务的经验用上,使得更快更好的学习当前任务;
  • 学习当前任务时,不会忘记之前已经学会的任务。

Introduction

Motivation

  • 一些真实场景下,需要经常引入新的实体类型

    举例语音助手Siri,

  • 当存储限制或安全问题限制访问时,为新的实体类型标注新的数据集代价昂贵,甚至不可能

    1. 原始的训练数据可能不再提供

    2. 原始的训练数据也不一定包含足够数量的新的实体类型

    思路

    • 为模型应该识别的所有实体注释一个新的数据集

      ? 随着实体类型的增加,为所有实体类型标注新的数据集不切实际且容易出错

    • 仅为新的实体类型进行标注一个新的数据集,并结合持续学习,以此数据来更新模型

      ? 容易受到以前实体类型的灾难性遗忘

      所以寻求让现有的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模型

image-20220302165626850
结构:

教师模型就是原来用于识别 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(pEi?Mi??,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模型

image-20220303091052838
结构:

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?的输出结果,转移矩阵是是防止出现不可能的转换,直接硬编码

image-20220303100452513

疑问

发射矩阵时 M i + 1 M_{i+1} Mi+1?的输出结果是one-hot还是软标签??

如果是one-hot,就不需要 维特比算法了

Experimental Evaluation

数据集

  • CoNLL-03
image-20220303101259593
  • OntoNotes
image-20220303101307857

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

image-20220303103414704
对比迁移学习方法

和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 这分数是因为先前知识的灾难性遗忘

疑问
  1. 识别老实体的能力不是在模型里吗??感觉没啥用

  2. 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?)进行训练

疑问
  1. CL fully-annotated model完全标注了,是怎么进行CL的

Result

image-20220303111450176
  • 在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可以在仅标注新的数据类型,就可以达到良好的整天性能

验证学生模型是否能够在学习一个新的实体类型时,保留先前学习过的实体类型知识
image-20220303181933271

在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层来考虑标签之间的全局依赖关系

  • 研究类似的方法来更新在一个领域的模型,以支持不同领域的新实体类型

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:53:59  更:2022-03-12 17:56:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 3:59:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码