NLP任务增强:通过引入外部知识来提供额外信息

0、前言

NLP任务中,常见的做法是根据「当前输入」进行建模,进而设计出我们的模型,通常用到的信息只有「当前局部的信息」

这和人类最大的区别就是我们在理解语言的时候,我们会用到我们之前学习到的知识,比如说到“自然语言处理”,我们就可以联想到“文本匹配”、“阅读理解”、“BERT”等等,而我们会利用这些外部知识来加强自己的理解,如果没有用额外的知识,比如接触到我们一个不熟悉的领域,我们也很难完全理解语义。而目前NLP常见做法只利用了输入信息,没用利用外部知识,理解层次偏低,举个例子,文本匹配任务中:

Query Title
「新冠肺炎」可以通过完好的皮肤传播吗 「新型肺炎」会通过皮肤传播吗
「IPhone手机」多少钱 「IPhone手机壳」多少钱

一般的文本匹配模型很容易误判上面Query-title为匹配,因为上述Query-title文本字面组成非常相似,比如「新冠肺炎」「新型肺炎」「IPhone手机」「IPhone手机壳」的embedding可能非常相似,导致模型计算出来的相似度很高,其中一个原因就是因为模型没有先验知识,并不知道「IPhone手机」「IPhone手机壳」是两个不同的东西,如果能在模型中引入外部知识,让模型提前了解「IPhone手机」「IPhone手机壳」的概念,那么就提高的模型的理解层次,也能提高任务效果。

现在知识图谱,图卷积神经网络也是非常热门,知识图谱作为一个常用的外部知识库,有很多工作都在研究如何将其引入各种NLP任务进行知识增强,最近也是看了几篇论文,在这里做一下总结。

1、当推荐系统遇上知识图谱

「(RippleNet)」 RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems. Proceedings of the 27th ACM International Conference on Information and Knowledge Management..[PDF][1]

这篇论文在推荐系统的排序任务上引入了知识图谱的信息进行任务增强,主要是从下面三个方面考虑:

  • 知识图谱可以引入各个Item之间的语义相关性,有助于找到潜在的联系,从而提高推荐的准确性
  • 知识图谱还可以通过类型关系,来合理扩展用户的兴趣,增加推荐项目的多样性
  • 知识图谱还可以连接用户的历史记录和推荐记录,从而解决推荐系统冷启动问题,并且可解释性好

从上面可以看出,通过知识图谱我们可以推理出用户看过电影的导演、或者类型,并且可以进一步得到同导演或者同类型的电影,从而对用户进行推荐。

模型结构

论文中提出的RippleNet结构如上图所示,之所以叫Ripple是因为信息在知识图谱上的传播就像雨滴落在水面形成的Ripple,每次都会往外传播一层,并且越外部的信息作用越小。整个模型输入为用户 和物品 ,输出为用户点击该物品的概率。

RippleNet运算过程如下:

  • 选取用户点击历史为「知识图谱中的种子」,作为知识图谱的初始三元组集合Ripple Set,这一步主要是利用用户历史信息来进行任务增强
  • 每一步(Hop)会先根据Item embedding 和Ripple Set(其实就是知识图谱中的三元组集合)来计算得到这一部的隐层表示输出 ,计算方法类似于attention(加权平均),通过这种方式相当于在知识图谱上进行了知识推理,比如从用户历史The Green Mile我们推理到了导演为Steven Spielberg,进而推理出同样导演的电影Raiders of the Lost Ark,这样的话我们就利用到了外部知识,通过三元组之间的关系来增强任务
  • 最后就是信息的融合,将每步推理得到的隐层输出表示 相加,作为用户最终 embedding ,然后与物品 embedding 计算得到最终的点击概率(比如说余弦相似度)

引入知识方法

从上面的分析可以看出,RippleNet中引入外部知识的做法主要「通过用户历史信息建立Ripple Set,也就是对应到知识图谱中的节点,并且在每一步都会传播到相邻节点并计算隐层表示输出」 ,计算方法类似于attention(其中query为上一层的输出,key和value为当前的Ripple Set中的实体embedding ),具体的计算公式有兴趣的话可以看论文。

