【论文笔记】A Survey on Network Embedding

A Survey on Network Embedding , TKDE 2018

本文是清华大学崔鹏老师组出的关于Network Embedding方面的综述论文,详细地介绍了该领域目前主要的方法和未来的研究方向。对于希望在该领域进行研究的同学来说非常值得阅读。

模型 基于 节点相似度 (un)directed/(un)weighted year 备注
DeepWalk 随机游走 K阶 undirected,unweighted KDD 2014
node2vec 随机游走 K阶 KDD 2016
LINE 类似随机游走 1阶+2阶 WWW 2015
GraRep K阶
N-NMF NMF 1阶+2阶
SDNE 1阶+2阶
HOPE 2016 非对称传递

Abstract

Network Embedding(NE,网络嵌入)是为网络中的节点学习得到一个低维的向量表示,并有效保留网络的结构。本文内容包括以下方面:

  • 总结了network embedding的motivation
  • 讨论经典的graph embedding算法和network embedding的关系
  • 提供关于network embedding方法系统的介绍,包括:保留网络的结构特征以及性质,带有side information的NE方法等
  • 多种评价方法
  • 数据集和软件
  • 未来方向

1 Introduction

传统的方法,我们通常将一个网络表示为一个图 G = &lt; V , E &gt; G = &lt;V,E&gt; G=<V,E> 但是大型网络中此表示方法不使用,存在以下挑战如:

  • 高计算复杂度(需要不断地遍历节点,如计算节点之间的距离)
  • 低并行化(节点之间紧耦合,相互依赖)
  • 不适用于机器学习方法(节点之间相互依赖,无法分割为独立的向量。而ML方法通常假设样本可以分割为独立的向量)

使用边来显性地表示节点之间的关系,是传统方法最大的瓶颈所在。在network embedding空间中,节点之间的关系(传统方法用边来体现),通过节点之间的embedding向量距离来表示,其中节点的拓扑和结构特征已经被编码到embedding向量中。

NE representation学习低维连续稠密向量,在保留固有信息的同时有效减少了噪声和冗余信息。

NE应用

(1)Node classification(2)Node clustering(3)Network visualization(4)Link prediction

NE目标

(1)学到的embedding空间可以重建原网络。

​ 网络中相邻节点在embedding空间距离应该小

(2)学到的embedding空间能够支持关于该网络的推断

​ 预测未见过的链接、推断节点标签

2 方法分类

根据embedding所含有的信息类型分为以下三类

(1)网络结构和性质

(2)附加的信息(如节点和边的属性)

(3)高级信息(如针对具体任务节点分类,有节点标签信息)

之间已经介绍network embedding的目标包括网络的重建和推断。传统的graph embedding主要关注网络重建

Structure and property preserving network embedding

考虑只有拓扑信息的网络,只基于网络拓扑信息学习得到network embedding。相关的工作尝试保留网络的结构信息:如节点和边、邻居结构、高阶节点邻近度、社区结构等。

除了网络的结构信息之外,网络的性质对于建模网络的演化中也不可忽视(如三角闭合性、结构平衡性质)。

Network Embedding with Side Information

除了网络的拓扑之外,一些网络还伴随着丰富的附加信息,如:节点内容和标签、节点和边的属性、异构网络中节点的类型。

主要的挑战在于如何结合并平衡拓扑和附加信息在NE中的作用。

Advanced Information Preserving Network Embedding

之前两类方法学习网络表示通常使用无监督的方式,学得的embedding是通用的,可用于各种任务。而针对不同的目标问题可以进一步优化,通常采用有监督的方式。

以网络节点分类问题为例,如果我们有网络中一些节点的标签,可以将网络结构作为输入,节点标签作为监督信息,embedding表示作为隐含中间层。这样就能得到针对节点分类这项任务的embedding。

常用方法

基于矩阵分解

NE的目标是得到低维向量空间以表示网络,这与矩阵分解方法具有相同的目标。常用的矩阵分解模型:奇异值分解(SVD)、非负矩阵分解

基于随机游走

邻居结构可以用于描述一个节点的本地结构特征。尽管邻接矩阵刻画了节点的一阶邻近度,但是稀疏、离散、高维的向量表示不便于后续的应用。在NLP领域中,Word2Vec有效地将词向量从稀疏、离散、高维的向量转变为稠密、连续、低维的向量表示,通过重建词向量的“邻居词”(上下文词)共同出现的概率得到。一些NE方法借鉴了Word2Vec的想法,而关键在于如何定义网络中的邻居(neighborhood)。

