基于Alink框架的FM推荐

FM(Factorization Machine)算法兼顾特征之间的相互作用,是一种非线性模型, 适用于电商、广告及直播等推荐场景。Designer预置了FM算法模板,便于您快速构建基于Alink框架的FM推荐模型,快速实现推荐系统并应用于上述场景。 本文为您介绍如何通过Designer预置的FM算法模板,快速构建推荐模型。

前提条件

操作步骤

  1. 进入Designer页面。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。

    3. 在工作空间页面的左侧导航栏选择模型开发与训练 > 可视化建模(Designer),进入Designer页面。

  2. 构建工作流。

    1. 可视化建模(Designer)页面,单击预置模板页签。

    2. 在预置模板页面中,单击基于Alink框架的FM推荐下的创建

    3. 新建工作流对话框,配置参数(可以全部使用默认参数)。

      其中:工作流数据存储配置为OSS Bucket路径,用于存储工作流运行中产出的临时数据和模型。

    4. 单击确定

      您需要等待大约十秒钟,工作流可以创建成功。

    5. 在工作流列表页签,选择基于Alink框架的FM推荐工作流,单击进入工作流

      在工作流页面,创建成功的工作流模板如下图所示。image.png

      上图工作流模板提供了以下两种方式来调用Alink算法进行FM训练和预测。

      • 方式一:使用封装好的FM训练组件和FM预测组件进行训练和预测。

        FM训练组件和FM预测组件属于Alink框架的算法组件,在组件左上角使用紫色的小点进行标识。Alink框架的算法组件支持合并运行,具体的使用方法及优劣势,详情请参见高级功能:Alink组件成组执行

      • 方式二:使用PyAlink进行FM训练和预测。

        使用自定义算法PyAlink组件通过Python代码实现和方式一相同的功能。

  3. 配置FM训练-1组件参数。

    1. 单击工作流中的FM训练-1组件。

    2. 在右侧的字段设置页签,配置参数。

      参数

      描述

      特征列

      特征数据的格式为key:value,多个特征以半角逗号(,)分隔。

      标签列

      仅支持DOUBLE类型。

      Designer提供的FM算法仅支持LibSVM格式数据(针对其他格式数据,可以通过one-hot编码组件将其转化为LibSVM格式数据),且输入数据必须包括特征列和标签列,如下图所示。image.png

    3. 在右侧的参数设置执行调优页签,配置训练参数。

      针对1.2亿条样本数据、130万特征数据场景,建议参考如下表格进行参数配置,其他参数使用默认值。您可以结合实际数据量级,适当地调整训练参数。

      页签

      参数

      描述

      参数设置

      学习率

      建议配置为0.005。如果训练发散,则适当减小该参数值。

      维度

      建议配置为1,1,16

      数据块大小

      • 如果特征数据量小于200万,则建议配置为1000000。

      • 如果特征数据量大于200万,则无需手动配置。

      执行调优

      节点个数

      建议配置为32。如果数据量超大,则适当增大该参数值。

      单个节点内存大小,单位M

      建议配置为16384 MB。

  4. PyAlink-FM训练组件和PyAlink-FM预测组件的代码配置,具体如下所示。

    • PyAlink-FM训练组件代码配置。image.png

      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预测组件代码配置。image.png

      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')
                                  
  5. 设置算法执行使用的计算资源。

    1. 单击空白画布,在右侧的工作流属性页签,选择Alink/FlinkML算法默认执行资源Flink

    2. 在画布中,分别单击PyAlink-FM训练PyAlink-FM预测组件,在右侧的执行调优页签,修改以下两个参数:

      1. 选择作业的运行模式:选择Flink全托管(分布式)

      2. 节点个数:配置为2。

    3. 在画布左上方,单击保存按钮。

  6. 单击画布上方的运行按钮image.png,运行工作流。

  7. 任务运行完成后,右键单击工作流中的二分类评估-1组件,在快捷菜单,单击可视化分析

    基于预置模板案例的数据,Designer FM算法生成模型的AUC值约为0.92。

    • 使用方式一生成的评估图表。评估图表

    • 使用方式二生成的评估图表。评估图表

相关文档

关于算法组件更详细的内容介绍,请参见: