【综述专栏】关于知识图谱和语言模型的想法

2021-01-14 14:50:25 浏览数 (1)

在科学研究中,从方法论上来讲,都应“先见森林,再见树木”。当前,人工智能学术研究方兴未艾,技术迅猛发展,可谓万木争荣,日新月异。对于AI从业者来说,在广袤的知识森林中,系统梳理脉络,才能更好地把握趋势。为此,我们精选国内外优秀的综述文章,开辟“综述专栏”,敬请关注。

作者:知乎—秣陵冬

地址:https://www.zhihu.com/people/qin-hua-peng

知识图谱已经在推荐系统、搜索引擎等应用场景下展现了它强大的威力,而当我们已经有了知识图谱的时候,自然就会想,能不能让模型通过知识图谱,真正掌握所谓的“知识”呢?

这个想法相当的直观,知识图谱中的属性、关系等都是从大量语料中人为提炼出来的先验知识,且是我们希望机器能够学习到的先验知识(这也是知识图谱构建出来的目的)。那么,能不能将知识图谱作为语言模型共现的补充,利用图谱来使得模型能够直接学习到图谱中实体的关系,加速模型获取知识的过程呢?

长期以来,在这个方向上有非常多的尝试,word2vec之后,低维稠密向量特征成为了NLP输入特征的主流,知识图谱特征的获取也借着图嵌入的东风开始了新的探索,这其中出现了以TransE为开端的Trans系列。早期Trans系列算法更多应用于图谱补全、图谱关系推理等,后来也有直接作为文本的附加特征输入到NLP模型之中的探索。

2018年,BERT横空出世。BERT作为划时代的语言模型,奠定了近几年NLP打榜炼丹的框架,炼丹师们当然要尝试一下它和知识图谱的特征结合之后会是什么样的效果,在2019年一整年间,有大量的工作发表出来,有些也取得了不错的效果,而当然,大家也不仅仅满足于BERT TransE的各种结合,而是想要继续结合其他的方式,下面我们就来介绍一下知识图谱 NLP结合的工作,最后再说一下笔者对这个事情的看法。

01

在任务上直接增加表示

首先,现在已经有了BERT系列,最强的Contextual的文本表示方法,同时呢,在知识图谱上,以TransE为代表的各路表示也已经存在很长时间,二者一定程度上都是embedding向量,直接结合起来,香不香呢?

最典型的方法当然是把实体的向量和对应匹配到的token表示直接加起来,或者级联之后直接加一层融合起来,然后直接作为最终的表示,放到任务中去,笔者也做过相应的尝试,确实是有一定效果的,但是局限也一样的明显,其中最大的问题在于,在每一次任务之前,都必须对任务做一次链指,同时也强依赖于链指的效果,尤其当配套的KG中没有对应的收录的时候,问题则会更加严重。

KT-NET:用文本表示去选择实体表示

论文标题:Enhancing Pre-Trained Language Representations with Rich Knowledge for Machine Reading Comprehension

这个是百度发表的工作KT-NET,它主要的改动在于在BERT之上增加了一个Knowledge Integration层,其主要作用在于,首先从知识库中拿到某一个mention相关的实体向量,与对应位置的BERT表示做一个attention,选择对应的实体表示。

其动因在于:KB中的实体向量表示(经TransE训练)中已经嵌入了其相关的SPO信息,而文本中如果确实提到了这个实体,则文本中一定也会提到其相关实体,即命中SPO,同时,BERT中的token表示可以看做是一定程度上有了全句的信息,则mention和entitiy之间天然应该更加相关,这个过程实际上是一个链指过程,一定程度上会改善歧义问题。

同时,在实体的表示之外,还设置了一个哨兵向量,以应对mention所对应的实体实际上不在知识库中的情况。

文章里也给出了它在阅读理解任务上的效果,有一定的提升。

02

在预训练中融合

在上面一节,我们主要介绍了在具体的任务中,使用知识库的表示去直接与BERT的文本表示结合,以完成用已有知识去增强任务效果。但是,这种方法的限制则在于,每一个任务在做之前都需要预先对任务数据做一遍mention识别,以及去知识库中匹配特定的实体,比较麻烦。那么另一种想法自然而然就产生了:能否在预训练阶段直接将语言模型和知识表示结合起来,让语言模型得到的表示中直接带有知识信息呢?

