跳转至

9.1 预训练模型的知识融入

预训练模型知识融入


学习目标

  • 理解什么是知识融入.
  • 理解向预训练模型中进行知识融入的基本方法.

知识融入的概念

  • 自从2018年BERT横空出世以来, 预训练模型在理解, 生成等任务上取得了重大的进展. 但是大量研究表明, 以无监督方式训练的语言模型很难获取丰富的知识.

  • 因此自从2019年以来, 通过设计knowledge-driven的训练目标来增强语言模型的训练目标, 然后通过多任务学习的方式更新模型的全部参数的方法取得了重大进展, 列举如下:


  • 但是上述方法存在几个缺陷:
    • 1: 无法进行持续学习(continual learning).
      • 模型的参数在引入新知识的时候需要重新训练.
      • 对于已经学到的知识来说, 会造成灾难性遗忘(catastrophic forgetting).
    • 2: 模型产生的是耦合的表示.
      • 为进一步探究引入不同知识的影响带来困难.

  • 原始论文<< K-ADAPTER: Infusing Knowledge into Pre-Trained Models with Adapters >>, 由复旦大学和微软中国于2020年底共同发布.

  • 论文中Related Work部分对于向PLM中注入知识这一方向进行了很好的梳理, 相关工作的区别主要在于:

    • 1: knowledge sources
    • 2: training objective


知识融入的方法

  • 本文提出了K-Adapter, 一种灵活, 简便的向PLM中注入知识的方法, 可以进行持续知识融合以及产生解耦的表示, 保留了PLM产生的原始表示, 可以引入多种知识.

  • Adapter可以看做是一个knowledge-specific模型, 可以作为一个插件加在PLM外部, 输入包含PLM中间层输出的隐状态, 一种知识类型对应于一个Adapter, 一个PLM可以连接多个Adapter.

  • 引入的知识类型:

    • factual knowledge, 将Wikipedia文本对齐到Wikidata三元组.
    • linguistic knowledge, 对web文本进行依存分析得到.

  • 本文贡献: 提出了一个K-Adapter模型

    • 通过知识适配器可以同时引入factual knowledge和linguistic knowledge.
    • 最终的模型包含一个PLM和两个Adapter.
    • 在下游任务, 以及在LAMA上的实验表明, 与RoBERTa相比, K-Adapter可以捕获更丰富的factual和commonsense知识.
  • 本文工作与先前工作的3个不同之处:

    • 同时考虑了fact-related和linguistic-related的目标函数(为了同时引入两种类型的知识).
    • 在注入知识的过程中, 原始的PLM参数没有变化.
    • 可以支持持续学习, 不同的知识适配器的学习是解耦的(独立的), 后续再加入知识不会对已加入的知识产生影响.

  • 本文中的PLM使用RoBERTa.
    • 上方(a)图基于多任务学习向PLM引入知识的框架.
    • 下方(b)图通过知识适配器引入知识的框架.


  • 每个Adapter模型包含K个adapter层, 每个adapter层包含:

    • N个Transformer层.
    • 2个映射层.
    • 1个残差连接.
  • Adapter的内部结构如下图所示:


  • 与PLM的连接位置: 将adapter层连接到PLM中不同的transformer层上.

  • 与PLM的连接方式:

    • 当前adapter层的输入:
      • 1: transformer层输出的隐藏层
      • 2: 前一个adapter层的输出, 这两个表示进行concat
    • Adapter模型的输出:
      • 1: PLM最后一层的隐藏层输出
      • 2: 最后一个adapter层的输出, 进行concat作为最终的输出

  • 预训练-微调阶段:

    • 不同的Adapter在不同的预训练任务上分别进行训练.
    • 对于不同的下游任务, K-Adapter采用和RoBERTa相同的微调方式:
      • 只使用一种Adapter时, Adapter模型的最终输出作为task-specific层的输入.
      • 使用多种Adapter时, 将多个Adapter模型的输出进行concat作为task-specific层的输入.
  • 预训练设置:

    • 使用RoBERTa-Large模型, 335M参数.
    • adapter层中的transformer层数N = 2, hidden_size = 768, heads = 12.
    • adapter层中的两个映射层维度分别是1024和768.
    • adapter层连接在RoBERTa模型的{0, 11, 23}层上.
    • 不同的adapter层之间不共享参数.
    • Adapter模型参数量: 4200万.

  • Factual Adapter: Factual Knowledge主要来源于文本中实体之间的关系.

  • 数据集: T-REx, 将Wikipedia摘要和wikidata三元组进行了对齐, 数据规模达到550万条句子样本, 430种关系.

  • Factual Adapter的预训练任务: 关系分类, 给定context和一对实体, 对其间关系标签进行分类.

    • 预训练任务相关的模块: 引入了pooling层.
    • Factual Adapter的参数随机初始化.

  • Linguistic Adapter: Linguistic Knowledge主要来源于文本中词之间的依存关系.

  • 数据集: BookCorpus, 利用Standford Parser进行处理, 数据规模达到100万条句子样本.

  • Linguistic Adapter的预训练任务: 依存关系分类, 预测给定句子中每个token在依存分析结果中的father index.

    • 预训练任务相关的模块: 引入了pooling层
    • Linguistic Adapter的参数随机初始化.

  • 在开放实体识别任务上的优异表现:


  • 在关系分类任务上的优异表现:


  • 在语言模型预测MASK上的优异表现:



小节总结

  • 本小节学习了向预训练模型中进行知识融入的概念和基本方法.

  • 同时本篇论文也为未来的研究留下了改进点:

    • 目前这版的K-Adapter模型, 在融合多种知识的adapter产生表示上的方法比较heuristic.
    • RoBERTa自身已经具备很强的general语言知识(语言学知识), Linguistic Adapter对于下游任务的提升并不明显, 额外引入的知识和PLM自身的知识有复合的部分.
    • 两个训练K-Adapter的任务, 是否适用于学到事实型知识和语言学知识?
    • 如何针对不同的知识设计不同的学习/预训练任务?