导读
知识图谱(Knowledge Graph)的概念⾸次出现2012年,由Google提出,它作为⼀种⼤规模语义⽹络, 准确地描述了实体以及实体之间的关系。知识图谱最早应⽤于搜索引擎,⽤于准备返回⽤户所需的知识。随着预训练语⾔模型的不断发展,将知识图谱中的知识三元组融⼊预训练模型,对提升模型的效果有重要的作⽤。经典的知识注⼊算法直接将知识图谱中实体的词嵌⼊向量注⼊预训练模型的词嵌⼊向量中;然⽽,知识图谱中实体的词嵌⼊向量和预训练模型的词嵌⼊向量的向量空间不⼀致,⽽且容易引起知识噪⾳(Knowledge Noise)的问题。K-BERT算法提出利⽤Visible Matrix在BERT模型中引⼊外部知识,具有较好的效果。 因此,我们在EasyNLP这⼀算法框架中集成了K-BERT算法,使⽤户在具有知识图谱的情况下,取得更好的模型Finetune效果。
EasyNLP(https://github.com/alibaba/EasyNLP)是阿⾥云机器学习PAI 团队基于 PyTorch 开发的易⽤且丰富的中⽂NLP算法框架,⽀持常⽤的中⽂预训练模型和⼤模型落地技术,并且提供了从训练到部署的⼀站式 NLP 开发体验。EasyNLP 提供了简洁的接⼝供⽤户开发 NLP 模型,包括NLP应⽤ AppZoo 和预训练 ModelZoo,同时提供技术帮助⽤户⾼效的落地超⼤预训练模型到业务。由于跨模态理解需求的不断增加,EasyNLP也⽀持各种跨模态模型,特别是中⽂领域的跨模态模型,推向开源社区,希望能够服务更多的 NLP 和多模态算法开发者和研 究者,也希望和社区⼀起推动 NLP /多模态技术的发展和模型落地。
本⽂简要介绍K-BERT的技术解读,以及如何在EasyNLP框架中使⽤K-BERT模型。
K-BERT模型详解
BERT等预训练语言模型从大规模语料库中捕获文本语言表示,但缺乏领域特定的知识。而领域专家在阅读领域文本时,会利用相关知识进行推理。为了实现这一功能,K-BERT提出了面向知识图谱的知识增强语言模型,将三元组作为领域知识注入到句子中。然而,过多的知识融入会导致知识噪音,使句子偏离其正确的含义。为了克服知识噪音, K-BERT引入了Soft-position和Visibel Matrix来限制知识的影响。由于K-BERT能够从预训练的BERT中加载模型参数,因此通过配备KG,可以很容易地将领域知识注入到模型中,而不需要对模型进行预训练。K-BERT的模型架构和知识注入的应用示例如下所示:
特别地,在模型的输入层,K-BERT表征层通过位置索引将语句树转换为句子,构造三种表征方式:Token表征、Soft-position表征和Segment表征。其中Soft-position表征作为位置嵌入,为重排的序列提供句子结构信息。此外,通过Visible Matrix来覆盖不应该看到的Token,避免了知识噪声问题。如下图所示,以Beijing为例,给定知识三元组(Beijing,capital