一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于任意维度超复数嵌入的知识图谱表示方法

2022-10-13 04:47:42 来源:中国专利 TAG:


1.本发明涉及一种知识图谱表示方法,具体涉及一种基于任意维度超复数嵌入的知识图谱表示方法。


背景技术:

2.知识图谱是三元组的集合,其中每个三元组都包含头实体h、关系r和尾实体t。现有的知识图谱数据集包括freebase、yago和wordnet等。知识图谱应用广泛,如知识问答、信息检索、推荐系统和自然语言处理。知识图谱的研究正吸引越来越多的工业界的注意力。知识图谱通常是不完整的,所以知识图谱的一个基本问题是预测缺失的链接。为了促进下游任务的知识应用,许多研究者尝试以可计算的方式对这些数据进行建模,多种知识图谱表示方法应运而生。
3.1.知识图谱表示方法
4.一般知识图谱表示方法是根据观察到的知识事实来建模和推断知识图谱中的连通模式。例如,有些关系是对称的(比如婚姻),有些关系是反对称的(比如亲子关系);有些关系是相反的(比如上下位词);有些关系是由其他关系组合的(比如,我母亲的丈夫是我的父亲)。从观察到的知识图谱数据集中找到建模并推断这些模式的方法,来预测缺失。许多现有方法一直在尝试对上述一种或几种关系模式进行隐式或显式建模。例如,经典的基于距离的嵌入模型transe,旨在模拟相反和组合关系;dismult模型对头实体、关系和尾实体之间的三方交互进行建模,旨在对对称关系进行建模;pairre模型,能够同时编码复杂关系和多个关系模式,使用两个向量表示关系,将这些向量将对应的头实体和尾实体投影到欧几里德空间,实现投影向量之间的距离最小化。
5.2.超复数方法
6.现有知识图谱嵌入方法中前人曾经尝试过复数嵌入complex和四元数嵌入quate的方法。complex模型使用复数嵌入,可以处理多种二元关系,包括对称和反对称关系,使用hermitian积;quate模型使用四元数嵌入,具有三个虚部的超复数嵌入,使用hamilton积来捕捉潜在的相互依赖关系,同时四元数能够在四维空间中表达旋转,比复数空间旋转具有更多的自由度。
7.最近的研究表明,在超复数空间中,表征学习取得了不错的成绩,如上文所述的复数嵌入complex和四元数嵌入quate,然而超复数空间只存在于非常少的预定义维度(4d、8d和16d),限制了利用超复数乘法的模型的灵活性。任意维度的超复数嵌入采用将超复数乘法参数化的方法,允许模型从数据中学习乘法规则,不管这些规则是否预定义。对任意n维超复数空间的操作,与完全连接层对应的方法相比,使用了1/n的可学习参数并提供了更大的体系结构灵活性,此技术曾应用于自然语言处理、机器翻译、文本风格转换等实际应用,证明了超复数嵌入方法的架构灵活性和有效性。


技术实现要素:

