FM(Factorization Machine)算法兼顾特征之间的相互作用,是一种非线性模型, 适用于电商、广告及直播等推荐场景。Designer预置了FM算法模板,便于您快速构建基于Alink框架的FM推荐模型,快速实现推荐系统并应用于上述场景。 本文为您介绍如何通过Designer预置的FM算法模板,快速构建推荐模型。
前提条件
已创建工作空间,详情请参见创建工作空间。
已将MaxCompute资源关联到工作空间,详情请参见管理工作空间。
已开通Flink全托管资源,并将Flink资源关联到工作空间。具体操作,请参见Flink全托管资源管理。
操作步骤
进入Designer页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
在工作空间页面的左侧导航栏选择 ,进入Designer页面。
构建工作流。
在可视化建模(Designer)页面,单击预置模板页签。
在预置模板页面中,单击基于Alink框架的FM推荐下的创建。
在新建工作流对话框,配置参数(可以全部使用默认参数)。
其中:工作流数据存储配置为OSS Bucket路径,用于存储工作流运行中产出的临时数据和模型。
单击确定。
您需要等待大约十秒钟,工作流可以创建成功。
在工作流列表页签,选择基于Alink框架的FM推荐工作流,单击进入工作流。
在工作流页面,创建成功的工作流模板如下图所示。
上图工作流模板提供了以下两种方式来调用Alink算法进行FM训练和预测。
方式一:使用封装好的FM训练组件和FM预测组件进行训练和预测。
FM训练组件和FM预测组件属于Alink框架的算法组件,在组件左上角使用紫色的小点进行标识。Alink框架的算法组件支持合并运行,具体的使用方法及优劣势,详情请参见高级功能:Alink组件成组执行。
方式二:使用PyAlink进行FM训练和预测。
使用自定义算法PyAlink组件通过Python代码实现和方式一相同的功能。
配置FM训练-1组件参数。
单击工作流中的FM训练-1组件。
在右侧的字段设置页签,配置参数。
参数
描述
特征列
特征数据的格式为key:value,多个特征以半角逗号(,)分隔。
标签列
仅支持DOUBLE类型。
Designer提供的FM算法仅支持LibSVM格式数据(针对其他格式数据,可以通过one-hot编码组件将其转化为LibSVM格式数据),且输入数据必须包括特征列和标签列,如下图所示。
在右侧的参数设置和执行调优页签,配置训练参数。
针对1.2亿条样本数据、130万特征数据场景,建议参考如下表格进行参数配置,其他参数使用默认值。您可以结合实际数据量级,适当地调整训练参数。
页签
参数
描述
参数设置
学习率
建议配置为0.005。如果训练发散,则适当减小该参数值。
维度
建议配置为
1,1,16
。数据块大小
如果特征数据量小于200万,则建议配置为1000000。
如果特征数据量大于200万,则无需手动配置。
执行调优
节点个数
建议配置为32。如果数据量超大,则适当增大该参数值。
单个节点内存大小,单位M
建议配置为16384 MB。
PyAlink-FM训练组件和PyAlink-FM预测组件的代码配置,具体如下所示。
PyAlink-FM训练组件代码配置。
from pyalink.alink import * def main(sources, sinks, parameter): print('start') # 算法调用方式1。 # train = HugeFmTrainBatchOp().setVectorCol('features').setLabelCol('label').linkFrom(sources[0]) # 算法调用方式2。 train = HugeFmTrainBatchOp( vectorCol='features', labelCol='label', task='binary_classification', numEpochs=10) # 从输入端口0获取训练数据,训练完的模型通过输出端口0向下传递。 sources[0].link(train).link(sinks[0]) BatchOperator.execute() print('end')
PyAlink-FM预测组件代码配置。
from pyalink.alink import * def main(sources, sinks, parameter): predictor = HugeFmPredictBatchOp().setPredictionCol("prediction_result")\ .setPredictionDetailCol("prediction_detail").setReservedCols(["label"]) output = predictor.linkFrom(sources[0], sources[1]) # 将预测结果通过第一个输出port向下游透传。 output.link(sinks[0]) BatchOperator.execute() print('predict end')
设置算法执行使用的计算资源。
单击空白画布,在右侧的工作流属性页签,选择Alink/FlinkML算法默认执行资源为Flink。
在画布中,分别单击PyAlink-FM训练和PyAlink-FM预测组件,在右侧的执行调优页签,修改以下两个参数:
选择作业的运行模式:选择Flink全托管(分布式)。
节点个数:配置为2。
在画布左上方,单击保存按钮。
单击画布上方的运行按钮,运行工作流。
任务运行完成后,右键单击工作流中的二分类评估-1组件,在快捷菜单,单击可视化分析。
基于预置模板案例的数据,Designer FM算法生成模型的AUC值约为0.92。
使用方式一生成的评估图表。
使用方式二生成的评估图表。
相关文档
关于算法组件更详细的内容介绍,请参见: