对于网络科学而言,世间万物都可以抽象成点,而事物之间的关系都可以抽象成边,并根据不同的应用场景,生成不同的网络,因此整个世界都可以用一个巨大的复杂网络来代表。常用的图有社交关系网络、商品网络、知识图谱等。
Graph Embedding 是一种将复杂网络投影到低维空间的机器学习技术,典型的做法是将网络中的节点做向量化表达,使节点间的向量相似度接近原始节点间在网络结构、近邻关系、Meta信息等多维度上的相似性。
Graph Embedding的基本做法是,对graph进行采样(Sampling),采出来的序构建模型(Embedding)。一个典型的方法是将语言模型和无监督学习从单词序列扩展到图结构上,将截断游走的序列当成句子进行学习,之后采用word2vec中Skip-Gram模型进行训练,得到每个节点的embedding向量。
在电商场景中,用户对商品每天产生海量的行为(浏览,收藏,购买……)。用户对商品的行为序列可以构建成 Graph 的形式,然后针对每个节点进行随机游走,生成一些候选序列,再去做 Embedding 学习,统一成同一维度的向量表示。该向量被直接用在 Item-CF 中商品相似度的计算中,相比经典 Item-CF 以共同点击次数来衡量商品相似度的做法,该算法不需要两个商品被同时点击过也能计算出商品间的相似度。
Graph定义:G = (V,E,W),V = vertex (顶点),E = edge(边) ,W = weight(边的权重)
在电商场景中:节点:商品,边:商品间共现关系,权重:共现次数、时间。
可以使用传统Item-CF的方式产出图的原始数据,然后构建图。
Algorithm 1 Weigted Walk(G,n,Walks)
Input: Graph G(V,E,W), Step n
Output: walk
Initialization: walk to empty
For each vi ∈ V do
Append vi to walk
For j=1...n do
vj=GetNeighbor(G,vi)
Append vj to walk
Return walk
Algorithm 2 GetNeighbor(G,vi)
Input: Graph G(V,E,W), Node vi
Output: next node vj
vj=WeightedSample(vi,w)
https://snap.stanford.edu/node2vec/
node2vec on spark
https://github.com/aditya-grover/node2vec/tree/master/node2vec_spark
https://iamsiva11.github.io/graph-embeddings-2017-part1/
https://mp.weixin.qq.com/s/MBVac45WpZy4c208zF3Ang
https://yq.aliyun.com/articles/414733