THU-ERNIE

论文标题:ERNIE: Enhanced Language Representation with Informative Entities

这方面比较有代表性的工作当然就是清华大学的ERNIE了。

这个工作首先使用文本去计算文本的表示,同时通过实体链指,得到文本中对应的实体的TransE表示,在实体表示之间也走了一次transformer,以加强文本中共现的实体之间的关联强度。之后将每个实体的表示追加到文本表示中,每个mention的第一个token表示上,之后再将两种表示融合到一起,即得到了新的文本表示和实体表示。

同时,作者也追加了一个预训练任务,在预训练阶段,会随机mask掉一些实体-token alignments,要求模型去根据token预测实体。

对于特定的下游任务(entity-typing,关系分类),作者也提出了不同的修改输入的方式去增强任务,从结果上来看也有一些提升,但是模型比较复杂,且强依赖于entity-linking的效果,在开放领域上可能会存在较大的gap。

KnowBERT

论文标题:Knowledge Enhanced Contextual Word Representations

这个工作在知识融合上的主要思路和KT-NET类似,也是利用BERT的表示完成实体链指,根据实体的打分筛选实体表示。

首先,它会去计算每个候选实体mention的整个span的表示,而不是分别用每个token的表示去完成(这个span的计算方法是把span中的每个token向量组成一个矩阵,再用那个矩阵走一遍transformer,增强了span内token之间的关系,即加强了词内共现关联,最后得到的矩阵则为span矩阵),同时用那个span完成实体链指;之后,它会将所有的候选实体表示加权求和(打分即为权重),成为该mention的实体表示,再把这个表示加到span矩阵的每一个token向量中,得到知识加强的span表示。

最后再使用Multi-head Attention将span的表示和原来的隐层做一个融合,得到整个隐层的加强版表示。

作者表示,这种融合方法可以加到BERT的某一层表示中,最终得到的知识加强的表示则可以传入到BERT的下一层transformer中,作者也比较全面地从各个维度测试了这个模型的效果。

03

文本 知识的预训练

上一节的工作主要都是试图将已有的实体表示和文本表示用某种方式融合、对齐到一起。但是,Trans系列的表示,和原本文本的表示由于本不是一脉相承,二者之前就一定会存在一些gap:首先,在训练、融合的过程中,是否造成原本知识表示特征的遗忘?又或者,下游的应用中,输入的特征缺失了知识表示预训练所得到的那部分特征,会不会有什么影响?又例如,知识表示中,带有了实体间的关系(即SPO中的P),但是后面会提到,在文本中,P往往又是隐性表达的,那额外的那部分知识是否还真的有用?

所以,就有了另外的一种想法,能否在语言模型的预训练阶段,直接将额外的知识引入,从而得到知识增强的语言模型呢?

K-BERT

论文标题:K-BERT: Enabling Language Representation with Knowledge Graph

K-BERT应该是这个方面的代表作了,它的主要做法是:将文本中对应的实体直接到图谱中查询,从图谱中拉出来一棵子树,放到文本中,输入到transformer里面。这样由于transformer学习的本身就是token之间的关系,那么自然也就可以将图谱中的信息嵌入到文本表示中了。

当然,如果直接硬生生将图谱中的结构信息放到文本中的话,首先,会导致知识图谱的结构信息对于这一条文本的其他非mention的token来讲,可能并不是增益,而是噪音;其次,直接引入则必然会造成文本的不连贯,会导致预训练模型见不到正常的文本,对于下游任务来讲,是一个非常大的负担。由此,作者引入了可见性矩阵,用以保证引入的结构化信息在模型中仅仅对mention token可见,这样既保证了mention token学到了知识图谱中的信息,又避免了其他token看到额外的信息而引入噪音。

同时,为了避免引入的结构化信息破坏掉文本中的位置,作者引入了soft position embedding,它与可见性矩阵相结合,则完成了知识融合。

K-BERT可以说是开启了知识融合NLP的一种工作方式,后面有很多工作也使用这种方式试图去融合知识图谱的结构化信息到语言模型中,以增强模型的效果。

同样,这个工作也非常依赖于知识库的收录和链指的表现,到了开放域依旧是效果存疑。

04

一家之言

