论文|node2vec算法原理代码实战和在微信朋友圈的应用

搜索与推荐Wiki 搜索与推荐Wiki     2022-12-05     396

关键词:

1 概述

Node2vec是2016年斯坦福教授 Jure Leskovec、Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653.pdf。

其本质上是对Deepwalk的延伸,也是属于图神经网络种随机游走模型一类。不了解Deepwalk的可以看上一篇文章:论文|DeepWalk的算法原理、代码实现和应用说明

Node2vec在DeepWalk的基础上提出了更加合理的图特征学习方法,提出了用于网络中可伸缩特征学习的半监督算法,使用SGD优化一个自定义的基于图的目标函数,该方法可以最大化的在D维特征空间保留节点的网络领域信息;在随机游走的基础上设计了一种二阶随机游走的过程,相当于对DeepWalk算法的一种扩展,它保留了邻居节点的图特征。

2 算法原理

2.1 学习框架

论文中将网络中的特征学习问题看作是一个极大似然优化问题,设 G = ( V , E ) G=(V,E) G=(V,E)为给定的网络, f : V ⇒ R d f: V \\Rightarrow \\mathbbR^d f:VRd 为节点到特征表征的映射函数,我们的目标是学习一个后续节点的预测任务,这里的 d d d 表示的是节点的表征向量维度, f f f 是一个 ∣ V ∣ ∗ d |V| * d Vd 的矩阵,同时为每个源节点 u ∈ V u \\in V uV,定义 N s ( u ) ⊂ V N_s(u) \\subset V Ns(u)V 的网络邻居节点的社区抽样策略。

节点的表征学习目标函数为最大化节点 u u u 的网络观测邻域 N s ( u ) N_s(u) Ns(u)
m a x   f ∑ u ∈ V   l o g   P r ( N s ( u ) ∣ f ( u ) ) max \\, f \\sum u \\in V \\, log \\, Pr(N_s(u)|f(u)) maxfuVlogPr(Ns(u)f(u))
但是基于上面的目标函数进行优化,是比较困难的,因此作者做了两点假设:

  • 条件独立性假设:即假设结点间相互独立,简单来说就是,对于某一个源结点,其采用到的邻居结点是独立的,采用其中一个邻居结点不会对其他邻居结点造成影响
    Pr ⁡ ( N S ( u ) ∣ f ( u ) ) = ∏ n i ∈ N S ( u ) Pr ⁡ ( n i ∣ f ( u ) ) \\operatornamePr\\left(N_S(u) | f(u)\\right)=\\prod_n_i \\in N_S(u) \\operatornamePr\\left(n_i | f(u)\\right) Pr(NS(u)f(u))=niNS(u)Pr(nif(u))

  • 特征空间对称假设:源结点和邻居结点的特征空间有一个对称性影响。简单来说就是,一个源结点和其某一个邻居结点有关系,那么对于这个邻居结点来说,这个源结点也是其邻居结点,影响是相互的
    Pr ⁡ ( n i ∣ f ( u ) ) = exp ⁡ ( f ( n i ) ⋅ f ( u ) ) ∑ v ∈ V exp ⁡ ( f ( v ) ⋅ f ( u ) ) \\operatornamePr\\left(n_i | f(u)\\right)=\\frac\\exp \\left(f\\left(n_i\\right) \\cdot f(u)\\right)\\sum_v \\in V \\exp (f(v) \\cdot f(u)) Pr(nif(u))=vVexp(f(v)f(u))exp(f(ni)f(u))

