【技术实现步骤摘要】
一种基于知识图谱嵌入的链接预测方法
[0001]本专利技术涉及知识图谱链接预测领域,具体涉及一种基于知识图谱嵌入的链接预测的方法。
技术介绍
[0002]知识图谱(Knowledge Graph,KG)是真实世界信息的结构化表示,通常表示一个多关系图,即一个包含多种类型的节点和关系的图。KG由三个部分组成,实体集E,即现实世界中的事物,如人、地名、概念、药物、公司等的集合,例如“北京”就是一个实体;关系集R,即实体间的某种联系,例如“首都”关系表示一个实体是另一个实体的首都;三元组集T,表示事实,即实体间存在某种关系,例如三元组(北京,首都,中国),表示“北京是中国首都”这个事实。
[0003]虽然知识图谱包含大量三元组(事实),但人工输入所有的三元组是不可能的,因此知识图谱往往仍然存在着大量三元组缺失的问题。为了解决这个问题,知识图谱链接预测(linkprediction,LK)任务的目标根据已知的链接(三元组),自动预测实体之间的丢失链接。举例说明,给定一个缺失三元组(h,r,?)或(?,r,t),问号表示要缺失的实体,对于每一个缺失实体,链接预测任务使用所有的知识图谱中的实体作为候选项对三元组进行补全,然后预测补全后的三元组的有效性。
[0004]已有的研究采用知识图谱嵌入来处理链接预测问题。知识图谱嵌入将知识图谱中的每个实体和关系表示为低维向量(即嵌入),通过计算向量间的得分函数来判断三元组的有效性。嵌入模型的参数由实体嵌入向量和关系嵌入向量(或矩阵)组成,每个实体对应一个向量,每个关系对应一 ...
【技术保护点】
【技术特征摘要】
1.一种基于知识图谱嵌入的链接预测方法,其特征在于包括以下步骤:第一步:对知识图谱进行分区;根据需要确定分区数量P和每个分区的子分区数量PP,将所有的实体分为subP个不重叠的子分区,subP=P
×
PP,子分区为实体集E的互不重叠的子集,分区为PP个子分区的并集;将所有的三元组根据其头实体和尾实体所在子分区划分为不同的子三元组块;方法是:1.1输入知识图谱数据,得到实体集E,关系集R,三元组集T,实体数量num_entities,E中包含num_entities个实体,num_entities为正整数,T中包含num_triples个三元组,num_triples为正整数;1.2设置超参数嵌入向量维度D、分区数量P、每个分区包含的子分区数量PP,得到总的子分区数量subP=P
×
PP,计算实体子分区大小subpart_size,subpart_size=num_entities/subP;1.3将实体集E随机打乱,然后按照子分区大小subpart_size将实体分割成subP个子分区集subpart,subpart中共有subP个实体子分区,每个实体子分区中含subpart_size个实体;1.4遍历三元组集T所有的三元组,根据三元组头实体和尾实体所属的分区,将三元组划分到对应的子三元组块中,得到subP2个子三元组块组成的子三元组块集合subBuckets,subBuckets={subBucket(i2,j2)|1<i2,j2≤subP},将子三元组块集合中所有的三元组块存储至共享文件系统;第二步:构建嵌入模型;方法是先表示实体、关系:嵌入模型采用嵌入向量表示实体和关系,将实体嵌入向量作为实体子分区嵌入矩阵行向量,将关系嵌入向量作为关系嵌入矩阵行向量,嵌入模型的参数由实体嵌入向量和关系嵌入向量构成;再定义得分函数:得分函数定义了如何使用实体和关系嵌入计算三元组得分;由实体子分区嵌入矩阵、关系嵌入矩阵、得分函数共同组成嵌入模型;第三步,构建知识图谱链接预测系统;知识图谱链接预测系统由包含N个服务器的计算集群和共享文件系统组成,N个服务器均包含CPU和GPU,N为正整数,;共享文件系统是计算集群的共享磁盘,负责存储实体子分区嵌入矩阵、关系嵌入矩阵θ、以及三元组块;N个服务器与共享文件系统相连,从共享文件系统获取嵌入模型,负责对嵌入模型进行训练,并对用户输入的要预测的实体缺失的三元组即缺失三元组,使用训练后的嵌入模型进行链接预测,得到预测结果;对嵌入模型训练时,每个服务器都是一个训练节点,从训练节点中选择一个作为主节点;主节点也是训练节点,除了运行训练节点的所有进程外,还要运行锁服务器进程,训练节点运行数据加载进程和GPU训练进程;数据加载进程负责从共享文件系统中读取和写入实体子分区嵌入矩阵、关系嵌入矩阵;链接预测时,每个服务器作为一个预测节点,从预测节点选择一个作为查询节点,各预测节点从共享文件系统加载训练后的嵌入模型,从查询节点获取用户输入的缺失三元组,然后使用嵌入模型进行预测;第四步,采用多机并行和CPU、GPU并行对嵌入模型进行分布式训练,将计算集群中的所有N个服务器作为训练节点,训练节点安装有数据加载进程和GPU训练进程,数据加载进程和GPU训练进程配合完成对嵌入模型的训练;从训练节点中任选一个作为主节点,主结点安
装有锁服务进程;主节点的锁服务进程按4.1的流程对三元组块进行调度,同时N个训练节点的数据加载进程按4.2的流程进行数据加载,同时N个训练节点的GPU训练进程按4.3的流程进行训练,4.1、4.2、4.3并行进行,完成分布式训练,得到训练后的嵌入模型;方法是:4.1主节点启动锁服务器进程,锁服务器进程调度每个训练节点进行训练所需的三元组块;调度方法如下:4.1.1锁服务器进程初始化活动列表active和完成列表done,active和done初始值都为空,active保存当前正在训练的三元组块编号,done保存已经训练完的三元组块编号;初始化三元组块总数num_buckets=P2,P为分区数量;4.1.2锁服务器进程接收N个训练节点发送来的信息,按照先到先得的顺序进行处理;如果信息为开始新的训练周期,转4.1.3;如果信息为请求三元组块,转4.1.4;如果信息为释放三元组块,转4.1.5;如果信息为结束训练,结束锁服务器进程;4.1.3新的训练周期开始,清空active和done,生成从分区到子分区的随机映射maps,并将maps发送到N个训练节点;转4.1.2;4.1.4为训练节点生成可训练的三元组块编号,得到可训练三元组编号res_bucket,并更新活动列表active和完成列表done;4.1.5将释放三元组块信息中的三元组编号从active移除;转4.1.2;4.2在N台训练节点上启动数据加载进程,N个训练节点的数据加载进程的流程完全相同,第n个训练节点进行数据加载的方法如下:14.2.1在内存中创建4个PP
×
subpart_size行D列的矩阵Embs1,Embs2,Embs3,Embs4,矩阵元素值初始化为0,令实体嵌入矩阵列表Embs=[Embs1,Embs2,Embs3,Embs4],令空闲矩阵序号列表free_idxs=[0,1,2,3];创建2个int类型进程间共享变量lock1=0,lock2=0;创建2个三元组编号curB1=(0,0),curB2=(0,0);创建2个实体嵌入矩阵序号列表EmbsIdx1,EmbsIdx2,分别初始化为长度为P的列表,列表元素均为0;创建2个三元组列表Triples1,Triples2,初始化为空;创建进程间传输管道conn,用于进程间数据传输,其数据类型为Pipe,创建训练标记is_training,初始化为True,类型为bool;创建共享参数列表shared_paras,shared_paras中包含两组共享参数,令shared_paras=[(lock1,curB1,Embsldx1,Triples1),(lock2,curB2,EmbsIdx2,Triples2)];4.2.2从共享文件系统中读取关系嵌入矩阵θ,在第n个训练节点中启动参数服务器,参数服务器负责将关系嵌入矩阵θ在N个训练节点之间进行同步;4.2.3令当前训练周期数epoch=1,获取用户定义的总训练周期数num_epoch,num_epoch为正整数;4.2.4如果epoch≤num_epoch,转4.2.5,否则转4.2.21;4.2.5如果第n个训练节点为主结点,向锁服务器进程发送开始新的训练周期信息,转4.2.6;如果第n个训练节点不是主结点,直接转4.2.6;4.2.6判断是否从锁服务器进程接收到分区到子分区的映射关系maps,若接收到maps,转4.2.7;若未收到maps,转4.2.6继续等待;4.2.7第n个训练节点开始第epoch轮训练周期的训练,初始化第epoch轮训练周期三元组块编号cur_b=None,next_b=None,old_b=None,next_arg_idx=0;cur_b是第epoch轮正在训练的三元组块编号,next_b是待加载的三元组块编号,old_b是已经训练完成的三元
组块编号,next_arg_idx是用于加载的共享参数在shared_paras中的序号;4.2.8从共享参数列表中取出第next_arg_idx+1个元素:令lock,curB,EmbsIdx,Triples=shared_paras[next_arg_idx]=shared_paras[next_arg_idx];使用get_lock()函数对输入为lock时获取临时变量L,使用acquire()函数对输入为L时获取是否成功标记is_buccess,如果is_success=True,转4.2.9,否则转4.2.8;4.2.9判断lock的值是否为0,如果是0,转4.2.10;否则,使用get_lock()函数对输入为lock时获取临时变量L,使用release()函数对输入为L时进行进程锁释放,转4.2.8;4.2.10向锁服务器进程发送获取三元组块请求,从主节点得到res_bucket和remaining;如果res_bucket为None且remaining为0,转4.2.17;如果res_bucket为None且remaining不为0,转4.2.10;如果res_bucket不为None,更新old_b=cur_b,cur_b=next_b,next_b=res_bucket,转4.2.11;4.2.11在内存和共享文件系统之间采用嵌入数据交换方法对next_b和old_b进行分区嵌入矩阵数据交换;4.2.12从共享文件系统中加载next_b三元组到内存;从maps获取分区Parth和Parth对应的子分区:maps[Parth]=[sh1,sh2,...shPP],maps[Partt]=[st1,st2,...,stPP];从共享文件系统中加载子分区对应的子三元组块{subBuckets[i3,j3]|i3∈maps[Parth],j3∈maps[Partt]},并重组为next_b三元组块Bucket,将Bucket保存至Triples;更新共享参数cur_B=next_b;4.2.13令lock=1,令next_arg_idx=(next_arg_idx+1)%2;4.2.14使用get_lock()函数对输入为lock时获取临时变量L,使用release()函数对输入为L时进行进程锁释放;4.2.15第n个训练节点从conn中接收训练完成信息;4.2.16转4.2.8;4.2.17更新old_b=cur_b,cur_b=next_b,next_b=None,使用4.2.11中的嵌入数据交换方法对更新后next_b,old_b进行嵌入数据交换;4.2.18第n个训练节点从conn中接收训练完成信息,更新old_b=cur_b,cur_b=next_b,next_b=None,使用4.2.11中的嵌入数据交换方法对更新后next_b,old_b进行嵌入数据交换;4.2.19如果第n个训练节点是主结点,将关系嵌入矩阵θ存储至共享文件系统,转4.2.20;如果第n个训练节点不是主结点,直接转4.2.20;4.2.20第epoch轮训练结束,令epoch=epoch+1,转4.2.4;4.2.21说明第n个训练节点已进行了num_epoch轮训练,得到了训练完成的知识图谱嵌入模型,令训练标记is_training=False;如果当前节点是主节点,则向锁服务器发送训练结束信息,转第五步,否则直接转第五步;4.3启动GPU训练进程,在数据加载完成的三元组块上进行模型训练,直至数据加载进程完成所有训练周期的数据加载;第n个训练节点的GPU训练进程首先尝试获取内存中数据加载进程完成加载的三元组块以及相应的实体分区嵌入矩阵,然后将训练节点内存中的实体嵌入矩阵列表Embs中的矩阵加载到GPU上进行训练,训练完成后将加载到GPU上的矩阵传回内存,并通知数据加载进程三元组块训练结束,由数据加载进程将训练完成的分区嵌入
矩阵存储至共享文件系统;第五步,计算集群加载训练后的嵌入模型,基于训练后的嵌入模型进行知识图谱链接预测;方法是:5.1将N个服务器作为预测节点,选择任意一个服务器作为查询节点;将第四步训练后的嵌入模型即共享文件系统中的实体子分区嵌入矩阵和关系嵌入矩阵加载到服务器中;具体方法如下:5.1.1在查询节点中,根据集群中服务器数量N,从共享文件系统中读取subP个实体子分区嵌入矩阵subEmbs1,subEmbs2,...,subEmb
ip
,...,subEmbs
subP
;5.1.2查询结点将子分区集subpart中的subP个集合,按照subpart中的顺序拼接成实体集E,将对应的subP实体子分区嵌入矩阵在行方向上拼接成实体嵌入矩阵Embs_all,Embs_all为一个num_entities行D列的矩阵;5.1.3查询结点将实体集E中的元素按照当前顺序均匀分割为N个实体分区Parts1,...,Parts
N
,将实体嵌入矩阵Embs_all在行方向上均匀分割为N个实体分区嵌入矩阵Embs1,Embs2,...,Embs
N
;查询节点将第1个分区Parts
n1
和第1个分区嵌入矩阵Embs1发送给第1个服务器,
…
,将第n个分区Parts
n
和第n个分区嵌入矩阵Embs
n
发送给第n个服务器,
…
,将第N个分区Parts
N
和第N个分区嵌入矩阵Embs
N
发送给第N个服务器;5.1.4 N台服务器从共享文件系统读取关系嵌入矩阵θ,将θ加载到N台服务器的内存中;5.2进行链接预测,方法是:5.2.1查询节点接收用户从终端输入的缺失三元组(e
hh
,rr,?),查询节点从矩阵Embs_all读取e
hh
的嵌入向量emb
hh
,并发送给N个预测节点;5.2.3N个服务器并行预测,第n台服务器的预测过程是:5.2.3.1第n台服务器从分区Part
n
取出所有的实体和实体e
hh
组成三元组,得到三元组集{(e
hh
,rr,e
tt
′
)|tt
′
...
【专利技术属性】
技术研发人员:黄震,孙鼎,李东升,王艺霖,乔林波,汪昌健,徐皮克,陈易欣,
申请(专利权)人:中国人民解放军国防科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。