8.本发明公开了一种基于任意维度超复数嵌入的知识图谱表示方法,该方法主要特征在于将原始的知识图谱嵌入方法中的四元数嵌入部分替换成了超复数嵌入的线性层。具体包括以下步骤:1、知识图谱数据预处理,将传统知识图谱根据模型需求预处理为结构化数据;2、利用深度学习框架pytorch构造初步嵌入,并构建新的线性层,即超复数嵌入线性层,在图谱上学习实体和关系的向量表示;3、用知识图谱校验集进行校验,调整到最佳网络参数;4、对知识图谱测试集进行测试,统计结果。本发明通过改进一种已有的四元数知识图谱嵌入方法quate,引入超复数策略,降低了内存占用,减少了参数,同时保持了优异地嵌入结果。
9.为了实现该嵌入方法,需要在linux环境下部署和配置python3.7和pytorch1.4.0运行环境。
10.一种基于任意维度超复数嵌入的知识图谱表示方法,该方案具体实现过程如下:步骤1具体如下:首先对不同领域的知识图谱进行预处理为五个文件,处理后的文件包括知识图谱三元组训练集,知识图谱三元组验证集,知识图谱三元组测试集,实体id集合,关系id集合。
11.步骤2具体如下:首先将步骤1得到的知识图谱中的实体和关系嵌入为初始向量,为接下来的训练做准备,构建超复数嵌入(hypercomplex embedding)线性层,即hypere层,由输入得到n元数的初始嵌入结果i,n为设定元数,i的维度可以被n整除
12.i=[i1,i2,i3,

,in]#(1)
[0013]
i1表示n元数嵌入的实部部分,ii,i∈[2,3,

,n]表示n元数嵌入的虚部部分,把这n个部分按照给定轴相接构成向量i,作为hypere层的输入,hypere层采用与标准平移模型相同的形式:y=hypere(x)=ux b,关键思想是通过kronecker积的和,将u构造为参数矩阵,其中x为输入的待训练的嵌入向量,b为偏置,得到y为实体或关系的嵌入向量;
[0014]
计算正负样本的得分,并通过得分计算出每一批数据的损失来进行迭代优化。
[0015]
步骤1中所述的预处理操作,操作具体为:将整个知识图谱三元组数据集按照8:1:1随机分割为训练集、验证集和测试集,并输出整个知识图谱的实体对应id和关系对应id。
[0016]
步骤2中所述的构建超复数线性层hypere操作,操作具体为:
[0017]
获得知识图谱中的实体嵌入和关系嵌入,对于任意三元组有头实体h,关系r和尾实体t,接下来由hypere层将实体和关系嵌入转换为高阶嵌入,y=hypere(x)=ux b,通过kronecker积的方式根据不同的元数构造不同的学习矩阵u,kronecker积将向量外积推广到矩阵,设定x∈r
m*n
,y∈r
p*q
,kronecker积为:
[0018][0019]
其中x
ij
=(x)
i,j
,设n为超复数嵌入hypere的维度,k为用户定义的超参数,表示实体和关系嵌入的维度,上文所述的u矩阵由n个kronecker积得到:
[0020]
[0021]
其中ci∈r
n*n
表示贡献矩阵,表示分量权重矩阵,同时k也表示线性变换的输入输出大小,贡献矩阵ci选择为满秩矩阵,其行列是线性独立的,所有元素均属于{-1,0,1},设
[0022][0023]
对角线上为1和-1交替出现,将每个贡献矩阵ci初始化为矩阵与循环置换矩阵pn的幂之间的乘积,循环置换矩阵pn的作用为右移的列,
[0024][0025]
其中当j-1=1且i=n,j=1时,(pn)
i,j
=1,此外所有项全部为0;除此之外,并非只有这一种初始化方法,也可以采用随机初始化,贡献矩阵ci设定为可学习。当超复数线性层的元数设定为二元和四元时,即n=2或4时,并未像上文一样构建贡献矩阵,而是和复数和四元数代数一样构建初始化矩阵。
[0026]
当n=2时,设定
[0027][0028]
当n=4时,设定
[0029][0030][0031]
6、根据权利要求1所述的一种基于任意维度超复数嵌入的知识图谱表示方法,其特征在于,步骤2中所述的评分函数,具体操作为:
[0032]
设y1为头实体h和关系r相加得到:
[0033]
y1=h r#(6)
[0034]
且y2为尾实体t:
[0035]
y2=t#(7)
[0036]
将y1,y2通过hypere层得到:
[0037]y′1=hypere(y1),y
′2=hypere(y2)#(8)
[0038]
将通过距离函数得到的分数定义为:
[0039]dr
(h,t)=||y