上面介绍了笔者这几年看到的知识图谱 NLP相关的工作,由于笔者本身也是做知识图谱相关工作的,上面提到的各种融合模式其实都尝试过,也对这个方向有了一些自己的看法。

知识图谱与NLP相结合,让模型学会“知识”的确是近几年的大热门方向,也会是未来几年的大热门方向,但是笔者认为,这二者结合可能是不适合的。首先是知识图谱本身的限制。

知识图谱的限制,主要是收录上的限制,可能对于特定的领域、特定的任务来讲,尤其是专业领域,文本稀疏,但知识体系完备,是能够准备一个收录齐全的图谱去配合相关的任务,去增强效果的,实际上在覆盖好的时候也能看到增益;但是到了开放域,图谱的限制则会变得非常明显。一方面是图谱收录知识的速度远远赶不上产生的速度,在图谱中建立任何一个实体、一条关系都是需要时间的,这方面的效率可能就已经跟不上产生的速度了;另一方面是,图谱为了保证其正确性、严谨性及稳定性,是需要有相对严格的准入门槛的,这又会很大程度上限制图谱的收录速度。

尤其由于收录准入上的限制,图谱中的SPO密度往往较低,其关系(也就是实体之间的边)多数是稳定关系,也就是说,自然语言中,仅仅是一次或几次事件中的实体共现,可能并不会体现在图谱的关系中,除非在多次事件中确立了一定的稳定关系(虽然也有事件相关的图谱,但其实仍旧存在知识图谱的两个收录问题)。如使用图谱知识作为较强的先验,则可能会限制自然语言本身能学到的表示,并且,如果文本足够丰富,且足够新,图谱中的实体间关系,可能模型早已从文本中经得到了。

我们可以看到,上面的工作往往也要确保了知识库对任务的覆盖足够的情况下,才得到了比较不错的效果提升。

其次,笔者认为,图谱的结构化知识不一定会对语言形成增益。

首先,图谱的显式知识表示与语言中的表述方式是有比较大的区别的,例如,图谱中是有显示的P(即关系)定义的,但是在语言中,首先在说话的时候不一定会直接显式说出某一个关系,或者会说出那个关系的某一些别名,例如北京->首都->中国(对应的文本:中国的首都是北京),而我们在日常的语言逻辑中所用到的关系更多是北京->中国,而会忽略掉“首都”这个关系,更复杂的例子:成都->省会->四川->所属->中国,语言中的逻辑则可能是成都->四川或成都->中国。我们看到,在语言中,关系多是隐式的,这和图谱中的显式结构却天生不和。

另外,图谱中的关系聚合也会是一个难题,如

,那么

之间应该是什么关系,即

应该是什么显然也是显式引入复杂子树所无法涵盖的问题。

那么如果在知识增强的过程中,隐掉P呢?则存在另外的问题,隐掉P,则难以控制从知识图谱中拉取额外知识的尺度,因为知识图谱中的关系并不一定是可传递的,也就是说,

不一定可以推断出

的关系。例如一个人,他的现任配偶的亲人和前任配偶的亲人可以根据这个人的本身形成一个图谱路径,但是这两个实体之间是不可能存在直接关系的;又或者如果一个人是美国人,信奉天主教,是无法泛化到所有美国人都信奉天主教的。

所以,笔者认为,知识图谱更加像是一个应用数据(搜索引擎或推荐系统),类似于知识库问答这种查表类的项目则更像是为知识图谱而设计,但总的来说,知识图谱不像是一个语言特征数据。

那么,怎么样将知识与NLP结合呢?

笔者认为,知识图谱在NLP中也不是一无是处的,例如,可以将知识图谱应用于预训练的任务之中,如果要让预训练模型记住事实知识,那么我们可以在预训练任务中将某一个实体替换成它的同类实体,然后让模型去预测原本的实体,去增强模型对事实的记忆和对同类实体的分辨(WKLM)。

又或者,可以利用知识图谱去筛选预训练的文本,比如从图谱构建的源数据构建半结构化的语料集合,仍旧是通过文本共现的方式将图谱上的关联关系嵌入到模型中,同时通过阈值、频次的控制,提升预训练文本的丰富度,将两个不同维度的问题,都统一放到文本之中,“从文本中来,到文本中去”。

当然,以上只是笔者基于近两年工作的个人看法,一家之言,不一定对,仅供交流。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。

0 人点赞