我们希望预训练模型在需要特定知识或常识的任务中表现更佳。比如,在机器阅读理解中,当给定一句《哈利波特》小说中的句子:“Harry Potter points his wand at Lord Voldemort.”时,模型需要理解哈利波特和伏地魔之间的时空关系,这就需要模型有一定的《哈利波特》先验知识,而不只是将它们视为简单的称谓(指代)。
在文本生成中,例如使用“河、鱼、网、捉”这几个词造句,我们希望生成的句子至少要符合正常的逻辑关系,比如“人在河里用网捉鱼”,而不是“鱼在捉网”等不合理的句子。这需要模型具备一定的常识。
尽管通过大量的文本预训练,这些常识可能已经隐式地存储在模型中,但这些知识并不足以让预训练模型处理特定任务。因此,我们需要对模型进行知识的注入和增强。另一方面,通过增强模型的知识,预训练模型可以更像是领域专家或生活中的幽默大师。比如,在与对话机器人交谈时,你说:“翻译翻译,什么叫惊喜。”你更期望它将“惊喜”翻译成英文,还是希望它调侃一下,玩一些幽默梗呢?
当将知识图谱信息注入预训练模型时,通常会面临三个主要问题:
从知识图谱与预训练模型的增强方式来看,有通过线性变化、注意力机制等在知识实体与关系的嵌入式表达上进行知识融合的,也有直接使用实体描述,设计特定的预训练模型输入。在面向的任务上,除去GLUE等进行通用自然语言理解测试的benchmark之外,还包括近期热门的知识增强的开放领域问答、常识文本生成等等。
由于相关工作过于庞杂,本文从模型的角度入手,按照知识与预训练模型融合的方式进行分类,仅仅选取具有代表性的工作进行重点分析。粗略划分,知识融合的方法可简单分成三类:embedding层面上的融合,token层面的融合,以及知识图谱与预训练模型的共同学习。
隐式融合是比较直接的embedding融合方法,该类方法基于一些KGE(Knowledge Graph Embedding,使用最多的是TransE)算法获得知识图谱中的实体与关系的embedding,并为这些embedding修改预训练模型结构,以便将二者进行结合。
根据将embedding与预训练模型结合的方式,可以粗略分为基于projection的结合方法和基于attention的结合方法。
当然,由于神经网络的可学习性,有时候模型结构对使用效果的影响并不是唯一的。用知识去增强预训练模型,同模型的输入、训练的任务都息息相关。面向特定的下游任务,不同的融合方式甚至也会产生不同的效果。
尽管embedding的方式比较直观,且属于典型的深度学习风格,但该类方法仍然存在以下几类问题:
知识的融合效果受knowledge embedding学习限制;
简单的变换未必能将知识空间与文本空间对齐;
该结构需要对预训练模型重新进行预训练,即使通用的KG+PTM预训练是可行的,针对特定领域的预训练或微调同样存在困难。
与之前所述的基于embedding的结合相比,另一种思路更为直接:既然知识图谱本身就是借助自然语言表达的,能不能直接把实体和关系经过某些变换后,以token的形式输入到预训练模型中?这样就不需要再去为每个实体学习embedding,更不需要考虑两种特征空间的聚合。
一些相关的工作都是在这种思路的基础上进行的,这类工作大概可以分成两类:
(1)训练时的知识增强;
(2)推理时的知识增强;
除去上述两部分的工作之外,还有一类工作进行了额外的尝试。该类工作并不满足于单纯地将知识图谱增强于预训练模型,而是将知识图谱表示学习和面向知识的自然语言理解一起处理,并希望通过这种方式可以在这两个领域内都得到模型的提升。