1-y
′2||=||hypere(h r)-hypere(t)||#(9)。
[0040]
步骤2中所述的损失函数,具体操作为:
[0041]
负样本对于学习知识图嵌入和单词嵌入都非常有效,使用类似于负采样损失的损失函数来优化基于距离的模型,即自对抗负采样方法,根据当前的嵌入模型对负三元组进行采样,设:
[0042][0043]
其中α为采样参数,(hi,ri,ti)为正三元组,(h
′i,r,t
′i)为负三元组。
[0044]
自对抗训练的最终采样损失为:
[0045][0046]
其中γ是固定边界,σ是sigmoid函数。
[0047]
相对于现有技术,本发明的优点如下:本发明提出的一个基于超复数的知识图谱嵌入模型,在模型中引入任意元数嵌入这一机制,实现了超复数嵌入层hypere层,其中固有的包含了权重共享机制,指定代数本身的乘法规则是从训练期间的数据推断出来的。通过调整超复数的元数n,可以根据训练数据的不同得到更优的模型,同时增加超复数的元数可以得到内存效率更高的模型和性能优势,超复数嵌入元数设定合适时可以取得较传统方法更优秀的结果,较固定元数超复数嵌入具有更大的体系结构灵活性。
附图说明
[0048]
图1为本发明的整体流程图;
[0049]
图2为hypere层示意图;
[0050]
图3为传统方法与发明方法的流程对比图。
具体实施方式
[0051]
下面对本发明技术方案结合附图和实施例进行详细说明。
[0052]
本发明中所提出的基于超复数嵌入的知识图谱表示技术包括训练部分和测试部分,如图1所示,该网络需要先进行训练,训练完毕后将嵌入的结果保存,再将嵌入的结果用来对测试集进行测试。
[0053]
实施例1:一种基于任意维度超复数嵌入的知识图谱表示方法,该方案具体实现过程如下:步骤1具体如下:首先对不同领域的知识图谱进行预处理为五个文件,处理后的文件包括知识图谱三元组训练集,知识图谱三元组验证集,知识图谱三元组测试集,实体id集合,关系id集合。
[0054]
步骤2具体如下:首先将步骤1得到的知识图谱中的实体和关系嵌入为初始向量,为接下来的训练做准备,构建超复数嵌入(hypercomplex embedding)线性层,即hypere层,由输入得到n元数的初始嵌入结果i,n为设定元数,i的维度可以被n整除
[0055]
i=[i1,i2,i3,

,in]#(1)
[0056]
i1表示n元数嵌入的实部部分,ii,i∈[2,3,

,n]表示n元数嵌入的虚部部分,把这n个部分按照给定轴相接构成向量i,作为hypere层的输入,hypere层采用与标准平移模型相同的形式:y=hypere(x)=ux b,关键思想是通过kronecker积的和,将u构造为参数矩阵,其中x为输入的待训练的嵌入向量,b为偏置,得到y为实体或关系的嵌入向量;
[0057]
计算正负样本的得分,并通过得分计算出每一批数据的损失来进行迭代优化。
[0058]
步骤1中所述的预处理操作,操作具体为:将整个知识图谱三元组数据集按照8∶1:
1随机分割为训练集、验证集和测试集,并输出整个知识图谱的实体对应id和关系对应id。
[0059]
步骤2中所述的构建超复数线性层hypere操作,操作具体为:
[0060]
获得知识图谱中的实体嵌入和关系嵌入,对于任意三元组有头实体h,关系r和尾实体t,接下来由hypere层将实体和关系嵌入转换为高阶嵌入,y=hypere(x)=ux b,通过kronecker积的方式根据不同的元数构造不同的学习矩阵u,kronecker积将向量外积推广到矩阵,设定x∈r
m*n
,y∈r
p*q
,kronecker积为:
[0061][0062]
其中x
ij
=(x)
i,j
,设n为超复数嵌入hypere的维度,k为用户定义的超参数,表示实体和关系嵌入的维度,上文所述的u矩阵由n个kronecker积得到:
[0063][0064]
其中ci∈r
n*n
表示贡献矩阵,表示分量权重矩阵,同时k也表示线性变换的输入输出大小,贡献矩阵ci选择为满秩矩阵,其行列是线性独立的,所有元素均属于{-1,0,1},设
[0065][0066]
对角线上为1和-1交替出现,将每个贡献矩阵ci初始化为矩阵与循环置换矩阵pn的幂之间的乘积,循环置换矩阵pn的作用为右移的列,
[0067][0068]
其中当j-1=1且i=n,j=1时,(pn)
i,j
=1,此外所有项全部为0;除此之外,并非只有这一种初始化方法,也可以采用随机初始化,贡献矩阵ci设定为可学习。当超复数线性层的元数设定为二元和四元时,即n=2或4时,并未像上文一样构建贡献矩阵,而是和复数和四元数代数一样构建初始化矩阵。
[0069]
当n=2时,设定
[0070][0071]
当n=4时,设定
[0072][0073][0074]
6、根据权利要求1所述的一种基于任意维度超复数嵌入的知识图谱表示方法,其
特征在于,步骤2中所述的评分函数,具体操作为:
[0075]
设y1为头实体h和关系r相加得到:
[0076]
y1=h r#(6)
[0077]
且y2为尾实体t:
[0078]
y2=t#(7)
[0079]
将y1,y2通过hypere层得到:
[0080]y′1=hypere(y1),y
′2=hypere(y2)#(8)
[0081]
将通过距离函数得到的分数定义为:
[0082]dr
(h,t)=||y