根据以上两个假设,最终目标函数 f f f 可以优化为以下形式:
max ⁡ f ∑ u ∈ V [ − log ⁡ Z u + ∑ n i ∈ N S ( u ) f ( n i ) ⋅ f ( u ) ] \\max f \\sumu \\in V\\left[-\\log Z_u+\\sum_n_i \\in N_S(u) f\\left(n_i\\right) \\cdot f(u)\\right] maxfuVlogZu+niNS(u)f(ni)f(u)
由于归一化因子 Z u = ∑ v ∈ V exp ⁡ ( f ( u ) ⋅ f ( v ) ) Z_u=\\sum_v \\in V \\exp (f(u) \\cdot f(v)) Zu=vVexp(f(u)f(v)),对于大型网络来说,计算成本很高,所以采用负采样技术进行优化,在定义特征函数 f f f 模型参数上,采用随机梯度上升法对公式最终的目标函数进行优化。

2.2 搜索策略

可以将采样源节点邻域问题视为一种网络局部搜索问题,所熟知的无非就是广度优先遍历(BFS)和深度优先遍历(DFS),广度优先更容易采样邻居节点,从而获得每个节点邻居的微观视图,这更容易表示结构的相似性,比如限制一个 k = 3 k=3 k=3 邻居域,节点 u u u 的BFS就会对 s 1 , s 2 , s 3 s1,s2,s3 s1,s2,s3 采样,广度优先遍历采样邻居节点往往重复对此采样,这有利于减少偏差。对深度优先遍历来说,它尽可能深的遍历网络,采样节点更准确的反映了邻居节点的宏观情况,这更容易表示内容相似性,即验证同质性假设,而 u u u 使用DFS就会对 s 4 , s 5 , s 6 s4,s5,s6 s4,s5,s6 进行采样。

2.3 Node2vec

a)随机游走策略

作者根据BFS和DFS的思想设计了一种灵活的带有偏重的随机游走策略,使BFS和DFS能够平滑地融入此策略中。

给定一个源节点 u u u,要进行步长为 l l l 的随机游走, c i c_i ci 表示游走序列中第 i i i 个节点 c 0 = u c_0=u c0=u,节点 c i c_i ci 由以下分布产生:
p ( c i = x ∣ c i − 1 = v ) = π v x Z , i f ( v , x ) ∈ E 0 , o t h e r w i s e p(c_i = x|c_i-1=v) = \\left\\\\beginmatrix \\frac \\pi_vx Z , if(v,x) \\in E\\\\ 0, otherwise \\endmatrix\\right. p(ci=xci1=v)=Zπvx,if(v,x)E0,otherwise
其中:

  • π v x \\pi_vx πvx 表示从节点 v v v 到 节点 x x x 的转移概率
  • Z Z Z 为归一化常量

定义由参数 p p p 和参数 q q q 引导的二阶随机游走如下:

如图假设随机游走序列由节点 t t t 经过了边 ( t , v ) (t,v) (t,v),现在要决定节点 v v v 的下一步游走方向,所以需要评估出边 ( v , x ) (v,x) (v,x) 上的转移概率 π v x \\pi_vx πvx论文|sdne的算法原理代码实现和在阿里凑单场景中的应用说明

1.概述SDNE(StructuralDeepNetworkEmbedding)算法是发表在KDD-2016上的一篇文章,论文的下载地址为:https://www.kdd.org/kdd2016/papers/files/rfp0191-wangAemb.pdfSDNE主要也是用来构建nodeembedding的,和之前介绍的n 查看详情

论文|line算法原理代码实战和应用

1概述LINE是2015年微软发表的一篇论文,其全称为:Large-scaleInformationNetworkEmbedding。论文下载地址:https://arxiv.org/pdf/1503.03578.pdfLINE是一种基于graph产生embedding的方法,它可以适用于任何类型的graph,如无向图、有... 查看详情

机器学习实战应用案例100篇(二十三)-粒子群算法从原理到实战应用案例(代码片段)

...群算法是由Kennedy和Eberhart在1995年提出的。正如在最初的论文中提到的, 查看详情

论文|line算法原理代码实战和应用

1概述LINE是2015年微软发表的一篇论文,其全称为:Large-scaleInformationNetworkEmbedding。论文下载地址:https://arxiv.org/pdf/1503.03578.pdfLINE是一种基于graph产生embedding的方法,它可以适用于任何类型的graph,如无向图、有... 查看详情

