《DeepWalk: Online Learning of Social Representations》笔记

废话少说,看图。就是把一个图的节点转换成二维坐标,保持坐标相近的点,在原始的图中关系也比较紧密(指边的连接关系)。我把这玩意称作Graph2Vec,差不多是这个意思吧。

《DeepWalk: Online Learning of Social Representations》笔记_第1张图片
/*Karate Graph好像是个经典的小数据集吧。一个空手道选手的关系图。*/

转成vector之后,再送到普通的分类器(比如LR)来处理一下即可。论文里是用来处理 multi-label network classification tasks,所以看到后面数据集和实验不要觉得很奇怪,怎么突然从unsupervised变成supervised了。只要数据全量转vector,然后用部分有label的样本训练分类器,最后预测其他无标签的样本即可。

http://leitang.net/social_dimension.html 数据集的定义

“network” is a symmetric sparse matrix representing the interaction between users, and “groups” are the groups subscribed by users。

具体算法

用random walk蒙特卡罗采样(相当于生成nlp里面的corpus),然后送到word2vec去训练,done。是的,算法介绍完了,就是这么简单。

所以代码也就这样

    walks = graph.build_deepwalk_corpus(G, num_paths=args.number_walks,
                                        path_length=args.walk_length, alpha=0, rand=random.Random(args.seed))
    print("Training...")
    model = Word2Vec(walks, size=args.representation_size, window=args.window_size, min_count=0, workers=args.workers)

word2vec如果你已经比较了解,那就简单了。我之前是看的tensorflow的tutorial,挺不错的。

论文里提到的hierarchical softmax没啥必要吧,其实是word2vec的东西,2015年后来也换成negative sampling了 。 这篇论文。

We also describe a simple alternative to the hierarchical softmax called negative sampling

作者的interests有nlp,用word2vec不奇怪吧。

虽然算法挺简单,但是思路还是可以的。

流程图

《DeepWalk: Online Learning of Social Representations》笔记_第2张图片

第5步for循环保证每个节点都有被采样到。每次第6步RandomWalk的时候节点是可以重复访问的。然后一共把这个图遍历个γ轮。所以,节点的相似性,其实就是采样了图里面的多度关系(一次RandomWalk采样“considers a set of short truncated random walks its own corpus”)。

附录

  • 作者主页 http://www.perozzi.net/
  • 论文 http://www.perozzi.net/publications/14_kdd_deepwalk.pdf
  • 代码 https://github.com/phanein/deepwalk

你可能感兴趣的:(机器学习)