docs/algo/sona/eges_sona.md
EGES(enhanced graph embedding with side information)是一种不仅利用图结构信息,并且利用节点的副信息(side information)共同学习出节点的embedding的图表示学习算法。具体来说,节点的副信息包括若干离散属性,EGES算法通过学习某个节点本身以及其对应各种离散属性的embedding,并同时自适应学习出各embedding的权值,最终将各embedding的加权平均结果作为该节点最终的embedding。相比只基于图结构的图表示学习算法,EGES能够获得更优表示学习性能。另外,对于新出现的节点,其与原图中的任意节点均不存在连边,即“cold start”问题。在这种情况下,EGES可以对该节点的各个离散属性的embedding取平均作为该节点的embedding,从而一定程度上缓解cold start问题。更多细节可参考论文EGES。
我们基于Spark on Angel框架实现了EGES算法,能够处理大规模工业级数据。所有节点与副信息的embedding以及对应权值存储在Angel PSs上。在每次epoch中,各个Spark executor根据每个batch数据从PS上拉取对应正样本节点、副信息的输入embedding与对应权值以及负样本节点的输出embedding并计算embedding与权值的梯度,再将梯度上推到PSs上对对应节点和副信息的embedding与权值进行更新。
进入angel环境bin目录下
input=hdfs://my-hdfs/data
output=hdfs://my-hdfs/EGES_output
matrixOutput=hdfs://my-hdfs/EGES_matrixOutput
source ./spark-on-angel-env.sh
$SPARK_HOME/bin/spark-submit \
--master yarn-cluster\
--conf spark.ps.instances=1 \
--conf spark.ps.cores=1 \
--conf spark.ps.jars=$SONA_ANGEL_JARS \
--conf spark.ps.memory=10g \
--jars $SONA_SPARK_JARS \
--driver-memory 5g \
--num-executors 1 \
--executor-cores 4 \
--executor-memory 10g \
--class com.tencent.angel.spark.examples.cluster.EGESExample \
../lib/spark-on-angel-examples-3.1.0.jar \
input:$input output:$output matrixOutput:$matrixOutput weightedSI:true numWeightsSI:3 embeddingDim:32 numNegSamples:5 epochNum:10 stepSize:0.01 decayRate:0.5 batchSize:1000 dataPartitionNum:12 psPartitionNum:10 needRemapping:false