图学习中的链路预测任务(持续更新ing...)
诸神缄默不语-个人CSDN博文目录
本文将对图学习中的链路预测任务进行系统性的介绍。
最近更新时间:2022.11.29
最早更新时间:2022.10.31
文章目录
- 1. 问题定义
- 2. 研究方法
- 2.1 基于图中结构相似性的链路预测
- 2.1.1 基于局部信息的相似性指标
- 2.1.2 基于路径的相似性指标
- 2.1.3 基于随机游走的节点相似性指标
- 2.2 基于似然分析的链路预测
- 2.3 基于机器学习的链路预测
- 2.4 进行节点表征,用节点表征相似性实现链路预测:不同的相似度
- 2.4.1 通用节点表征工作
- 2.4.2 链路预测工作
- 2.5 其他
- 3. 链路预测工作分类和应用
- 4. 正文及脚注中未提及的其他参考资料
- 5. 待更新(flag)
1. 问题定义
早期论文,证明链路预测任务的重要性:(2003 CIKM) The Link-Prediction Problem for Social Networks1
2. 研究方法
2.1 基于图中结构相似性的链路预测
在社交网络中可能符合这一假设,在PPI网络中可能不符(有很多共同邻居的蛋白质相连(interact)可能性更低)2
2.1.1 基于局部信息的相似性指标
- 共同邻居 Common neighbors
- 直接基于共同邻居指标的不同的规范化而得到的,k(x)=∣Γ(x)∣k(x) = |Γ(x)|k(x)=∣Γ(x)∣ 为节点x的度
相关早期工作:
- (2003 CIKM) The Link-Prediction Problem for Social Networks
- (2009 The European Physical Journal B) Predicting missing links via local information
- (2016 ICDE) Link prediction in graph streams
2.1.2 基于路径的相似性指标
2.1.3 基于随机游走的节点相似性指标
2.2 基于似然分析的链路预测
2.3 基于机器学习的链路预测
2.4 进行节点表征,用节点表征相似性实现链路预测:不同的相似度
一般范式是首先进行节点表征(可以有监督或无监督,解耦或耦合),然后用相似度度量指标(一般用点积或余弦相似度),用这个得分作为二分类(是否连边)任务的得分。
2.4.1 通用节点表征工作
使用余弦相似度的工作:
- GATNE3
使用内积的工作:
- VGAE4
(对取出的边还要分别过sigmoid,在本博文中略)
G2G5使用KL散度(这个是无监督节点表征模型,本来就以KL散度为基础建立的损失函数)
2.4.2 链路预测工作
DEAL6则是几种距离都测试过(点积/余弦相似度/欧氏距离),在论文中说余弦相似度效果最好(以下代码摘自https://github.com/working-yuhao/DEAL/blob/master/model.py:
class Hidden_Layer(nn.Module): #Hidden Layer, Binary classificationdef __init__(self, emb_dim, device,BCE_mode, mode='all', dropout_p = 0.3):super(Hidden_Layer, self).__init__()self.emb_dim = emb_dimself.mode = modeself.device = deviceself.BCE_mode = BCE_modeself.Linear1 = nn.Linear(self.emb_dim*2, self.emb_dim).to(self.device)self.Linear2 = nn.Linear(self.emb_dim, 32).to(self.device)x_dim = 1self.Linear3 = nn.Linear(32, x_dim).to(self.device)if self.mode == 'all':if self.BCE_mode:self.linear_output = nn.Linear(x_dim+ 3, 1).to(self.device)else:self.linear_output = nn.Linear(x_dim+ 3, 2).to(self.device)else:self.linear_output = nn.Linear(1, 2).to(self.device) self.linear_output.weight.data[1,:] = 1self.linear_output.weight.data[0,:] = -1self.cos = nn.CosineSimilarity(dim=1, eps=1e-6)self.pdist = nn.PairwiseDistance(p=2,keepdim=True) self.softmax = nn.Softmax(dim=1)self.elu = nn.ELU()assert (self.mode in ['all','cos','dot','pdist']),"Wrong mode type"def forward(self, f_embs, s_embs):if self.mode == 'all':x = torch.cat([f_embs,s_embs],dim=1)x = F.rrelu(self.Linear1(x))x = F.rrelu(self.Linear2(x))x = F.rrelu(self.Linear3(x))cos_x = self.cos(f_embs,s_embs).unsqueeze(1)dot_x = torch.mul(f_embs,s_embs).sum(dim=1,keepdim=True)pdist_x = self.pdist(f_embs,s_embs)x = torch.cat([x,cos_x,dot_x,pdist_x],dim=1)elif self.mode == 'cos':x = self.cos(f_embs,s_embs).unsqueeze(1)elif self.mode == 'dot':x = torch.mul(f_embs,s_embs).sum(dim=1,keepdim=True)elif self.mode == 'pdist':x = self.pdist(f_embs,s_embs)if self.BCE_mode:return x.squeeze()# return (x/x.max()).squeeze()else:x = self.linear_output(x)x = F.rrelu(x)# x = torch.cat((x,-x),dim=1)return xdef evaluate(self, f_embs, s_embs):if self.mode == 'all':x = torch.cat([f_embs,s_embs],dim=1)x = F.rrelu(self.Linear1(x))x = F.rrelu(self.Linear2(x))x = F.rrelu(self.Linear3(x))cos_x = self.cos(f_embs,s_embs).unsqueeze(1)dot_x = torch.mul(f_embs,s_embs).sum(dim=1,keepdim=True)pdist_x = self.pdist(f_embs,s_embs)x = torch.cat([x,cos_x,dot_x,pdist_x],dim=1)elif self.mode == 'cos':x = self.cos(f_embs,s_embs)elif self.mode == 'dot':x = torch.mul(f_embs,s_embs).sum(dim=1)elif self.mode == 'pdist':x = -self.pdist(f_embs,s_embs).squeeze()return #(DEAL模型中,三个layer分别是上面那个类的实例)
def evaluate(self, nodes,data, lambdas=(1,1,1)):node_emb = self.node_emb(torch.arange(self.node_num).to(self.device)) first_embs = node_emb[nodes[:,0]]sec_embs = node_emb[nodes[:,1]]res = self.node_layer(first_embs,sec_embs) * lambdas[0]node_emb = self.attr_emb(data)first_embs = node_emb[nodes[:,0]]sec_embs = node_emb[nodes[:,1]]res = res + self.attr_layer(first_embs,sec_embs)* lambdas[1]first_nodes = nodes[:,0]first_embs = self.attr_emb(data)[first_nodes]sec_embs = self.node_emb(torch.LongTensor(nodes[:,1]).to(self.device))res = res + self.inter_layer(first_embs,sec_embs)* lambdas[2]return res
2.5 其他
- 利用子图结构
- WLNM:将所有子图切成相同大小输入全连接神经网络
- SEAL7:学习启发式方法(利用子图、浅嵌入和特征)
3. 链路预测工作分类和应用
- 将链路预测任务作为无监督图表征学习的训练任务(可能说是自监督学习任务更合适)(在原论文中,是在baseline中用到了有监督图表征学习方法HAN,用链路预测来作为无监督训练的任务):(2022 SDM) Structure-Enhanced Heterogeneous Graph Contrastive Learning
- inductive场景可用的模型
- G2G4:将节点特征表征到高斯分布上,用节点邻居跳数来做ranking loss
- DEAL6:将节点的特征信息和结构信息分别表征,在训练时用对比学习损失函数实现匹配,在测试时仅需新节点的特征信息就能实现链路预测
4. 正文及脚注中未提及的其他参考资料
- 链路预测 - 集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织:这篇主要讲的是传统的链路预测工作,这里面的相关内容我还没有补完
5. 待更新(flag)
- GIN
- GAT
- (2017 IJCAI) Link Prediction with Spatial and Temporal Consistency in Dynamic Networks
- (2020 AAAI) Temporal Network Embedding with High-Order Nonlinear Information
- (2019 ICDM) Social trust network embedding
The Link-Prediction Problem for Social Networks
可参考的笔记博文:#Paper Reading# The Link Prediction Problem for Social Networks_John159151的博客-CSDN博客 看了一下这篇笔记,大致来说,这篇文章构建了一个无特征的学术合作网络,基于上一时间点(年份)预测下一时间点的新边。使用经典的节点相似性计算方法。
(表格画得跟统计学论文一样啊) ↩︎(2019 Nature Communications) Network-based prediction of protein interactions ↩︎
(2019 KDD) Representation Learning for Attributed Multiplex Heterogeneous Network ↩︎
(2016 NIPS) Variational Graph Auto-Encoders ↩︎ ↩︎
(2018 ICLR) Deep Gaussian Embedding of Graphs: Unsupervised Inductive Learning via Ranking
我写过笔记:Re37:读论文 G2G Graph2Gauss Deep Gaussian Embedding of Graphs: Unsupervised Inductive Learning via Rank ↩︎(2020 IJCAI) Re9:读论文 DEAL Inductive Link Prediction for Nodes Having Only Attribute Information ↩︎ ↩︎
(2018 NIPS) Link prediction based on graph neural networks
我参考了如下资料:
①论文分享|基于GNN的链路预测 - 知乎:这篇写得挺抽象的,不作推荐 ↩︎
图学习中的链路预测任务(持续更新ing...)相关推荐
- 深度学习中的遥感影像数据集~持续更新
收集网络上公开的遥感数据集,欢迎补充 以下数据集均为网上开源数据集,若有遗误或不慎涉及侵权,烦请评论或留言联系 目前本项目共整理 场景分类数据集27个(整理完结): 目标检测数据集31+个(整理完结) ...
- 深度学习中的问题汇总(持续更新...)
2018.10.24 1.scipy.misc module has no attribute imread image = misc.imread(filename) AttributeError: ...
- python 学习中遇到的问题(持续更新中)
1.定义一个一维数组,然后利用.T进行转置,利用.T[2]求转置后的数组的第二行. import numpy as npA=np.array([1,2,3,4,5,6,7,8,9,10,11,12]) ...
- 机器学习 - [源码实现决策树小专题]决策树学习中如何进行分类预测
机器学习 - 决策树学习中如何进行分类预测 李俊才 的 CSDN 博客 邮箱 :291148484@163.com CSDN 主页:https://blog.csdn.net/qq_28550263? ...
- 【我的OpenGL学习进阶之旅】【持续更新】关于学习OpenGL的一些资料
目录 一.相关书籍 OpenGL 方面 C方面 NDK 线性代数 二.相关博客 2.0 一些比较官方的链接 2.1 OpenGL着色器语言相关 2.2 [[yfan]](https://segment ...
- 深度学习相关阅读论文汇总(持续更新)
深度学习相关阅读论文汇总(持续更新) 1 Long-Term Temporal Convolutions(LTC)for Action Recognition IEEE Transactions on ...
- 重拾CCNA,学习笔记持续更新ing......(4)
重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...
- js中text方法是啥意识_一盏茶的时间,快速捕获JS中常用的方法(细心整理,持续更新ing)...
不知不觉上班一周辽-趁着大好周末,小编挣扎着从床上爬起来,决定对前端日常编程中常用到的一些方法做一个系统的整合. 有些人或许会觉得忘了百度就完事儿,no no no!这事儿小编真的亲践过好多次,百度一 ...
- 常用数据集整理(持续更新ing)
常用数据集整理(持续更新ing) 在做实验过程中经常用到的数据集整理一下,按照学习过程中遇到的数据集的先后顺序进行整理,希望能对科研有所帮助.本博文将随着学习过程持续性更新,有其他常用数据集的 ...
最新文章
- burp 调试_Burp插件分享及编译简学Wildcard+
- POJ-3414 Pots BFS+记忆路径
- python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...
- ELASTIC的备份与恢复
- Linux下编译Jsoncpp
- 5 个鲜为人知 GNU 调试器(GDB)技巧 | Linux 中国
- VMware虚拟机与Windows文件共享
- c语言编写界面图形表示,「分享」C语言如何编写图形界面
- 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导
- java中对象的克隆
- 破解安装IAR编辑器
- Python爬取最爱的电影并下载到本地(附源码)
- AD637 有效值检测
- android 通知栏图标变白色方格
- 一键清空朋友圈软件_微信清理朋友圈app下载-微信清理朋友圈下载v1.8.0 安卓版-西西软件下载...
- stanza和DBPedia的安装与使用
- 什么东西改善睡眠质量,辅助睡眠好物推荐
- 单片机控制74hc595驱动4个单数码管计数显示
- [Android]如何做一个崩溃率少于千分之三噶应用app(31)-组件化网络请求
- 上传图片方向不对 php,如何解决IOS中html5上传图片方向问题?
热门文章
- caffe不支持relu6_caffe cudaSuccess (4 vs. 0) unspecified launch failure
- 私域引流工具及场景落地方法
- 南京大学考研招生目录、分数线、参考书
- 织梦模板下载:环保设计公司织梦模板
- 51nod-2534 最小旅行路线
- 2019智能手表推荐_2020年买什么智能手表合适?
- 【Proteus仿真】51单片机+74HC164驱动两个四位数码管
- SSM实现物流管理系统快递
- 计算机应用基础上册周测7,计算机应用基础(第3版)周南岳(win7+office10)期末复习及答案-20210614221003.docx-原创力文档...
- 小寒也会写程序(五)