知识图谱相关概念
文章来源: 知识图谱嵌入(KGE)主流模型简介 - 知乎 电影知识图谱问答(三)|Apache Jena知识存储及SPARQL知识检索 - 知乎 电影知识图谱问答(四)| 问句理解及答案推理 - 知乎
知识图谱介绍
知识图谱是由大量的事实三元组组成,如(英国, 首都, 伦敦)便是真实世界中的知识,可用 \((h, r, t )\) 进行表示,其中 \(h, t\) 表示头尾实体,\(r\) 表示关系。但我们知道,真实世界中知识是无限增长的,而知识图谱却不能包含真实世界中的所有知识,因此需在知识库中进行知识补全,或者称为链接预测。
链接预测一个可行的方法便是将实体和关系进行 Embedding 表示,类似于 Word2Vec,将字或词表示成 Embedding 信息。然后根据实体和关系的 Embedding 信息进行预测,比如利用头实体和关系去预测尾实体,或者利用尾实体和关系去预测头实体。当然,Embedding 信息也可应用到其他领域,比如知识问答、文本信息增强、语义检索等。
知识图谱嵌入 (Knowledge Graph Embedding, KGE) 学习知识库中的实体和关系的 Embedding 表示,是语义检索、知识问答、推荐等众多应⽤的基础研究。
知识图谱嵌入(KGE)
KGE 是将知识库中的实体和关系进行 Embedding 表示,模型规划为: - 翻译 (TransE, TransH, TransR, etc) - 双线性 (RESCAL, DisMult, ComplEx, etc) - 双曲几何 (Poincare, MuRE, etc) - 神经网络 (ConvE, CapsE, etc) - 旋转 (RotatE, QuatE, DihEdral, etc)
KGE 主要关注方面: - 关系的多样性,如 1-1, 1-N, N-1, N-N 关系,对称/反对称、翻转、组合等信息。如翻译、旋转模型。 - 实体的层次性,实体之间的上下位关系。如双曲空间模型。 - 实体和关系的深层次交互信息。如双线性和神经网络模型。
翻译模型
翻译模型是把关系当作头实体和尾实体之间的翻译,包括TransE, TransH, TransD等模型。
TransE
TransE 认为 \(h+r≈t\) ,即 r 是头尾实体之间的翻译关系,优化目标是最小化评分函数。TransE 能够解决 1-1 类别的关系,但不能够很好的解决 1-N, N-1, N-N 关系。比如(流浪地球,演员,吴京)、(流浪地球,演员,吴孟达)两个三元组,当头实体 \(h\) 和关系 \(r\) 相同时,TransE 认为所有尾实体 \(t\) 具有相同的 Embedding 信息,但实际情况并非如此。
TransH
针对 TransE 存在的问题,TransH 把头实体 h 和尾实体 t 投影到关系所在的超平面中。经过投影后,尽管头实体 h 和关系 r 相同,尾实体 t 的 Embedding 信息也会不同,TransH 能够一定程度上解决多对多的关系。
TransR
TransR 认为 TransE 和 TransH 均是把实体和关系放在同一空间中进行考虑,但实体可能具有多个不同方面的属性,不同的关系也关注着实体的不同属性,因此把实体和关系放在同一空间中考虑是不准确的。因此,TransR 构建实体空间和关系空间。
其他
除了TransE, TransH, TransR以外,还有其他Trans模型,考虑实体和关系的概率性、稀疏性等问题,此处不再赘述。但总体上,Trans模型均是把关系当作头尾实体之间的翻译,解决知识库中所存在的多对多问题。
双线性模型
双线性模型计算实体和关系在向量空间中潜在语义的可信度,包括RESCAL、DisMult、ComplEx等模型。
RESCAL
RESCAL 把关系利用满秩矩阵表示,其实体和关系之间全是矩阵运算,因此实体和关系的信息可以进行深层次交互,非常具有表现力。但同时,RESCAL 容易过拟合,并且随着关系矩阵维度的增加,复杂度会很高,很难应用到大规模知识图谱。
DisMult
针对 RESCAL 存在的问题,DisMult 放松对关系矩阵的约束,把关系矩阵 M_r 利用对角矩阵表示。但 DisMult 过分简化了 RESCAL 模型,导致只能够解决知识库中存在的对称关系,不能够解决知识图谱中其他类型的关系。
ComplEx
针对 DisMult 存在的问题,ComplEx 把 DisMult 扩展到复数空间表示。ComplEx 对 DisMult 扩展后,能够同时解决对称和非对称关系。ComplEx 首次在 KGE 中引入复数方法,还有其他模型利用复数空间解决问题,并且可解决除对称、非对称外更复杂的对称类型。
其他
除 RESCAL, DisMult, ComplEx 外,还有其他双线性模型,考虑实体和关系的潜在语义信息,获取实体和关系的深层次交互信息。
神经网络模型
多数翻译模型和双线性模型是16年之前模型,最近几年随着神经网络的兴起,也有利用神经网络解决KGE问题的模型,包括ConvE、CapsE等。
ConvE
ConvE 首先把头实体和关系转换为二维向量,接下来利用卷积层和全连接层获取交互信息,然后与矩阵 W 和尾实体进行计算,判断当前三元组的可信度。ConvE 模型上没什么新颖之处,只不过是比较早的利用卷积神经网络来对 KGE 进行建模。
CapsE
CapsE 采用胶囊神经网络模型,首先把头实体、关系、尾实体表示成 \(k×3\) 的矩阵,接下来通过卷积层获取其特征信息,然后对特征信息进行压缩,并进行动态路由,最后计算三元组的可信度。CapsE 只是胶囊网络在 KGE 问题上的简单应用,也没有特别新颖之处。
KG-BERT
KG-BERT 模型利用 BERT 进行 fine-tuning,获取头实体、关系、尾实体信息,然后取 CLS 信息进行二分类,判断当前三元组可信度。
KGE 除了利用卷积神经网络、胶囊网络、BERT 模型外,也有模型利用深度神经网络、图注意力网络等方法。
普通的神经网络模型不是特别适合解决KGE问题,不能够对知识图谱中实体的层次性、关系的多样性问题建模,仅仅只是获取实体和关系的深层次交互信息,没有可解释性。但可以多尝试图神经网络在KGE上的应用,比较符合图谱结构。
双曲几何模型
上面多次提到实体间具有层次性,比如爷爷--父亲--儿子关系,类似于树状结构。此时,可以利用双曲空间性质,在双曲空间中对实体的层次性建模,包括Poincare, MuRP等模型。
Poincare
Poincare采用双曲几何中的庞加莱圆盘进行建模,其空间曲率为负。因为庞加莱圆盘性质,能够对实体间的层次性建模,学习图谱间的层次性信息。但Poincare模型没有考虑到关系性质,而且不能够在庞加莱圆盘中进行复杂操作。另外,双曲空间需要黎曼优化方法,建议自行去了解相关数学知识,包括黎曼曲率张量、黎曼流形、黎曼优化等概念。
MuRP
MuRP 相对于 Poincare 而言更加完善,MuRP 同时在双曲空间和欧式空间中建模,结合关系向量,能够处理图谱中所存在的多类型关系。MuRP 首先将实体向量定义在庞加莱圆盘中,接下来将实体映射到欧式空间,并和关系进行操作,然后再将实体映射回庞加莱圆盘中进行距离计算,并用黎曼方法优化。
旋转模型
旋转模型把关系当作头实体和尾实体之间的旋转,包括RotatE、QuatE、DihEdral等模型。
RotatE
RotatE认为知识库中存在多种类型的关系,如symmetry(e.g., marriage), antisymmetry(e.g., filiation), inversion(e.g., hypernym and hyponym), composition(e.g., my mother's husband is my father)关系,但以往的TransE, RESCAL, ConvE等模型均不能够解决上述关系。因此RotatE提出在复数空间中建模,把关系当作头尾实体之间的旋转,RotatE从理论上证明能够解决对称/反对称、翻转、组合关系。另外,RotatE认为在训练过程中,很多三元组明显是错误的,因此RotatE提出自对抗的负采样方法,让错误样本更加明显,负采样和损失函数公式如下所示。
QuatE
RotatE 是在二维复平面空间中进行操作,那么很自然的可以推广到三维复平面空间中。三维情况下旋转可以利用欧拉角和四元数等方法,但欧拉角存在死锁问题,因此 QuatE 采用四元数进行旋转,四元数可表示为 \(Q=a+bi+cj+dk\)。继续推广,可以利用 8 元数进行旋转,但此时复杂度升高,结果并没有提升太多。再往上推广,有 16 元数,但 16 元数的乘法不满足交换律和结合律,因此不再考虑。
DihEdral
除了 RotatE 和 QuatE 利用复数空间解决对称/反对称、翻转、组合关系,DihEdral 利用群论知识来解决上述关系。DihEdral 采用二面体群进行旋转,二面体群具有两种性质,即旋转和对称操作。DihEdral 将多个二面体群组成对角矩阵,能够从理论上解决对称/反对称、翻转、组合(Abelian, Non-Abelian)关系。
知识图谱数据库
传统关系数据库(如 MySQL、MongoDB 等)不能体现知识间的层次关系,更不能进行知识推理和知识检索。
常用的图数据库:Neo4j 和 Apache Jena。
Neo4j
Neo4j 是高性能、NoSQL 类型的图数据库,存储过程中将数据表示为节点,数据之间的关系表示为边,节点和边的类型可以是字符串、数字等。Neo4j 能够存储百亿节点,形成巨大的图网络结构,即大规模知识图谱。Neo4j 能够非常方便的将数据可视化,看出数据之间的关联关系。
Apache Jena
Apache Jena 是开源的 Java 语义网框架,用于链接数据和构建语义网,可存储 RDF、RDFS 类型数据。
Apache Jena 提供 TDB、Rule Reasoner、Fuseki 组件,其中 TDB 是 Jena 用于存储 RDF 类型数据的组件,属于存储层面的技术;Rule Reasoner 可进行简单规则推理,支持用户进行自定义推理规则;Fuseki 是 Jena 提供的 SPARQL 服务器,支持 SPARQL 语言进行检索,可在单机和服务器端高效运行。
因为知识图谱问答需定义很多推理规则,对可视化没有太多要求,所以我们选择 Apache Jena 来存储 RDF 数据。
接下来是基于 Jena 的实战。需要了解如何进行知识存储和知识检索,具体流程包括:将 RDF 类型数据转换成 TDB 类型数据、配置及启动 Apache Fuseki、利用 SPARQL 从 Apache Jena 中进行知识检索。
RDF2TDB
Apache Jena 需要 tdb 类型的数据,所以需要将已得到的 RDF 类型数据转换成 tdb 类型数据,转换方法可通过 Apache Jena 提供的工具进行实现。
Fuseki 配置
转换成 TDB 类型数据完成之后,如果想要在网页端进行查看和检索,还需要配置 Apache Fuseki。
SPARQL 知识检索
数据存储成功之后,便能够通过 SPARQL 检索语言从 Apache Jena 数据库之中进行检索答案。比如问句 “流浪地球的主演有哪些?” ,转换成如下 SPARQL 查询语句需要经过以下步骤。
问句理解
针对用户提问的自然语言问句,首先需要理解其中的深层次语义信息,即获取问句实体和目标属性信息。
以问句 “流浪地球的导演是谁?” 为例: - 实体:流浪地球 - 目标属性:导演 所采用的方法分别是实体识别和属性链接。
实体识别
从问句中提取出实体可以采用以下两种方法: - 构建诸如 BiLSTM-CRF 等深度学习模型,然后利用训练好的深度学习模型预测出问句实体。这种方法能够预测得到训练数据中未出现过的电影名称,预测准确率保持在 90%以上。缺点是需要构建训练数据,从头开始训练深度学习模型,耗费时间长; - 构建实体词表,从问句中提取词表中所包含的实体。词表方法构建快捷方便,缺点是只能够发现词表中包含的电影实体名称,无法发现新的电影实体。
比较推荐的方法是词表+BiLSTM-CRF 深度学习模型,但此处为了构建方便,只采用词表方法。词表构建方法是从爬取的数据之中,选出其中的电影和书籍名称、人物名称加入到词表之中。另外可加上深度学习预测模型提高效果。
属性链接
属性链接可以采用以下两种方法: - 构建诸如 CNN 等多分类深度学习模型,然后利用训练好的深度学习模型预测问句的目标属性。 - 构建关键词集合,把问句中所包含的关键词当作问句的目标属性。
同样,此处问了方便,直接采用关键词方法。可自主加上CNN等多分类预测模型。
需要注意的是,同一目标属性可以表达成多种含义。比如流浪地球的评分是多少?、也可以表达成流浪地球在豆瓣有多少分数?,那么此时我们就需要同时考虑评分和分数关键词。即:rating = (W ('评分') | W ('分数'))
答案推理
基于规则的答案推理
获取问句的实体和目标属性之后,便可根据规则模版将传统自然语言问句转换得到SPARQL查询语句,进而从 Apache Jena 数据库之中推理得到问题答案。构建规则模型可利用 Python Refo 库进行构建。
将问句转换成 SPARQL 查询语句之后,便可从 Apache Jena 之中检索得到问句答案,为提高推理的准确率,还可以使用自定义推理规则进行补充。
基于表示学习的答案推理
通过问句理解模块,能够得到问句的实体和目标属性信息。然后结合基于模版的答案推理方法,能够将问句转换成 SPARQL 查询语句,进而在 Apache Jena 数据库之中推理得到问题答案。但基于规则的答案推理仅能够处理已定义的规则,不能覆盖问句的所有情况。
因为不能定义所有规则,所以我们可以采用基于表示学习的答案推理方法,比如知识图谱嵌入中经典的 Trans 系列方法。
这里以 TransE 为例进行解释,知识图谱中三元组向量化后可以表示为 <h, r, t>,其中头实体为 h、关系为 r、尾实体为 t。TransE 假设实体和关系之间存在,即头实体 h 加上关系 r 的向量信息近似等于尾实体,那么我们便能够通过头实体和关系预测得到尾实体。也就是说,能够通过问句中实体和目标属性信息,预测得到问句答案。
gStore
gStore 是北大团队经过十余年时间研发的原生 RDF 图数据库系统,图数据库当前主流有 RDF 和属性图两种数据模型,具体哪种没有高低之分。但是无论 RDF 还是 RDF 图数据库的查询语言 SPARQL 都是 W3C 定义的事实标准,在进行使用时有规可循。
gStore所有底层代码都是北大团队自主编写的,当前一共有十几万行代码,这样在自主可控方面是非常有保障的。而且对于鲲鹏/飞腾/海光/兆芯等国产CPU和统信UOS/麒麟国产操作系统都进行适配。本人实际使用时其查询性能相比于国际主流的图数据库也是有明显的性能优势的,这也是来源于学术界的一个优势所在,gStore单机版存储容量为50亿三元组,同时支持分布式部署来解决单机性能瓶颈,但是分布式版本不开源。而且已经在很多行业也进行了落地(可见官网案例)。

