docs/algo/sona/line_sona.md
LINE(Large-scale Information Network Embedding)算法,是Network Embedding领域著名的算法之一,将图数据嵌入到向量空间,从达到用针对向量类型数据的机器学习算法来处理图数据的目的
LINE算法是一个网络表示学习算法,也可以认为是针对图数据的预处理算法。算法的输入是一个网络拓扑,输出每个节点的向量表示。LINE算法本身在于分别优化两个目标函数:
其中,刻画了节点之间的一阶相似性(直接连边),刻画了节点之间的二阶相似性(相似邻居)。换句话说,
更详细的细节请参考论文[1]
input: 图的边表hdfs路径,无向图,以空白符或者逗号分隔,比如不带权重的边数据如下(带权重的话第三列输入边的权重值):
0 2
2 1
3 1
3 2
4 1
output: 结果保存hdfs路径, 最终的embedding结果保存路径为 output/CP_x, 其中x代表第x轮, 结果保存的格式分隔符可通过配置项指定:
spark.hadoop.angel.line.keyvalue.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
spark.hadoop.angel.line.feature.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
saveContextEmbedding: 二阶line训练时选择是否保存context embedding,保存该embedding可用于增量训练
extraInputEmbeddingPath: 从外部加载预训练的节点input embedding向量做初始化用做增量训练,数据格式默认为: 节点id:embedding向量(向量用空格分隔,如 123:0.1 0.2 0.1),分隔符可通过配置项指定
spark.hadoop.angel.line.keyvalue.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
spark.hadoop.angel.line.feature.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
extraContextEmbeddingPath: 从外部加载预训练的节点context embedding向量做初始化用做增量训练,仅二阶line生效,数据格式默认为: 节点id:embedding向量(向量用空格分隔,如 123:0.1 0.2 0.1),分隔符可通过配置项指定
spark.hadoop.angel.line.keyvalue.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
spark.hadoop.angel.line.feature.sep=(可支持space、comma、tab、bar、colon等,默认是colon)
saveModelInterval:每隔多少个epoch保存一次模型
checkpointInterval:每隔多少个epoch写一次checkpoint
进入angel环境bin目录下
input=hdfs://my-hdfs/data
output=hdfs://my-hdfs/model
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.LINEExample \
../lib/spark-on-angel-examples-3.3.0.jar \
input:$input output:$output embedding:128 negative:5 epoch:10 stepSize:0.01 batchSize:1000 psPartitionNum:10 remapping:false order:2