类比于Word2Vec,基于随机游走的模型在网络中进行随机游走。将节点作为语言模型中的词,将随机游走作为句子,节点邻居可以用Word2Vec中共同出现的概率来定义。

代表工作:DeepWalk(KDD 2014),Node2Vec(KDD 2016)

深度神经网络

Network embedding本质是学习一个映射函数,将原网络空间映射到低维的向量空间。如基于矩阵的方法是假设这个映射函数是线性的。然而因为网络形成过程的复杂并且非线性,线性的映射函数并不足以将原网络空间映射到嵌入空间。

作为非线性的学习模型,深度神经网络取得了很大的成功。代表性的使用深度神经网络的NE方法:SDNE,SDAE,SiNE。

深度神经网络方法非常适用于端到端的NE方法。

3 Network Embedding和Graph Embedding对比

Graph embedding(GE)的目标与network embedding的目标相似,是将一个图(graph)嵌入到低维的向量空间。传统的图嵌入方法,图是从以特征表示的数据集中构造得到的,如图像数据集。GE综述(Fu and Ma 2012)

代表性的GE方法

GE方法起初是作为降维的技术。

代表工作:Isomap,LLE,LE;需要刻画节点对之间距离,计算复杂

Isomap

  • 由数据特征之间的距离通过KNN选择连接,构造一张图以及对应的距离矩阵D。对D进行MDS得到i对应的坐标向量,保留了低维空间中节点对之间的距离

Locally linear embedding (LLE)

  • 假设每个样本和其邻居都处于一个局部线性流形空间,, 一个节点的表示可以通过它的邻居节点的表示的线性组合来近似得到

Laplacian eigenmaps (LE) 拉普拉斯特征表

  • 简单的假设两个相连的节点的表示应该相近。特别地,这里表示相近是由向量表示的欧氏距离的平方来定义。该优化问题可以类似地转化为 Laplace 矩阵的特征向量计算问题。

NE/GE区别

目标区别

Network embedding:重建原始网络+网络推断。

Graph embedding主要目标是网络的重建。

因此,graph embedding 可以视为一种特殊的Network embedding,只考虑重建网络的network embedding。而现在的研究更注重网络的inference,也是本paper接下来的重点。

假设区别

GE通常用于从特征表示的数据中构造得到的图,节点之间的相似性通过原始特征空间中定义的边的权重来编码得到;

NE通常在自然形成的网络中得到,如社交网络/生物网络,节点之间的相似性并不是显式的或直接定义,而是根据具体应用场景来定义。

4 Structure and Property Preserving Network

网络结构

邻居结构、高阶节点邻接性、网络社区

邻居结构和高阶节点邻接性

DeepWalk

DeepWalk发现节点在短的随机游走中出现的分布,与自然语言中词的分布相似。利用Skip-Gram最大化节点的邻居与节点共同出现的概率

Node2Vec

对邻居的定义更加灵活,同时用BFS和DFS对邻居节点进行采样,能够同时将在同一community中的节点、或者有相似角色的node表示成相似的embedding 。

LINE

考虑网络的一阶和二阶相似性。一阶相似性是联合概率分布,由节点对之间的相似性来度量;二阶相似性是条件概率分布,通过节点生成其上下文节点的概率来度量;

GraRep

LINE只考虑一阶和二阶,GrapRep考虑K阶(K>2)相似性。给定一个邻接矩阵 A A A ,k步概率转移矩阵可通过 $A^{k} = A…A $ 计算得到。

网络社区

M-NMF

提出了一种模块化的非负矩阵分解模型(MNMF),保留一阶和二阶节点相似性以及mesoscopic community structure。用了NMF模型保留微观结构(节点相似性),假设如果一个节点的表示与一个社区的表示相似,那么该节点很可能在这个社区中。使用了辅助的社区表示矩阵来联系节点表示和社区结构。

SDNE

深层模型。解决高非线性、结构保护和稀疏性问题。SDNE使用具有多个非线性层的深度自编码器来保留节点的邻居结构。

Cao 2017

借鉴PageRank,结合加权转移概率矩阵,可以主动构造节点的表示。捕获带权图结构和节点的非线性表示结构。

