写点什么

为 Bert 注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert

  • 2022 年 8 月 18 日
    湖南
  • 本文字数:3528 字

    阅读完需:约 12 分钟

为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert

前言

我们来聊聊如何在预训练模型中融入知识。Tutorial 分别针对 NLU 和 NLG 方向对一些经典方案进行了分类汇总,感兴趣的可以去细看下。这一章我们只针对 NLU 领域 3 个基于实体链接的知识增强方案 Baidu-ERNIE,THU-ERNIE 和 K-Bert 来聊下具体实现~

知识增强

Knowledge is any external information absent from the input but helpful for generating the output

Tutorial 里一句话点题,知识就是不直接包含在当前文本表达中的,但是对文本理解起到帮助作用的补充信息,大体可以分成

  • 通用领域:例如中国的首都是北京

  • 特殊领域:例如医疗,金融,工业等场景中的领域知识,

  • 常识:例如狗有 4 条腿,鸡不会飞,猪不能上树

常规预训练预语料也是包含部分知识的,不过受限于知识出现的频率,以及非结构化的知识表征,预训练任务的设计等等因素,知识信息往往等不到充分的训练,因此 BERT 不可避免会给出一些不符合知识但是符合语言表达的预测结果,于是有了尝试在预训练阶段融入结构化知识信息的各种尝试

LM 中融入知识的一般分成 3 个步骤:定位知识(knowledge grounding),知识表征(knowledge representation),融入知识(knowledge fusion),这么说就像把大象放进冰箱一样 easy,不过实现起来细节问题颇多,例如定位知识时的消歧问题,知识表征和文本表征的不一致问题,知识融入时如何不干扰原始的上下文语义等等,下面我们来看下 3 种不同的增强方案

Baidu-ERNIE

paper: ERNIE: Enhanced Representation through Knowledge IntegratiionGithub:https://github.com/PaddlePaddle/ERNIETake Away: 通过 knowledge masking 学到隐含的实体以及短语内部一致信息


ERNIE 的主要创新是在预训练阶段引入了 knowledge masking,这里的 knowledge 包括短语和实体两种。所以 ERINE 定位知识的方式是通过分词定位短语,以及通过实体匹配定位到实体。对比 BERT 对独立 token 进行掩码,ERNIE 分阶段采用 token,phrase 和 entity 这三种不同粒度的 span 进行掩码。实体和短语内部的字符,因为被同时掩码,所以会被相同的上下文信息进行梯度更新,使得 token 之间学到内部关联信息,以及更清晰的实体边界信息,在 NER 等局部信息抽取任务上更有优势。不过模型本身并没有引入更丰富的实体关联等知识信息~

THU-ERNIE

paper:ERNIE: Enhanced Language Representation with Informative Entitiesgithub:https://github.com/thunlp/ERNIETake Away: 引入 KG 预训练 Embedding,通过 FusionLayer 进行知识融入

论起名的重要性,这两篇 ERNIE 其实是完全不同的方向。THU-ERNIE 更完整的给出了在预训练中融入知识的方案。THU-ERNIE 由 T-Encoder 和 K-Encoder 构成,其中 T-Encoder 就是常规的 Transformer Block 用来学习基于上下文的文本表征,而 K-Encoder 负责知识表征和融入,同时 ERNIE 设计了新的预训练目标 dAE 来辅助知识信息融入。以’Bob Dylan wrote Blowin in the Wind in 1962‘为例,分别看下 THU-ERNIE 如何定位,表征和融入知识


knowledge Encoder

ERNIE 通过 TAGME 从句子中定位到实体知{e1, ...en},并使用 TransE 预训练的实体 embedding 作为知识表征。在知识融入上,首先原始文本输入会过 T-Encoder 得到考虑上下文的文本表征,然后会通过 K-Encoder 中的多个 Aggregator 层进行知识融合,这里的知识融合包括知识表征和文本表征的对齐以及双方的信息交互。每个 Aggregator 层由两部分构成

  1. 多头注意:文本表征 W 和实体表征 E 分别各自做多头注意力,文本表征是上下文交互,实体表征是学习实体关联


  1. Fusion:多头输出的文本表征和实体表征进行拼接[w,e],过 feed forward 来进行信息融合,这里的激活函数选用了 gelu。对于非实体的文本因为没有相关联的实体所以等同于拼接了全 0 向量。融合表征 h 分别做两次非线性映射得到文本和实体的表征,作为下一层 aggregator 的输入。


预训练任务 dAE


作者在 MLM 和 NSP 的预训练任务的基础上,加入了实体还原 dAE 任务,来帮助模型融合知识相关信息。同样是 AutoEncoder 任务,实体还原和 MLM 任务主要有两个差异

  • 掩码差异:dAE 采用 5%随机实体掩码,15%同时对 token 和实体掩码,85%保持不变的掩码策略

  • 还原差异:和 token 还原相比,实体还原采用了负采样的逻辑,没有从全部 KG 实体中进行预测,而是只从当前句子的所有实体中去选择 MASK 位置的实体。

整体上 dAE 的任务设计偏简单,首先是掩码部分和 BERT 只保留 10%的原始 token 相比,dAE85%的概率都保留原始 token;同时还原任务只使用当前句子的实体作为候选,候选集较小。至于为什么把任务调整的更加简单,作者只简单说是因为 token-entity 对齐会存在一定 error,不过我对这部分的任务设计还是有些疑惑~有了解的同学求解答

