Word2Vec算法是NLP领域著名的算法之一,可以从文本数据中学习到单词的向量表示,并作为其他NLP算法的输入。
我们使用Spark On Angel实现了基于负采样优化的SkipGram模型,能够处理高达10亿 * 1000维的超大模型。U、V矩阵存储在Angel的PS上,spark executor根据batch数据拉取对应节点以及负采样节点做梯度计算以及更新计算,最后将需要更新的结果push回PS。
input: hdfs路径,随机游走出来的sentences,word以空白符或者逗号分隔,以数字id为例(但输入数据可以为非数字字符串,后续采用组件自带的重编码功能)比如:
0 1 3 5 9
2 1 5 1 7
3 1 4 2 8
3 2 5 1 3
4 1 2 9 4
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: 训练时选择是否保存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向量做初始化用做增量训练,数据格式默认为: 节点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)
nodeTypePath: 跑异构skip-gram需要的节点类型路径(如metapath游走的结果), 数据格式为: 节点id 分隔符 类型id
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.Word2vecExample \
../lib/spark-on-angel-examples-3.2.0.jar \
input:$input output:$output embedding:32 negative:5 epoch:10 stepSize:0.01 batchSize:50 psPartitionNum:10 remapping:false window:5
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。