知识图谱(关系网络)概念及常用算法

目录

1 什么是图?

2 图能做什么?

3 传统的图算法从应用角度可分为三类

3.1 路径查找算法——Dijkstra

3.2 中心度算法——PageRank

3.3 社区发现算法——LPA

4 图神经网络

5 网络表示学习和图嵌入

5.1 基于矩阵分解的图嵌入

5.2 基于随机游走的图嵌入

5.3 基于图神经网络的图嵌入

引用:


1 什么是图?

图是一种常见的数据结构,用于表示对象及其之间的关系。其中,对象又称节点(node)或顶点(vertex),关系用边(edge)来描述。在数学上一般用 G=(V,E,A,X) 来表示,其中 V={v1,v2……,vn} 是节点集合,E=e_ij 表示边的集合,A 是大小为|V|×|V|的邻接矩阵,用于表示节点之间的连接关系,如果 e_ij∈E,则 A_ij=1,X 是大小为|V|×d 的特征矩阵,X 的第 i 行 X_i:表示第 i 个节点的属性特征,其中 d 是属性的维度。

 

2 图能做什么?

上图中,右侧手机号171505****关联了393个人,16年-19年累计进件1665次,放款65笔,其中33笔当期状态是逾期!

 

3 传统的图算法从应用角度可分为三类

1. 路径查找算法

2. 中心度算法

3. 社区发现算法

 

3.1 路径查找算法——Dijkstra

Dijkstra是一个贪心算法,用于在加权的图中查找最短路径,比起无脑的遍历,Dijkstra优化的点是,为了避免不必要的

重复计算,保留上一步的计算信息。

对于带权有向或无向图 G=(V,E),Dijkstra 算法的复杂度为O(V^2) 只有当权重为正值时有效,基于 Fibonacci heap 的最

小优先队列实现版本,其时间复杂度为O(E+VlogV)。当权重有负值,可使用贝尔曼-福特算法。

1. 指定一个节点,例如我们要计算 'A' 到其他节点的最短路径
2. 引入两个集合(S、U),S集合包含已求出的最短路径的点(以及相应的最短长度),U集合包含未求出最短路径的点(以及A到该
点的路径,注意 如上图所示,A->E由于没有直接相连 初始时为∞)
3. 初始化两个集合,S集合初始时 只有当前要计算的节点,A->A = 0,U集合初始时为 A->B = 8, A->E = ∞, A->D = 1, 
A->C = 5
4. 从U集合中找出路径最短的点,加入S集合,例如 A->D = 1
5. 更新U集合路径,if ( 'D 到 C,E 的距离' + 'AD 距离' < 'A 到 C,E 的距离' ) 则更新U
循环执行 4、5 两步骤,直至遍历结束,得到A 到其他节点的最短路径

3.2 中心度算法——PageRank

定义问题: 一个网站的排名,如何确定;或一个人在社交网络中的影响力,如何确定;

被一个门户网站指向,被一个大V关注……

假设,4个网站之间的跳转入左图,抽象出来就是转移矩阵M,假设一个人最开始访问这四个网站的概率都是1/4,那经过第一轮跳转

终止点问题&陷阱问题

在计算PR时,增加空值随机跳出的阻尼系数β,可以理解成关掉无外链的网页,重新随机打开一个新的网页。

3.3 社区发现算法——LPA

LPA算法是一个极其简单的图传播算法,其经验假设是以节点为中心,进行投票制,十分高效。

1. 初始化,将图中的每个节点看成一个独立的社区;
2. While所有节点的社区标签不再变化;
    统计每个节点邻居的社区,将出现最多次的社区赋给该节点,如果出现最多次的社区有多个,随机选择一个社区赋给该节点。

算法本身很简单,分布式实现也很容易。但是这个算法也存在很大的问题:由于存在随机选择的情况,所以算法很容易

出现振荡。但这个算法的运行开销很低,拿来做baseline,作为参考也是可以的。另外,对于一个带权重的图,亦可以

考虑带权重的投票机制。

另:半监督学习版LPA

构建转移矩阵M,M中的转移概率计算方法为W_ij = exp(- d_ij/σ^2)
2. 对未标注的样本随机初始化,已标注样本为样本标签,构造状态矩阵R
3. 按转移概率,对矩阵R的状态进行更新,只更新未标注样本(同样可以加入阻尼系数β)
4. 对行进行归一化
5. 重复3,4步骤直到收敛

4 图神经网络

图神经网络(Graph Neural Network)是直接在图数据结构上运行的神经网络。GNN的典型应用便是节点分类。图中的每

个节点都有一个标签,我们希望不需要标注数据,可以预测新的节点标签。在首次提出GNN的论文《The graph neural

network model》中来看GNN的定义。

在节点分类问题中,每个节点v的特征用xv表示,并且和标签tv相关联。给定部分标记的图G,目标是利用这些标

记的节点来预测未标记节点的标签。网络学会用d维向量(状态)hv表示每个节点,其中包含其邻域信息。

其中,xco[v]表示与v连接的边的特征,hne[v]表示v的相邻节点嵌入表示,xne[v]表示v的相邻节点的特征。函数f是将这

些输入投影到d维空间的传递函数。

通过将状态hv以及特征xv传递给输出函数g来计算GNN的输出:

f和这里的g都可以解释为前馈全连接神经网络。 L1损失可以直接表述如下:

关键问题就是x、h的向量表示 —— everything2vec。