论文|line算法原理代码实战和应用

1概述LINE是2015年微软发表的一篇论文,其全称为:Large-scaleInformationNetworkEmbedding。论文下载地址:https://arxiv.org/pdf/1503.03578.pdfLINE是一种基于graph产生embedding的方法,它可以适用于任何类型的graph,如无向图、有... 查看详情

精读论文node2vec

 摘要:文章首先指出,现存的特征学习方法还不能足够的捕捉出显示网络中被观测到的联通模式的的多样性作者同时认为在搜索相邻节点时增加灵活性时提升特征学习算法的关键主要贡献:我们定义了节点网络的表述,并且... 查看详情

论文|deepwalk的算法原理代码实现和应用说明(代码片段)

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

论文|doc2vec的算法原理代码实现及应用启发(代码片段)

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

机器学习实战应用案例100篇-粒子群优化算法(pso)从原理到实战应用案例(附代码)(代码片段)

...群算法是由Kennedy和Eberhart在1995年提出的。正如在最初的论文中提到的,社会生物学家认为一群鱼或一群鸟在一个群体中移动,可以从所有其他成员的经验中获益。换句话说,当一只鸟在空中随机寻找食物时,鸟群中的所有鸟都... 查看详情

3d,从无知到无畏

...便大家更好的阅读!写在前面本专栏分三部分展开,经典论文、算法原理以及实战为王。经典论文围绕3D领域的开山之作、精彩论文以及最新进展进行解读;算法原理是对3D点云数据处理的相关内容进行展开论述;实战为王,PCL,O... 查看详情

论文阅读|node2vec:scalablefeaturelearningfornetworks

论文阅读|node2vec:ScalableFeatureLearningforNetworks文章目录论文阅读|node2vec:ScalableFeatureLearningforNetworksAbstractIntroductionFeatureLearningFrameworkClassicsearchstrategiesnode2vec参考资料AbstractNode2vec:一种用于 查看详情

论文|deepwalk的算法原理代码实现和应用说明(代码片段)

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

一文速学-gbdt模型算法原理以及实现+python项目实战(代码片段)

...策树GBDT算法模型上面来,GBDT模型衍生的模型在其他论文研究以及数学建模比赛中十分常见,例如XGBoost,LighGBM,catboost。其实将这些算法重要的点拿出来就更容易理解了,主要是五个方向的变动改进:算法差异... 查看详情

论文|doc2vec的算法原理代码实现及应用启发(代码片段)

万物皆可Embedding系列会结合论文和实践经验进行介绍,前期主要集中在论文中,后期会加入实践经验和案例,目前已更新:万物皆可Vector之语言模型:从N-Gram到NNLM、RNNLM万物皆可Vector之Word2vec:2个模型、2... 查看详情

tensorflow2深度学习实战(十七):目标检测算法fasterr-cnn实战

前言:本专栏以理论与实战相结合的方式,左手看论文,右手敲代码,带你一步步吃透深度学习原理和源码,逐一攻克计算机视觉领域中的三大基本任务:图像分类、目标检测、语义分割。本专栏完整代码将在我的GiuHub仓库更新... 查看详情

tensorflow2深度学习实战(十五):目标检测算法yolov4实战(代码片段)

...言:本专栏以理论与实战相结合的方式,左手看论文,右手敲代码,带你一步步吃透深度学习原理和源码,逐一攻克计算机视觉领域中的三大基本任务:图像分类、目标检测、语义分割。本专栏完整代码将... 查看详情

微信公众平台网页开发实战--1.微信分享一个网页到朋友圈

...wxJSSDK.js文件的JSSDK环境配置中,需要更改一下配置参数,代码如下:01 jsApiList:[//其他代码略02 "onMenuShareTimelin 查看详情

swing算法介绍实现与在阿里飞猪的实战应用(代码片段)

...构比itemCF的单边结构更稳定,截止目前并没有公开的论文进行介绍和 查看详情