2、当文本匹配遇上知识图谱

Entity-Duet Neural Ranking: Understanding the Role of Knowledge Graph Semantics in Neural Information Retrieval. ACL. [PDF][2]

从前言的例子可以看出,文本匹配中如果我们能够引入实体的外部信息,就能够很好的帮助模型实现更高层次的语义理解,而这篇论文正是将CN-DBpedia构建的知识图谱作为外部知识库,为模型引入额外的实体特征从而进行任务增强。

模型结构

图中的Enriched-entity Embedding即是引入的外部实体信息,通过原始的word embedding与引入的Enriched-entity Embedding矩阵进行交互从而计算出最后的score。Enriched-entity Embedding则由Entity EmbeddingDescription Embedding以及Type Embedding信息融合得到,计算方法如下:

  • 「Entity Embedding」:,从预训练好的知识图谱embedding获取(比如TransE)
  • 「Description Embedding」:从实体的描述信息中获取embedding,首先用CNN对实体描述进行n-gram卷积:

之后使用max-pool获得 Description Embedding:

  • 「Type Embedding」:每个实体可以是多种种类,论文中采用了attention的方式来获得Type Embedding,首先是通过type embedding 层获得各个种类embedding

之后通过attention计算得到最后的Type Embedding

attention score 计算方式如下:

  • 最后Enriched-entity Embedding则由Entity EmbeddingDescription Embedding以及Type Embedding进行信息融合计算得到:

引入知识方法

Entity-Duet Neural Ranking Model 引入外部知识的方式是将文本匹配任务中的输入Query和Document实体在知识图谱中的embedding作为额外的监督信息添加到模型中,不仅用到了实体自身embedding,还用到了实体描述(description)的embedding信息,以及实体种类(Type)的embedding信息,这样的话模型可以理解实体的具体含义,而不是停留在字面上的理解,比如「IPhone手机」「IPhone手机壳」这样的概念,通过引入知识图谱信息就可以很好解决。

3、当预训练模型遇上知识图谱

ERNIE: Enhanced Language Representation with Informative Entities. ArXiv, abs/1905.07129.[PDF][3]

最后要介绍的是在BERT预训练中引入外部知识库,ERNIE这篇论文中使用维基百科语料库进行预训练,并且使用语料中的 Anchor Link 来获取实体,通过 Wikidata 训练出的 TransE向量作为实体的特征,输入BERT模型中预训练作为额外的监督,通过这种方式可以大大提高在 Entity Typing 和 Relation Classification 任务上的效果。

模型结构

ERNIE中修改了BERT中的Encoder为Knowledge-Encoder,从图上可以看出,输入除了原始的句子tokens之外,还有实体tokens,简单说下每个K-Encoder的计算步骤:

  • 首先是input token 和 entity token自己的multi-head self-attentions(就是标准的MH-ATTs)

  • 之后进行aggregate操作,将input tokens与entity tokens进行信息融合,得到这一层的embedding输入,也是下一层的embedding输入

引入知识方法

ERNIE中修改的BERT原始Encoder结构,额外加入了entity embedding输入,并且使用了TransE作为初始输入,通过这种方式,就可以在预训练中引入大量的外部知识,提高下游任务的效果。实验表明在Entity Typing和Relation Classification上取的了很好的效果。

总结

在NLP任务中引入外部知识是一个很好的任务增强方式,带着先验知识进行推理,也正符合人类思考的习惯,从上面总结可以看出,目前利用外部知识库的主要方式都是引入知识图谱中的实体信息。更具体一点,引入实体各种embedding 信息作为模型的额外输入,我在想知识图谱作为一个有结构的图,是不是可以用上知识库中的结构信息呢?我下面说下自己的几点思考:

  • 将文字表达转换为图结构,然后在知识图谱中进行匹配,这样的话可以更好地利用图的结构信息,比如推理路径,也可以使模型更具有可解释性
  • 引入GNN,在图上进行推理,提高语义理解的层次

目前只是将自己学到的引入外部知识的方法做了个小结,应该已经有很多研究尝试将各种知识库引入NLP任务来提供额外信息,以后有机会再详细总结一下啦~

(0)

相关推荐