首页 > 其他分享 >GNN学习 Knowledge Graph Embedding(更新中)

GNN学习 Knowledge Graph Embedding(更新中)

时间:2023-08-19 15:57:11浏览次数:37  
标签:关系 training Knowledge Graph supervision edge edges Embedding 节点

GNN学习 Knowledge Graph Embedding

前面提到的方法都是只有一种边的类型,接下来要扩展到有向,多种边的类型的图上,即异质图(heterogeneous graph)

异质图有这样的几种类型:

  • Relational GCNs
  • Knowledge Graphs
  • Embeddings for KG Completion

一个异质图可以被定义为

\(G=(V,E,R,T)\)

V是带有节点类型的节点\(v_i\in V\)

E是带有关系类型的边\((v_i,r,v_j)\in E\)

T是节点类型\(T(v_i)\)

R是关系类型\(r\in R\)

1.Relational GCNs

RGCN就是把GCN扩展到异质图上

从只有一种边的有向图开始,仅沿着边的方向进行信息的传递

如果一个图有多种关系的类型,那么在信息传递时,我们可以对不同的边的类型使用不同的权重

于是,我们就可以得出RGCN的一般表达

\(h_v^{l+1}=\sigma(\sum_{r\in R}\sum_{u\in N_v^r}\frac1{c_{v,r}}W_r^lh_u^l+W_0^lh_v^l)\)

其中,通过每种关系的节点的度数进行归一化 \(c_{v,r}=|N_v^r|\)

图神经网络可以写成Message+Aggregation的形式

Message:

  • 对于给定关系的所有邻居\(m_{u,r}^l=\frac1{c_{v,r}}W_r^lh_u^l\)
  • 自环传递\(m_v^l=W_0^lh_v^l\)

Aggregation

对邻居和自己传递过来的信息进行求和操作

\(h_v^{l+1}=\sigma(Sum(\{m_{u,r}^l,u\in\{N(v)\cup\{v\}\}\}))\)

RGCN的scalability

每种关系都需要L个权重矩阵\(W_r^1,W_r^2...W_r^L\)

每个权重矩阵的尺寸为\(d^{l+1}\times d^l\),其中\(d^l\)时第l层的嵌入维度

参数量随关系类的数量迅速增长,容易产生过拟合的问题

有两种方式来正则化权重矩阵

  • block diagonal matrices
  • Basis/Dictionary learning

1.block diagonal matrices

使权重矩阵变稀疏,减少非0元素的数量

具体做法是让权重矩阵成为对角块的形式

缺点在于只有相邻神经元可以通过权重矩阵交互,需要多加几层神经网络

2.Basis Learning

在不同关系之间共享权重参数

做法:将特定关系的权重矩阵表示为基础变换的线性组合形式

\(W_r=\sum_{b=1}^Ba_{rb}\cdot V_b\)

\(V_b\)在关系间共享,是基础矩阵

\(a_{rb}\)是\(V_b\)的重要性权重

对于每个关系,我们就只需要学习\(\{a_{rb}\}_{b=1}^B\)这B个标量了,其中B是常数

3.应用实例

1.链接预测

在异质图中,将每种关系对应的边都分成training message edges, training supervision edges, validation edges, test edges四类

这样分是因为有些关系的边很少,混一起分可能有些关系类型的边可能分不到四类

假定\((E,r_3,A)\)是training supervision edge,其余的边是Training message edges

pP37Gd0.png

使用RGCN给\((E,r_3,A)\)打分

  • 首先得到最后一层节点E和节点A的输出向量
  • 使用关系专用的打分函数\(f_r:\mathbb{R}^d\times \mathbb{R^d} \rightarrow \mathbb{R}\)
    • 比如\(f_{r_1}(h_E,h_A)=h_E^TW_{r_1}h_A,W_{r1}\in \mathbb{R}^{d\times d}\)

1.训练阶段:用training messages edges预测training supervision edges

  • 1.使用RGCN给\((E,r_3,A)\)打分
  • 2.通过扰乱 supervison edge得到negative edge。比如破坏\((E,r_3,A)\)的尾节点得到\((E,r_3,B)\)和\((E,r_3,D)\),negative edge不能属于training messages edges或training supervision edges
  • 用GNN模型给negative edge打分
  • 优化交叉熵损失函数,使在training supervision edge上的得分最大,negative edge上的得分最低

2.测试阶段

用training messages edges和training supervision edges来预测validation edges,\((E,r_3,D)\)的得分应该比所有的negatives edges的得分更高

