背景
阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队,在CCIR Cup2021全国信息检索挑战杯的《预训练模型知识量度量》比赛中基于自研的融入知识预训练模型取得第一名。本赛题主要考查预训练语言模型蕴含的知识量,涉及到九大领域,包括音乐、影视、军事、历史、化学、物理、生物、法律、医学。同时,赛题包含三种不同难度的题目,考查模型对于单跳事实,多跳事实和常识的掌握程度。可以看出,赛题针对预训练语言模型多领域多层次的知识掌握能力进行考验,难度较大。详情请见比赛页面:https://ccir2021.dlufl.edu.cn/ccirContest/index.html。为了解决上述问题,团队采用自研的知识预训练模型KGBERT和DKPLM为底座,采用多样化知识融入方法,形成强有力的蕴含丰富知识的预训练模型,在比赛数据上取得了非常好的效果。
值得一提的是,PAI团队很早就开始了基于知识的继续预训练的研究,致力于提升预训练模型的常识性和知识性,让预训练模型更加“聪明”。PAI团队已经在国际知名会议ACL和CIKM发表了知识预训练的工作,包括医疗知识预训练模型和异构知识注入模型HORNET,团队自研的DKPLM工作也被最近的人工智能顶会AAAI录用,论文详见:https://arxiv.org/abs/2112.01047。为了方便用户使用我们的知识预训练模型,PAI团队推出了知识预训练工具,将KGBERT模型和扩展模型DKPLM整理成工具,方便用户在下游任务里尝试融入知识的预训练模型,提升下游场景的效果。
为什么要做知识预训练?
作为NLP基础模型,预训练语言模型(包括BERT,RoBERTa,XLNET等)在各个下游NLU任务取得了前所未有的成绩,具有很强的通用性。然而,主流的预训练语言模型都是基于公开的文档,从非结构化文档中学习一般的语言知识,忽略了对大量知识信息的学习,特别是结构化的知识图谱信息。这将导致模型无法真正理解现实中的实体和它们之间的关系等一系列知识,难以拥有真正的NLU能力。比方说,GPT模型输出关于“太阳有两只眼睛”,“巴拉克奥巴马是一个Muslim”等论断(如下图)。此类知识的缺失,将会产生一些反事实的内容,也会大大减弱模型的小样本学习能力,领域知识的迁移能力,一般知识的归纳能力等等。因此,PAI团队很早就开始了知识预训练的技术积累,致力于提升预训练模型的常识性和知识性,避免出现反常识和反事实的模型结果。
知识预训练工具
PAI团队本次推出的知识预训练工具,除了CCF知识度量比赛获奖模型KGBERT之外,还有扩展模型DKPLM。模型总览介绍如下:
和通用的预训练工具不同,知识预训练工具包括如下亮点:
- 提供了高效的知识预训练模型KGBERT和DKPLM,方便用户直接使用预训练好的模型;其中提供了DKPLM在医疗领域的预训练模型,和KGBERT在税务和保险领域的预训练模型;
- 支持丰富的下游场景应用,包括文本分类,文本匹配,和序列标注。可以基于预训练模型做预测,也可以用新的场景数据finetune预训练模型,以取得更好的成果;
- 融合了PAI-EasyTransfer的分布式框架,可以更好的训练做加速。
KGBERT
KGBERT首先采用SPO(Subject-Property-Object)三元组的形式表达知识图谱中的海量知识。为了高效的利用这些知识,KGBERT构建了“Sentence-正向SPO-负向SPO”形式的语料,其中,正向SPO为与Sentence语义相关的表达正确知识的SPO,负向SPO为随机采样的、与Sentence语义无关的SPO。KGBERT的模型架构如下图所示:
在KGBERT中,我们设计了多粒度的语义理解预训练任务:
- Mention Detection:传统NER模型,增强模型对核心实体Mention的理解。
- SPO Masking:将大规模文本数据及其对应的SPO知识同时输入到预训练模型中进行预联合训练,促进结构化知识和无结构文本之间的信息共享,提升模型语义理解能力,加强属性识别能力。
- SPO Margin Magnification (SPOMM):设计基于对比学习的预训练任务,拉开Sentence相关SPO与无关SPO语义间隔,使其具备更强的语义区分能力。通过伯努利分布产生随机概率打乱相关和无关SPO的顺序。避免输入顺序固定,模型学到Hard Rule。
DKPLM
目前的KGBERT,如果要取得好的效果,需要在下游任务中显式地注入知识图谱中的知识,给下游业务场景的使用带来了负担。在KGBERT的基础上,PAI推出新版的模型DKPLM (Decomosable Knowledge-injected PLM),可以在预训练阶段注入知识,训练完的模型在下游场景里不需要注入知识直接finetune就可以取得很好的效果。在公开数据上效果显示,DKPLM比常用的KEPLM和KGBERT效果更好。模型使用方式如下图所示:
由此可见,传统的知识注入的预训练语言模型(例如KGBERT)需要在下游任务的时候做显式的知识注入,增加了使用成本。新版的知识注入模型DKPLM可以跟普通的预训练模型(例如BERT)同样使用,在下游任务里直接Finetune就可以取得不错的效果。值得一提的是,我们提出的DKPLM模型在医疗数据上相比其他预训练模型平均提升了3个点。DKPLM的架构如下所示:
由上图可见,DKPLM基于传统的PLM,提出了三个技术创新点来做知识注入:
- 面向长尾实体的知识注入:最近很多研究结果已经显示,对于常见的三元组实体,预训练语言模型通过大规模无监督语料的训练,已经能够将相应的知识三元组建模出来,知识注入会带来冗余信息。因此,DKPLM采取面向长尾实体的知识注入机制,利用实体频率、实体语义重要性和目标实体周围邻居数量检测长尾实体,作为知识注入的目标。
- 实体知识注入:为了将实体的知识注入到预训练模型中,同时尽可能不要引入其他额外参数,保持backbone与预训练模型对齐。我们引入了伪知识表示注入方法。具体地,如果训练语句中的目标实体是头实体,那么将其对应的预训练输入的表示替换成尾实体减去关系的表示。如果是头实体,就进行相反的操作。
- 基于关系知识的知识解码验证:最后,将注入的三元组知识显示地解码出来,我们将这一任务作为DKPLM的预训练任务之一,加入预训练流程中。
实验效果评测
除了CCF知识度量比赛,我们也在三个公开医学数据集上验证了自研模型的效果,实验结果如下:
数据集/模型 |
DKPLM |
KGBERT |
BERT |
CMedQANER (NER) |
F1=84.79 |
F1=81.84 |
F1=81.43 |
CHIP20 (RE) |
F1=77.12 |
F1=74.43 |
F1=73.05 |
CMedMRC (MRC) |
EM=67.18 F1=85.33 |
EM=66.49 F1=84.92 |
EM=66.15 F1=84.08 |
其中,所有模型均为Base量级(参数量约为1亿)。
我们得出如下结论:1)DKPLM和KGBERT效果都超过了BERT,可见融入知识的预训练模型比原始的BERT预训练效果更好;2)在三个数据上,DKPLM都取得了最好的效果,可以证明DKPLM提出的知识注入方式是有效的; 3) 不仅如此,不像传统的KEPLM,DKPLM在下游任务finetune的时候不需要用额外的KG或者knowledge encoder,可以很方便的部署到线上。
同时,我们也在公开的知识探测任务(LAMA),下游知识任务(TACRED,Open Entity)上比较了DKPLM与传统的知识预训练模型(KEPLM)、通用预训练模型(PLM),实验结果如下:
由此可见,与其他基线的结果相比,我们可以得出以下结论。 1)在知识探测任务LAMA任务上:DKPLM模型在四个数据集上取得了最先进的结果(平均+1.88%),说明DKPLM能够高效的注入知识。2)此外,在下游知识任务中,注入外部知识的模型相比于其他基线结果都会有一定程度的提升。特别是在TACRED任务上,相比最好的模型在三个指标Precision,Recall和F1都有很大的提升。3)整体来看,DKPLM可以有效地存储和理解来自KG的事实知识,相比基线模型在多个任务上都有很好的效果。DKPLM工作已经被AI顶级会议AAAI收录,详见论文:https://arxiv.org/pdf/2112.01047.pdf
模型调用方式
用户可以通过PAI-Designer的界面来调用预训练的模型,可以直接做预测,也可以基于预训练模型做训练和评估。PAI-Designer文档详见https://help.aliyun.com/document_detail/114368.html。使用方式如下。
模型训练和评估
用户可以直接采用PAI-Designer的组件来直接调用知识预训练的模型,这里的组件都在 “自然语言处理”这个目录下,包括:
- 文本分类训练(MaxCompute)
- 文本分类训练(DLC)
- 文本匹配训练
- 序列标注训练
- BERT文本向量化
组件的页面如下所示:
调用模型的时候,只需要修改pretrain_model_name_or_path参数即可。支持的模型如下:
- pai-dkplm-medical-base-zh(DKPLM医疗预训练模型)
- alibaba-kgbert-tax-base-zh(KGBERT税务领域预训练模型)
- alibaba-kgbert-insurance-base-zh(KGBERT保险领域预训练模型)
模型预测
模型预测可以复用通用NLP预测组件,通过组件连接,可以基于训练好的模型做预测。
训练好的模型可以通过PAI-EAS做serving服务 ,文档详见:https://help.aliyun.com/document_detail/113696.html
开发工具EasyTransfer
知识预训练工具是基于EasyTransfer开发的,感兴趣的用户可以关注一下EasyTransfer代码库。https://github.com/alibaba/EasyTransfer
用户也可以通过如下二维码关注EasyTransfer代码库。