ERNIE 的预训练过程使用了 google BERT 的参数来初始化 T-Encoder,TransE 的实体 Embedding 在训练过程中是 Freeze 的,K-Encoder 的参数会随机初始化。效果上在 Entity Typing 和 Relation Classification 上都有较明显的效果提升



在常规的 GLUE Benchmark 上,针对样本量较大的任务 ERNIE 和 BERT 持平,但是对样本较小的任务上存在波动有好有坏,不过波动本身并不小。。。所以感觉不太能说明实体信息引入完全没有影响到原始上下文信息


整体上 ERNIE 的效果提升还是显著的,几个能想到的讨论方向有

  • 预训练任务的优化

  • 特殊处理引入实体信息后可能对上下文语义产生的影响

  • 模型本身因为额外的 K-Encoder 的加入,模型复杂度较高,想要落地难度较大

K-BERT

paper: ERNIE: Enhanced Language Representation with Informative Entitiesgitub:https://github.com/autoliuweijie/K-BERTTake Away: 通过 soft MASK 和 soft PE 在引入知识表征的同时不影响原有文本语义

K_BERT 通过 soft-Mask 和 soft-position,在不影响原始语义的情况下,把知识图谱的 3 元组信息直接融入文本表征。以’CLS Tim Cook is visiting Beijing Now‘ 为例,分别看下 K-bert 如何定位,表征和融入知识

knowledge Layer

K-bert 在输入层之前加入知识层,负责知识的定位和表征。K-Bert 通过字符匹配的方式先定位到句子中的实体,然后去图谱中请求实体相关的全部 3 元组。句子中的 Tim Cook 和 Beijing 实体,分别能请求到如下三元组:[Tim Cook, CEO, Apple], [Beijing, capital, China],[Beijing, is_a , City]。这里请求深度为 1,也就是 Beijing 请求得到的 China 后,不会用 China 去进一步检索。所有请求到的三元组会构建如下的句子树


定位到知识后,在知识表征上 K-Bert 没有引入图谱相关的预训练知识表征,而是选择把三元组信息和原始 token 一同输入模型,使用相同的 token embedding 来进行语义表征。所以需要对以上的句子树进行展开,展开的顺序是按照原始句子遍历,如果碰到分支就把分支的 token 加入,然后继续遍历原始句子,展开后的句子如下。输入和 BERT 相同是 token+position+segment embedding


Seeing Layer & position Encoding

不过以上的知识表征方式存在一个问题,就是对句子树进行展开时,人为引入了噪音,主要包括 3 个方面

  1. 因为知识的插入,人为改变了原始句子中 token 间的距离

  2. 插入知识后的句子并不符合常规的文本表达

  3. 引入的知识和其他知识以及其他与文本交互时会引入噪音,例如 Apple 和 China 不应该存在显示的交互

针对这些问题,作者提出了 Soft—PE 和 Soft-MASK 的实现。核心就是让原始 token 的 PE 保持不变,原始 token 之间的交互不变,每个 token 只和自己的知识进行交互。

Soft-PE 就是保持原始句子的位置编码不变,对于插入的知识会从实体的位置开始向后顺延,于是会存在重复的 PE,例如 is 在原始句子中的位置 id 是 3,CEO 对应的实体是 TimCook 位置是 2,顺延后位置 id 也是 3,他们的位置编码就是相同的,这样就解决了以上的问题 1

Soft-Mask 就是通过掩码对知识部分进行隔离,CEO Apple 只和 Tim Cook 进行交互,不和其他 token 进行交互,保证知识的引入只是为当前实体提供补充信息,不会干扰整体上下文语义,也不会和其他 token 交互引入噪音,这样就解决了以上的问题 2 和 3

作者也通过消融实验证明了,如果不使用 Soft-MASK 和 Soft-PE, k-bert 的效果会显著低于原始 BERT。


训练

K-Bert 只在下游任务微调中使用了 KG,核心问题在于如果在预训练中加入 KG,因为知识表征中使用了和原始文本相同的词向量,所以会导致实体三元组中两个实体的文本表征变得变得高度相似,导致语义信息损失。所以 K-Bert 只在微调中引入了实体三元组信息。

效果上,医疗领域 KG 对医疗 NER 的效果提升最明显,通用知识 KG 对与金融和法律的 NER 有部分提升,对推理类任务有微小提升,情感分类任务因为和知识关系不大所以效果有限~


K-BERT 只在微调中引入 KG 的好处是迁移到不同领域的成本较低,几个能想到的讨论点有

  • 微调中引入知识,微调的样本量和拟合目标一定程度限制了 KG 的融合效果

  • Soft-MASK 矩阵的构造成本较高,batch 中的每个句子都需要独立构造掩码矩阵

  • 复用文本 token 来表征知识信息,虽然解决了知识表征和文本表征不一致的问题,但是只引入实体三元组信息,会丢失掉 KG 中更丰富的关联信息

用户头像

不定期更新Java开发工具及Java面试干货技巧 2021.12.12 加入

Java后端工程师,十年大厂经验。具有扎实的Java、JEE基础知识。熟悉Spring、SpringMVC、Struts MyBatisHibernate等JEE常用框架。

评论

发布
暂无评论
为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert_Java_了不起的程序猿_InfoQ写作社区