GEM-D 2017

提出一个NE框架,统一之前的算法。包括三个度量 [ h ( ⋅ ) , g ( ⋅ ) , d ( ⋅ , ⋅ ) ] [h(\cdot), g(\cdot), d(\cdot,\cdot)] [h(),g(),d(,)]。 分别为邻近度函数,非线性函数,度量h和g差异性的度量函数。

网络性质

保留网络性质的NE方法,目前主要集中在各种类型网络的网络传递以及符号网络中的结构平衡性质。

符号网络(signed graph):a signed graph is a graph in which each edge has a positive or negative sign.

Ou 2015

保留非传递属性(A和B有关系,B和C有关系但是A和C没有关系)利用投影矩阵,抽取M哈希表,得到 最终相似度可以通过其聚合得到。如果两个节点语义相似,那么至少有一个较大。

HOPE (2016)

考虑有向网络的非对称传递性。(A->B B->C 则有 A->C (而不是C->A))。为了度量这种高阶相似性,HOPE总结了4种度量方法,将原始SVD转变为通用的SVD问题,时间复杂度降低,使其方案具有可扩展性。

SiNE(2017)

符号网络embedding,考虑正边和负边。结构平衡理论表明符号网络中的用户与朋友的距离比敌人更近(相似度更高)。给定一个三元组 ( v i , v j , v k ) (v_i, v_j, v_k) (vi,vj,vk),其中 e i j =

### 无监督属性多路网络嵌入的研究与实现 #### 方法概述 无监督属性多路网络嵌入旨在通过学习节点表示来捕捉复杂网络中的拓扑结构、节点属性以及不同类型的边关系。Han等人提出的动态网络嵌入方法在网络演化过程中引入部分监控机制,从而有效处理时间依赖性和稀疏观测问题[^1]。这种方法可以扩展至多路网络场景,在其中每种类型的边对应于一种特定的关系。 对于具有多种类型边和节点特征的网络,Zhang等人开发了一种基于自注意力机制的图神经网络Hyper-SAGNN,该模型能够高效地应用于超图数据结构上[^2]。尽管其主要目标并非针对传统意义上的多层或多路网络,但它提供了一个强大的框架用于建模复杂的高阶交互模式。 另外,Burgess等人的工作展示了如何利用预训练二维扩散模型生成三维视角下的图像合成效果[^3]。虽然这项技术专注于视觉领域内的应用,但从概念上看,它也启发我们在设计新的网络嵌入算法时考虑更多维度的信息融合策略——即不仅限于单一层面或者静态视图下的一致性约束条件。 #### 实现建议 以下是几种可能的技术路线及其对应的工具包推荐: 1. **DeepWalk/Node2Vec 类似随机游走的方法** 可以尝试将标准版本调整成适应多重关联情况的形式。例如分别构建不同类型连接上的转移概率矩阵并交替采样路径序列作为输入给Word2vec架构训练得到最终向量表达形式。 2. **Graph Autoencoder (GAE) 或 Variational Graph Autoencoders(VGAE)** 使用TensorFlow/Keras API轻松搭建端到端解决方案。特别适合当存在大量未标记样本而希望充分利用潜在低维流形特性的情况下采用此类变分推理思路来进行优化求解过程。 3. **Heterogeneous Information Network Embedding** 如果您的应用场景涉及到异质实体间相互作用,则可参考MetaPath-based HIN embedding techniques like PTE(Microsoft Research), HERec(IBM Watson Lab). 这些方案通常会定义一些元路径规则指导局部邻域探索方向进而增强语义表征能力. 4. **Self-supervised Learning Frameworks on Attributed Multiplex Networks** 借助对比损失函数鼓励正负样本区分度提升的同时保持全局一致性假设成立的前提下完成目标任务导向型特征提取流程设置. 下面给出一段简单的Python伪代码展示如何初始化一个基本版的AutoEncoder类实例: ```python import tensorflow as tf from tensorflow.keras.layers import Input,Dense class SimpleAutoEncoder(tf.Module): def __init__(self,input_dim,hidden_units=64,output_activation='linear'): super(SimpleAutoEncoder,self).__init__() self.encoder=Dense(hidden_units,'relu')(Input(shape=(input_dim))) self.decoder=Dense(input_dim,output_activation)(self.encoder) model=SimpleAutoEncoder(784) print(model.summary()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值