negative edges就是尾节点不在training messages edges和training supervision edges中的以E为头节点,\(r_3\)为关系的边

具体步骤:

1.计算\((E,r_3,D)\)的得分

2.计算所有negative edge的得分

3.获得\((E,r_3,D)\)的排名RK

4.计算指标

  • Hits@k:RK<=k的次数越高越好
  • Reciprocal rank:\(\frac1{RK}\)越高越好

标签:关系,training,Knowledge,Graph,supervision,edge,edges,Embedding,节点
From: https://www.cnblogs.com/anewpro-techshare/p/17642551.html

相关文章

  • PostgreSQL 源码性能诊断(perf profiling)指南(含火焰图生成分析FlameGraph) - 珍藏级
    PostgreSQL源码性能诊断(perfprofiling)指南(含火焰图生成分析FlameGraph)-珍藏级作者digoal日期2016-11-28标签PostgreSQL,Linux,perf,性能诊断,stap,systemtap,strace,dtrace,dwarf,profiler,perf_events,probe,dynamicprobe,tracepoint......
  • 火焰图(Flame Graphs)的安装和基本用法
    火焰图(FlameGraphs)的安装和基本用法 火焰图(FlameGraphs)一、概述:    火焰图(flamegraph)是性能分析的利器,通过它可以快速定位性能瓶颈点。    perf命令(performance的缩写)是Linux系统原生提供的性能分析工具,会返回CPU正在执行的函数名以及调用栈(stac......
  • 计算机视觉(Computer Vision),计算机图形学(Computer Graphics)和数字图像(Image Proce
    计算机视觉(ComputerVision),计算机图形学(ComputerGraphics)和数字图像(ImageProcessing)从学科分类:ComputerScience/ArtificialIntelligence/ComputerVisionComputerScience/ComputerGraphicsandVisualizationElectricalEngineering/SignalProcessing/Digit......
  • 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL
    删除数据库中以往的图MATCH(n)DETACHDELETEn创建节点CREATE命令语法Neo4jCQL“CREATE”命令用于创建没有属性的节点。它只是创建一个没有任何数据的节点。CREATE(<node-name>:<label-name>{<Property1-name>:<Property1-Value>..............
  • 知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR 连接自建数据库
    #输入查看数据库连接neo4j$:serverstatus添加远程连接,输入连接地址GraphApps选择GraphXR打开显示......
  • 知识图谱(Knowledge Graph)- Neo4j 5.10.0 Desktop & GraphXR
    下载地址:https://neo4j.com/download/安装下载时会产生激活码(保存下来)下载完成后安装运行后,输入激活码进入主页面运行自带的电影知识谱图测试是否安装成功安装GraphXRhttps://neo4j.com/blog/graphxr-graph-app-neo4j-desktop/输入:https://graphxr.kineviz.com......
  • Pytorch中使用Embedding报错'IndexError'的解决方法
    简介  Pytorch中nn.Embedding为针对词向量的层,其用来实现词与词向量的映射。其调用形式如下nn.Embedding(num_embeddings:int,embedding_dim:int,padding_idx:int|None=None,max_norm:float|None=None,norm_type:float=2.,scale_grad_by_freq:b......
  • 『题解』ABC261Ex Game on Graph
    题目链接震惊!这个题竟然被神犇szs放进了博弈论里!我真的没看出来除了题面还有哪里像博弈论(也许是因为我菜)。转移方式很显然,按照题面说的做就行了。那么正解也就呼之欲出了。但是我知道大家都会正解,就是魔改的堆优化Dijkstra,所以我想说的是一种歪解,以及它是歪解的原因。歪解......
  • Android 怎么就不卡了呢之Choreographer
    前言针对AndroidUI不流畅的问题,Google提出了ProjectButter对Android的显示系统进行了重构。这次重构的三个关键点VSynch垂直同步TripleBuffer三重缓存Choreographer编舞者这篇文章我们主要聊一聊Choregrapher,后续的我们写关于其他。choreographer界面的显示大体会经过CPU的......
  • TuGraph任务能力增强:通过API定制流图计算逻辑
    layout:postread_time:trueshow_date:trueshow_author:truetitle:"GeaFlow任务能力增强:通过API定制流图计算逻辑"date:2023-08-15tags:[图计算,高阶API,TuGraph,GeaFlow,Java]category:opinionauthor:TuGraphdescription:"GeaFlowAPI是对高阶用户提供的开......