知识图谱表示学习-TransE算法
(这是一篇小白入门笔记,请勿转载)
表示学习
表示学习是一个利用模型自动地学习数据的隐式特征的过程,以此来计算
得到对学习对象来说相比原始数据更好的表示形式,是一种数据预处理方法,帮助剔除数据中的无效信息,以便在后续训练任务中更有效地利用数据的有用特征。表示学习算法的结果是用低维实值稠密向量,即表示对象的分布式表示(distributed representation),将语义信息分布式存储于各维度中。
原始数据和经人工简单加工得到的数据表示在应用过程中通常有缺陷。
比如独热表示(one-hot representation)是一种最简单的数据表示。在这种表示下,每个表示对象的向量都相互独立,但一般事实上的对象之间并非完全独立,这显然有违事实情况。独热编码方式未能表示出不同对象之间可能存在的共同的隐式特征,同时也存在数据稀疏问题,会造成空间浪费。
表示学习利用各种算法对原始数据进行特征学习,在保留数据特征的前提
下对数据降维,使得数据表示更为精炼。表示学习的方法多样,可以是有监督的,例如监督神经网络, 监督型字典学习(dictionary Learning)、多层感知器(multiple perceptron, MLP),也可以是无监督的,例如自编码器(autoencoder, AE)、矩阵分解、独立分量分析(Independent Component Analysis, ICA)等,也可以二者相结合地进行多次训练。表示学习是深度学习领域中的重要内容,在各方向包括自然语言处理、计算机视觉、语音处理等应用相当广泛。
知识图谱表示学习
知识图谱表示学习,也可以说知识图嵌入(knowledge embedding learning),是对知识图谱中实体及关系的表示学习。通过有效计算实体、关系及其复杂的语义关联,提取实体和关系的特征,获取高质量的数据表示,以提高知识获取、融合和推理等后续任务的性能。
一个知识库或一张知识图谱被表示为 G = (E, R, S) ,E 为实体的集合,R 为
关系集合,S 为实体和关系的三元组集合。在 S 中每个形如 (h, r, t) 的三元组代表一条事实,其中h为头实体,t 为尾实体,r 为头实体和尾实体间的关系。通常三元组从 RDF 中提取,实体用 URL 表示。在表示学习的过程中,根据定义的得分函数训练模型,每一个事实对应的得分代表该事实的显著性。
TransE
TransE是基于平移假设的模型。
根据词向量空间中的平移不变现象,Bordes等人于 2013 年提出TransE
模型。用向量之间的加法运算表达实体和关系之间的逻辑。规定当三元
组为真,即 (h, r, t) 为真时,有 h + rt。在训练过程中不断调整向量 h, r,
t 使得 h+r 的结果与 t 尽可能相等。定义得分函数为 h + r 和 t 的距离,
f(h,r, t) = ||h + r − t||1/2,三元组越接近事实时,得分函数越低,反之如果
三元组与事实不符,则距离越远得分越高。在开始训练之前需要自行构
造负例做负采样,TransE 的负采样方式是简单地随机打乱三元组的实体
项或关系项之一,并过滤掉包含在给定事实三元组的项来生成负例,负
例用 (h’, r’, t’) 表示。基于此,TransE 的目标函数为:
γ 为一个大于 0 的超参数。
采用最大间隔法,在训练模型过程中用梯度下降法(SGD)最小化目标函数,从而得到最优化模型, 这里的优化是指使表示学习结果对知识的真实与否有较好的辨别能力。
TransE 是知识图谱表示学习经典基础的算法,计算复杂度较低,模型效
果尚可。它的局限在于只能处理实体之间一对一的关系,对较复杂的一
对多、多对一、多对多或者自映射关系无法达到预期建模效果。由于它
简单地通过向量加法和向量距离来建模,且将实体关系投影到单一空
间,同时也没有对实体和关系的类型属性、语义描述等信息进行利用,
无法建立复杂模型对多源信息进行进一步融合。同时模型也没有涉及到
关系之间或许存在的相互依赖性,将所有关系视为相互独立,所以它所
完成的对数据的潜在特征提取非常片面。后续很多工作改进了该算法。
TransX 系列的模型训练过程都是类似的,以 TransE 为例,步骤如下:
TransE 算法可以被分为三步。
- 根据输入的维度 dim 随机初始化实体矩阵和关系矩阵并归一化。
- 根据 minibatch 在输入的三元组中随机抽取正例之后,再根据这些正例
做负采样。 - 根据目标函数计算梯度,更新实体矩阵和关系矩阵中的值。
在第三步中需要求导计算出梯度的具体表达式,如下所示:
L1-norm 时 d = P |h + rt|,梯度为:对 h 求导:∂d∂h = P(sign(h + r − t)). 对 t 求导:∂∂dt = P(sign(h + rt)). 对 r 求导:∂d∂r = P(sign(h + rt)).
L2-norm 时,d = P(h+r−t)T (h+r−t),梯度为:对 h 求导:∂d∂h = 2 P(h+rt). 对 t 求导:∂∂dt = 2 P(h + rt). 对 r 求导:∂d∂t = 2 P(h + rt).
在循环第二第三步一定轮数之后,满足了一定停止条件时,得到了目标函数最优化的结果,即得到该算法下实体向量的嵌入式表示和关系表示。
相关代码就不展示了,github有各个语言的实现。以及个人感觉理解一个算法还是读论文最快最清楚。
以上内容是做毕设时的学习笔记,欢迎指正。