英文题目:DKPLM: Decomposable Knowledge-enhanced Pre-trained Language Model for Natural Language Understanding 中文题目:DKPLM:可分解的利用知识增强的预训练语言模型 论文地址:https://arxiv.org/abs/2112.01047 领域:自然语言处理, 知识图谱 发表时间:2021.12 作者:Taolin Zhang等,华东师范大学,阿里团队 出处:AAAI-2022 代码和数据:https://github.com/alibaba/EasyNLP(集成于EasyNLP) 阅读时间:2022.09.11
读后感
自然语言和知识图结合的一种新尝试,几种优化方法比较有意思。尤其是他对长尾信息的分析,很有启发性:即使在无监督学习的情况下,也要尽量使用重要的数据训练模型。另外,还给出了具体方法,比如实体出现频率高于均值,则忽略它…
介绍
加入知识增强的自然语言模型简称KEPLM,它将知识图中的三元组注入NLP模型,以提升模型对语言的理解能力。在模型使用时需要知识搜索和编码,运算量大。
本文提出可分解的知识增强名为DKPLM,具体方法是使用长尾实体作为知识注入的目标,还在训练时设计了重建知识三元组的知识解码任务。它只在预测训练时注入了知识,在精调模型和预测时用法与BERT一致,相对节省资源。如图-1所示:
在预训练时使用以下主要技术:
- 基于知识的长尾实体探测
- 利用知识图中三元组做成伪实体替换长尾实体训练模型,模型无需增加参数。
- 利用三元组中的关系,通过对实体及其谓词来解码对应实体中的每个token。
实验证明对于zero_shot任务,以及预测速度都有明显提升。
方法
整体架构如图-2所示:
长尾实体检测
通过对wiki数据分析可以看到实体出现的频率服从幂律分布,如图-3所示:
只有很少的实体高频出现,多数实体出现次数少,这使用自然语言模型难以从上下文中有效学习。之前论文提到注入高频三元组不总是有利于对下游任务,反而更容易注入负面知识。因此更好的方法是注入长尾实体,同时还需要考虑实体在知识图中和句中的重要性。具体考虑以下三点(图-2第二层右侧):
- 实体频率:实体在预训练数据集中出现的频率,记作:Freq(e)。
- 语义重要性:实体在句中的重要性,记作:SI(e)。计算SI可以使用语义相似度,通过去掉句中的实体e后的编码hrep与原句编码ho比较,识别该实体的重要性。
- 知识连接:实体在知识图中多跳邻居的个数,记作:KC(e)。如下式所示,其中Rmax,Rmin是预定义的阈值,|N|表示邻居个数,Hop指跳数。
最终基于知识的长尾系数KLT计算如下:
其I{x}为布尔性的指示函数,当实体出现频率高于均值时,则忽略该实体。 (我理解是:在训练集中出现次数太多的去掉,在知识图中邻居太多的去掉,在句子里有它没它都一样的去掉)
伪Token嵌入的注入
为了提升模型对长尾实体的理解,将知识图中的关系代入模型训练。如果预测训练数据中出现了头实体eh,则用它相关的关系谓词和尾实体替换它的嵌入:
同理,如果出现尾实体,则用谓词加头实体来表示。 以替换头实体为例,对关系和尾实体编码:
其中F(e)是预训练模型PLM的输出,fsp是自注意力池化,LN是标准化层,W是模型参数。 由于尾实体和关系谓词通常都比较短,生成的表示可能是无效的,因此还加入了对头实体的描述文本记作e_h^des,使用预训练模型对其编码,最终的伪实体表示如下:
这里的⊕表示串联。通过上述方法,促进模型学习知识图中的三元组。
相关知识解码
为了更确定地让模型学习注入信息,又调整了解码层逻辑。在最后一层,利用自注意力池化获取跨实体的实体掩码表示。
用头实体本身通过上述方式生成表示h_eho,再加入hr,目标是解码尾实体,用h_di表示预测尾实体的第i个token。
上式中δ是缩放因子,h_d^0等于h_eh_o作为初始的启发。
由于词表较大,使用采样的SoftMax来对比预测值与实际值。损差函数计算方法如下:
这里yi是实际token,yn是采样的负token,Q是负采样函数,N为负例个数。
训练目标包含两项任务:相关的知识解码和BERT自带掩码模型任务,最终损失函数计算如下:
实验
模型底层框架基于RoBERTa,使用英文Wikipedia作训练数据,知识图包含3085345个实体,822种关系。由于实体太多,使用PEPR算法选择负实体,并将N设为20,λ1最终取值为0.5。主实验结果如下:
从表-4可以看到,DKPLM速度明显优于其它知识注入模型:
从图-5的消融实验可以看到,三种优化方法各自的贡献:
|