1-y
′2||=||hypere(h r)-hypere(t)||#(9)。
[0083]
步骤2中所述的损失函数,具体操作为:
[0084]
负样本对于学习知识图嵌入和单词嵌入都非常有效,使用类似于负采样损失的损失函数来优化基于距离的模型,即自对抗负采样方法,根据当前的嵌入模型对负三元组进行采样,设:
[0085][0086]
其中α为采样参数,(hi,ri,ti)为正三元组,(h
′i,r,t
′i)为负三元组。
[0087]
自对抗训练的最终采样损失为:
[0088][0089]
其中γ是固定边界,σ是sigmoid函数。
[0090]
实施例2:
[0091]
下面以fb15k-237知识图谱数据集为例,对其进行知识图谱嵌入表示来详细说明本发明的步骤。
[0092]
实验条件:现选取一台计算机进行网络训练,该计算机的配置有intel(r)处理器(3.2ghz)和124gb随机存取存储器(ram),ubuntu 14.0464位操作系统,nvidia gtx 3090(24gb)显卡;软件环境为深度学习框架pytorch1.4.0。
[0093]
实验对象:训练数据集来自fb15k-237,在网络训练时所用的验证集和测试数据集同样来自该数据集,三者经过严格区分。fb15k-237是知识图谱freebase的子集,15k表示其中知识库中有15k个主题词,237表示共有237种关系。
[0094]
实验步骤:
[0095]
步骤1:预处理操作。将整个fb15k-237数据集按照一定比例分割为训练集、验证集和测试集,并得到整个知识图谱的实体对应id和关系对应id,预处理后结果如表1所示:
[0096]
表1 fb 15k-237数据集预处理后结果
[0097]
统计属性\集合训练集验证集测试集实体个数1378176528171三元组总数2721151753520466关系的种类数237223224
[0098]
步骤2:构造初步嵌入。利用知识图谱训练集生成272115组正三元组,对于每一个
正三元组改变其正确的头实体或尾实体,得到256个负三元组,也就是错误的头实体或尾实体,同样验证集和测试集分别分为17535组三元组和20466组三元组。在训练时,对于正三元组,头实体、关系和尾实体输入大小为[1024,1,1000],1024为每批数据大小,1000为维度大小,对于负三元组,头实体或尾实体输入大小为[1024,256,1000],256为每个正三元组对应的负三元组个数。
[0099]
之后利用pytorch1.4.0构造新的超复数嵌入线性层hypere。如图2所示,这里利用超复数技术,将参数矩阵u分解成hyper_rule和w,需要注意的是是一个三维张量,后将w和hyper_rule进行kronecker积,得到kronecker积在第一个维度上进行求和操作,得到之后将第一步得到的头实体与关系嵌入结果的和(h r)、尾实体嵌入结果t输入线性层,线性层hypere计算形式为:y=hypere(x)=ux b。
[0100]
以正三元组为例,在经过嵌入层之后得到某三元组编码结果:
[0101]
头实体:/m/027rn:
[0102]
h=[2.85*10-3
,2.35*10-2
,2.57*10-2

……
,1.28*10-3
]
[0103]
关系:/location/country/form_of_government:
[0104]
r=[-3.57*10-2
,-1.47*10-2
,2.47*10-2

……
,-3.43*10-2
]
[0105]
尾实体:/m/06cx9:
[0106]
t=[-1.42*10-2
,6.13*10-3
,9.39*10-3

……
,-6.48*10-3
]
[0107]
其中头尾实体将地址进行知识图谱表示。
[0108]
设y1为头实体h和关系r相加得到:
[0109]
y1=h r
[0110]
且y2为尾实体t:
[0111]
y2=t
[0112]
将y1,y2通过hypere层得到:
[0113]y′1=hypere(y1),y
′2=hypere(y2)
[0114]y′1=[-1.99*10-2
,-3.66*10-2
,2.45*10-2

……
,-1.21*10-2
]
[0115]y′2=[-2.17*10-2
,-5.98*10-2
,1.97*10-2

……
,1.13*10-2
]
[0116]
将通过距离函数得到的分数定义为:
[0117]dr
(h,t)=||y

1-y
′2||=||hypere(h r)-hypere(t)||
[0118]
构造深度学习网络。按照表2所示的方式堆叠网络的不同层,知识图谱嵌入所需要的层数比较少,这是出于精简网络的考虑。在训练当中,采用adam优化方式,初始学习速率设为0.0001,batchsize设为1024,权值系数采用l2正则化方式,系数设为0.0001,adam的beta1参数设为0.99,beta2参数设为0.999,epsilon设为1e-8,学习率衰减率设为0.001。一共训练150000个epoch即可。
[0119]
表2基于任意维度超复数嵌入的知识图谱表示网络结构
[0120][0121]
步骤3:使用fb15k-237验证集进行校验,调整到最佳网络参数。
[0122]
步骤4:使用fb15k-237测试集进行测试。将训练后得到的网络的嵌入结果保留。测试头实体,关系,尾实体嵌入的结果经过模型后的排名,计算mr,mrr,hit10等评价指标。
[0123]
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献