[论文阅读笔记] Are Meta-Paths Necessary, Revisiting Heterogeneous Graph Embeddings

[论文阅读笔记] Are Meta-Paths Necessary? Revisiting Heterogeneous Graph Embeddings

购物返利 www.cpa5.cn

本文结构

  1. 解决问题
  2. 主要贡献
  3. 算法原理
  4. 参考文献

(1) 解决问题

传统的异构网络中的随机游走常常偏向于采样节点数比较多的节点类型。为了克服该问题,metapath2vec提出了基于元路径的随机游走,然而使用元路径策略要么要求先验知识,要么需要通过额外的操作来结合所有短的元路径到一个预定义的序列长度(如多元路径的情况,如何取舍,哪个更重要?)。本文基于该以上传统随机游走存在的偏向性问题出发,提出了不使用元路径策略的另外一种解决方法。


(2) 主要贡献

Contribution: 本篇论文提出了一种基于随机游走的异构网络嵌入算法JUST(不使用元路径),设计了JUmp和STay两个策略来以一种更有效的方式克服上述提出的传统异构网络随机游走偏差的问题。


(3) 算法原理

JUST算法框架主要包含两个部分:首先在图上做基于JUMP和STAY策略的随机游走,其次将得到的节点序列输入Skip-Gram模型学习节点表示向量嵌入(不再赘述)。

基于JUMP和STAY策略的随机游走

相比于同构网络,异构网络中的存在多种节点类型,该论文在传统异构图网络随机游走的基础之上,设计了两种策略来选择随机游走中下一跳节点的类型,即Jump和Stay策略

1. Jump(跳转策略): 即随机游走下一跳跳转到其他节点类型上去,假设下一跳节点类型为q,则所有与当前节点有边的且属于节点类型q的邻居节点都是下一跳节点的候选集。

2. Stay(停留策略): 即随机游走下一跳停留在当前节点的节点类型上,则所有与当前节点有连边且与当前节点同类型的邻居节点为下一跳节点的候选集。

基于以上两种策略,我们需要确定以下细节来控制随机游走:何时jump何时stay?jump的时候,要jump到哪个节点类型合适?

1. 何时jump何时stay?: stay和jump的概率设计如下,

一共包括三种情况:

(1)如果没有与当前节点同类型的邻居节点,那stay不了,就jump。

(2)如果没有与当前节点不同类型的邻居节点,那jump不了,就stay。

(3)如果既有与当前节点同类型的邻居又有不同类型的邻居,那以α的L次方确定stay和Junp的概率。α为初始的stay概率(超参数),L为到目前为止连续访问同一类型节点的次数(为了防止随机游走连续使用停留策略采样同一类型的节点,因此设计以指数概率衰减)。

2. jump的时候,要jump到哪个节点类型合适?: 以如下方式构造待选节点类型集合:

一共包含两种情况:

(1)节点类型q在最近没被选择过(构造一个m大小的队列来存储最近被选择跳转过的节点类型)并且当前节点的q类型节点邻居非空,满足该要求节点类型的为待选节点类型。以下为一个m=2的例子 (Q_hist存储最近被选择跳转的m=2个节点类型,下一跳节点类型跳转就选不到P和A两个类型了):

(2)如果由上述要求构造出来的待选节点类型集合是空的(即没有满足上述条件的节点类型),那就放松条件重新构造该集合。即不和当前节点的节点类型相同的其他节点类型都作为待选节点类型。

构造完待选节点类型之后,下一跳待转移的节点类型从该集合中随机采样即可,选完节点类型之后选择具体节点也是随机的。

通过以上方式生成异构网络上的随机游走序列之后,采用Skip-Gram模型训练节点向量即可。


(4) 参考文献

Hussein R, Yang D, Cudré-Mauroux P. Are Meta-Paths Necessary? Revisiting Heterogeneous Graph Embeddings[A]. Proceedings of the 27th ACM International Conference on Information and Knowledge Management[C]. 2018: 437–446.


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值