知识图谱的表⽰学习⽅法
传统的知识图谱表⽰⽅法是采⽤OWL、RDF等本体语⾔进⾏描述;随着深度学习的发展与应⽤,我们期望采⽤⼀种更为简单的⽅式表⽰,那就是【向量】,采⽤向量形式可以⽅便我们进⾏之后的各种⼯作,⽐如:推理,所以,我们现在的⽬标就是把每条简单的三元组< subject,relation, object > 编码为⼀个低维分布式向量。
【表⽰学习】 :表学习旨在将研究对象的语义信息表⽰为稠密低维实体向量,知识表⽰学习主要是⾯对知识图谱中的试题和关系进⾏表⽰学习,使⽤建模⽅法将实体和关系在低维稠密向量空间中,然后进⾏计算和推理,即--简单说:将三元组表⽰成向量的这个过程就称为表⽰学习。
知识表⽰的⼏个代模型:翻译模型、距离模型、单层神经⽹络模型、能量模型、双线性模型、张量神经⽹络模型、矩阵分解模型。
transE模型属于翻译模型:将每个三元组实例(head,relation,tail)中的关系relation看做是从实体head到实体tail的翻译,通过不断地调整h,r和t(head,relation,tail的向量)使(h+r)尽可能的与t相等,即h+r=t.
TransE是基于实体与关系的分布式向量,受Word2vec启发,利⽤了词向量的平移不变现象。例如:C(king)-C(queen)~~C(man)-C(woman) 其中,C(W)就是word2vec学习到的词向量表⽰。
TransE定义了⼀个距离函数d(h+r,t),它⽤来衡量h+r和t之间的距离,在实际应⽤中可以使⽤L1或L2范数,在模型的训练过程中,transE采⽤最⼤间隔⽅法,最⼩化⽬标函数,⽬标函数如下:
其中,S是知识库中的三元组即训练集,S'是负采样的三元组,通过替换h或t所得,是⼈为随机⽣成的,y是取值⼤于0的间隔距离参数,是⼀个超参数,[x]+表⽰正值函数,即x>0时;[x]+=x;当x<=0时,[x]+=0。算法模型⽐较简单,梯度更新只需要计算距离d(h+r,t)和d(h'+r,t’)。这个过程和训练⼩狗⼀样,它做对了,就给⾻头吃,做错了,就打两下。模型训练过程:
(1)⾸先,确定训练集,超参数y,学习率λ
(2)初始化关系向量与实体向量,对于每⼀个向量的每⼀个维度在[-6/√k,-6/√k]内随机取⼀个值,k为低维向量的维数,对所有的向量初始化之后要进⾏归⼀化。
(3)进⼊循环:采⽤minibatch,⼀批⼀批的训练会加快训练速度,对于每批数据进⾏负采样(将训练集中的三元组某⼀实体随机替换掉),T_batch初始为⼀个空列表,然后向其添加由元组对(原三元组,打碎的三元组)组成的列表:
拿到T_batch后进⾏训练,采⽤梯度下降进⾏调参。
TransE算法(Translating Embedding)