5 网络表示学习和图嵌入

将图的拓扑结构、节点属性、节点标签特征经过神经网络非线性映射,在深层可以提取到更高层次的特征表示,然后变换

成一个向量通过全连接层进行分类,那提取这个向量的过程称为表示学习(Representation Learning)。图嵌入也类似,

通过神经网络学习从节点到向量的映射,尽可能的保留住节点的结构信息和属性信息。图嵌入方法可以分为基于矩阵分解

的图嵌入、基于随机游走的图嵌入、基于神经网络的图嵌入(即图神经网络)。

5.1 基于矩阵分解的图嵌入

邻接矩阵(adjacency matrix)

拉普拉斯矩阵

L=D-A

5.2 基于随机游走的图嵌入

DeepWalk 算法

基于word2vec提出来的,将节点当做词,随机游走得到的节点序列当做句子,用word2vec的框架(skip-gram+

Hierarchical Softmax)来进行词嵌入。

node2vec 算法

node2vec通过改变随机游走序列生成的方式进一步扩展了DeepWalk算法。DeepWalk选取随机游走序列中下一个节点

的方式是均匀随机分布的,而node2vec通过引入两个参数p和q,将宽度优先搜索和深度优先搜索引入随机游走序列的

生成过程。广度优先搜索注重刻画网络中的局部特征,而深度优先搜索能更好地遍历整个网络,反映了节点间的同质性。

t为游走初始节点(顶点),v为当前节点,dtx为顶点t和顶点x之间的最短路径距离

 

5.3 基于图神经网络的图嵌入

图嵌入框架

Hamilton 提出的一种图嵌入 encoder-decoder 框架,可以将大多数的图嵌入方法用这个框架来表示。在这个框架中,

我们围绕两个关键的映射函数组织了各种方法:一个 encoder(它将每个节点映射到一个低维向量) 和一个 decoder(它

从已知的嵌入中解码关于图的结构信息)。encoder-decoder 背后的直觉想法是这样的:如果我们能从低位嵌入表示中学

会解码高维图信息,如节点在图中的全局位置或节点的局部邻域结构,那么原则上,这些嵌入应包含下游机器学习任务

所需的所有信息。

 

decoder 是接受一组节点嵌入并从这些嵌入中解码用户指定的图统计数据的函数。例如,decoder 可能根据节点的嵌入

预测节点之间是否存在边,或者可能预测图中节点所属的社区。

 

GraphASGE算法

对于一个图G,先从一度节点中随机采样,再从一度采样节点的二度节点随机采样,得到如图一度3个二度5个节点。根

节点从采样的一度节点中使用aggregator1提取信息,一度节点从二度节点中使用aggregator2提取信息,一层层向内

聚,最终得到根节点的表征向量。

算法伪代码如下:

其中,第一层循环k表示第k层或k度(比如开始的例子中k属于[0,1,2]),hk表示在这一层中一个节点的表征,xv是v节点

的特征向量(如果节点没有特征表示可以进行随机初始化?那这个过程学习到的只是网络的拓扑结构)N表示相邻节点采

样函数。

过程是这样的:

k=1时:①每个节点v从相邻节点通过N采样得到ui,通过AGGREGATEk得到根据邻居节点对v节点的表征hN(v);②将v节点

的k=0原始特征向量hv与hN(v)合并(concat)后经过W矩阵映射及σ非线性映射(非线性激活函数的全连接层),得到k=1层

节点v的表征hv;③遍历完全部节点后,对hv归一化;

k=2时:……

通常k不需要取3度以上,2度关系的表征对大部分场景已经足够。

损失函数

可以通过无监督方式或有监督方式进行,优化方向是,希望节点u与相邻节点相似度高,但与没有交集(n度以上)的节点相

似度低;

有监督的方式可以根据给定label的类型选择损失函数,比如:二分类可以采用交叉熵损失函数。

聚合函数

伪代码第5行可以使用不同聚合函数,本小节介绍五种满足排序不变量的聚合函数:平均、GCN归纳式、LSTM、pooling

聚合器。(因为邻居没有顺序,聚合函数需要满足排序不变量的特性,即输入顺序不会影响函数结果)

  • a.平均聚合:直接对目标节点和所有邻居emebdding中每个维度取平均(替换伪代码中第5、6行),后再非线性转换;

  • b. 归纳式聚合:先对邻居embedding中每个维度取平均,然后与目标节点embedding拼接后进行非线性转换;

  • c. LSTM聚合:LSTM函数不符合“排序不变量”的性质Å,需要先对邻居随机排序,然后将随机的邻居序列embedding作为

LSTM输入;

  • d. Pooling聚合:将相邻的相邻都扔进一个全连接神经网络中,

 

引用:

1. 简单的图神经网络介绍 https://www.jiqizhixin.com/articles/2019-02-15-14

2. 从数据结构到算法:图网络方法初探https://www.jiqizhixin.com/articles/2019-08-12-9

3. 《Graph_Algorithms_Neo4j》Mark Needham & Amy E. Hodler

4. 《图数据库》第二版 Ian Robinson著

5. Inductive Representation Learning on Large Graphs, William L. Hamilton, 2017

6. 图的邻接矩阵的实现 https://blog.csdn.net/canot/article/details/78703184

7. lpa标签传播算法讲解及代码实现 https://blog.csdn.net/nwpuwyk/article/details/47426909#commentBox

  • 18
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值