图上deepwalk与tensorflo
图上deepwalk算法理论与tensorflowkeras实战,图算法之瑞士军刀篇(二)
书接上文,在deepwalk算法理论与实践,图算法之瑞士军刀篇(一)中,我们讲了GraphEmbeding的鼻祖类算法deepwalk,知道deepwalk算法也遵循了图游走算法的基本架构Walk+Skip-GramLoss架构,并且deepwalk算法其中用的walk算法是随机游走(randomwalk)算法。
在深入浅出理解word2vec模型(理论与源码分析)文章中我们再三强调了输入word2vec的序列数据的重要性,并提供了构建序列的多种方法与技巧。对于图游走算法也是如此,我们采用不同的游走算法久可以得到完全不同的效果,例如node2vec算法就提出了一种带倾向游走(局部探索与全局探索的侧重与融合)进行图上节点序列采样的方法,而metapath和metapath++算法,则又提供了异构图上可以定制路径节点类型的元路径(metapath)的节点采样算法。不同的游走采样方法则构成了不同的图游走算法。
游走采样算法、负样本数据归一化以及不同采样算法路径融合的不同构成了近些年图上游走算法得到graphembeding的主要创新点和优化点。基于"万变不离其宗"的思想,这里暂时我们均不在展开。
注意我们这里要说明的一点是:word2vec算法,可以有无监督的版本,也有有监督的版本。如果单纯以外界是否显式的输入模型样本标签的话,在文章中,样本不显式带有标签,输入模型的只有正样本(center,context)pair对,可以把归结为无监督模型。而本文要介绍的算法,在使用tf.keras.preprocessing.sequence.skipgrams采样的时候带有了标签,可以把归结为有监督模型。
这里需要注意:两篇文章代码里的方法,因为负样本采样均是全局采样,而不是排除正样本之外的负采样,所以均是有一定概率的可能采样到正样本的,也就是说有得样本明明是正样本,被负样本采样算法采到了标记了label0。
由于deepwalk算法理论与实践,图算法之瑞士军刀篇(一)文章中,整个算法流程是基于tensorflow1.x系列开发的,而我一直很为推崇tensorflow2.0系列的keras接口,所以本文将主要说明deepwalk与tensorflow2.0的keras实战过程,别的没啥不同,
转载请注明:http://www.abuoumao.com/hyls/9122.html