本文为您介绍PAI-Studio提供的推荐算法,包括协同过滤etrec、FM训练、FM预测及ALS矩阵分解。

协同过滤etrec

etrec是基于item的协同过滤算法,PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 用户列名 user列名。
    物品列名 item列名。
    参数设置 相似度类型 支持wbcosineasymcosinejaccard类型。
    TopN 输出结果中最多保留的相似物品数量。
    计算行为 如果同一user出现相同的item,则payload进行的计算行为。系统支持addmulminmax行为。
    最小物品值 如果某useritem数小于该值,则忽略该user的行为。
    最大物品值 如果某useritem数大于该值,则忽略该user的行为。
    平滑因子 相似度类型asymcosine时,该参数生效。
    权重系数 相似度类型asymcosine时,该参数生效。
  • PAI命令方式
    PAI -name pai_etrec
        -project algo_public
        -DsimilarityType="wbcosine"
        -Dweight="1"
        -DminUserBehavior="2"
        -Dlifecycle="28"
        -DtopN="2000"
        -Dalpha="0.5"
        -DoutputTableName="etrec_test_result"
        -DmaxUserBehavior="500"
        -DinputTableName="etrec_test_input"
        -Doperator="add"
        -DuserColName="user"
        -DitemColName="item"
    参数 是否必选 描述 默认值
    inputTableName 输入表的名称。
    userColName 输入表中的user列名。
    itemColName 输入表中的item列名。
    inputTablePartitions 输入表中,参与训练的分区名称。 全表
    outputTableName 输出表的名称。
    outputTablePartition 输出表的Partition。
    similarityType 相似度类型。取值范围为{wbcosine,asymcosine,jaccard} wbcosine
    topN 相似度最大的N个item。取值范围为1~10000。 2000
    minUserBehavior 最小用户行为。 2
    maxUserBehavior 最大用户行为。 500
    itemDelimiter 输出表中item之间的分隔符。 空格
    kvDelimiter 输出表中key与value之间的分隔符。 英文冒号(:)
    alpha Asymcosine的平滑因子。 0.5
    weight Asymcosine的权重指数。 1.0
    operator 如果同一user出现相同的item,则payload进行的计算行为。取值范围为{add,mul,min,max} add
    lifecycle 输出结果表的生命周期。 1
    coreNum 核心数。 默认自动分配
    memSizePerCore 单个核心的内存,单位为MB。 默认自动分配

协同过滤etrec示例

  1. 使用SQL语句,生成训练数据。
    drop table if exists etrec_test_input;
    create table etrec_test_input
    as
    select
        *
    from
    (
        select
            cast(0 as string) as user,
            cast(0 as string) as item
        from dual
        union all
            select
                cast(0 as string) as user,
                cast(1 as string) as item
            from dual
        union all
            select
                cast(1 as string) as user,
                cast(0 as string) as item
            from dual
        union all
            select
                cast(1 as string) as user,
                cast(1 as string) as item
            from dual
    ) a;
    生成的训练数据表etrec_test_input如下。
    user item
    0 0
    0 1
    1 0
    1 1
  2. 使用PAI命令,提交训练参数。
    drop table if exists etrec_test_result;
    PAI -name pai_etrec
        -project algo_public
        -DsimilarityType="wbcosine"
        -Dweight="1"
        -DminUserBehavior="2"
        -Dlifecycle="28"
        -DtopN="2000"
        -Dalpha="0.5"
        -DoutputTableName="etrec_test_result"
        -DmaxUserBehavior="500"
        -DinputTableName="etrec_test_input"
        -Doperator="add"
        -DuserColName="user"
        -DitemColName="item";
  3. 查看结果输出表etrec_test_result
    itemid similarity
    0 1:1
    1 0:1

FM算法

FM(Factorization Machine)算法兼顾特征之间的相互作用,是一种非线性模型,适用于电商、广告及直播的推荐场景。PAI-Studio提供的FM算法模板包括FM训练和FM预测组件,您可以在PAI-Studio控制台首页的FM算法实现推荐模型区域,单击从模板创建,快速构建FM实验。

PAI-Studio支持通过可视化或PAI命令的方式,配置该组件参数:
  • 可视化方式
    组件 页签 参数 描述
    FM训练 字段设置 特征列 数据格式为key:value,多个特征以英文逗号(,)分隔。
    标签列 输入列。仅支持DOUBLE类型。
    参数设置 任务类型 支持regressionbinary_classification类型。
    迭代数 无。
    正则化系数 使用英文逗号(,)分隔的三个浮点数,分别表示0阶项、1阶项及2阶项的正则化系数。
    学习率 如果训练发散,则降低该参数取值。
    参数初始化标准差 无。
    维度 使用英文逗号(,)分隔的三个正整数,分别表示0阶项、1阶项、2阶项长度。
    数据块大小 性能参数。
    输出表生命周期 无。
    执行调优 节点个数 单个节点内存大小配合使用。取值范围为1~9999。
    单个节点内存大小 节点个数配合使用。取值范围为1024 MB~64*1024 MB。
    FM预测 参数设置 预测结果列名 无。
    预测得分列名 无。
    详细预测信息列名 无。
    保持列 保存至输出结果表的列。
    执行调优 节点个数 单个节点内存大小配合使用。取值范围为1~9999。
    单个节点内存大小 节点个数配合使用。取值范围为1024 MB~64*1024 MB。
  • PAI命令方式
    组件 参数 是否必选 描述 默认值
    FM训练 tensorColName 特征列名称。 数据格式为key:value,多个特征使用英文逗号(,)分隔。例如1:1.0,3:1.0
    labelColName label列名。数据必须是数值类型。如果task取值为binary_classification,则label只能取01
    task 任务类型。取值范围为{regression,binary_classification} regression
    numEpochs 迭代数。 10
    dim 使用英文逗号(,)分隔的三个整数,分别表示0次项、线性项及二次项的长度。 1,1,10
    learnRate 学习率。
    说明 如果训练发散,则降低学习率
    0.01
    lambda 使用英文逗号(,)分隔的三个浮点数,分别表示0次项、线性项及二次项的正则化系数。 0.01,0.01,0.01
    initStdev 参数初始化标准差。 0.05
    FM预测 predResultColName 预测结果列名。 prediction_result
    predScoreColName 预测得分列名。 prediction_score
    predDetailColName 详细预测信息列名。 prediction_detail
    keepColNames 保存至输出结果表的列。 所有列
例如,使用如下数据作为FM算法模板的输入数据,训练生成的模型AUC约为0.97。输入数据模型评估报告

ALS矩阵分解

交替最小二乘ALS(Alternating Least Squares)算法的原理是对稀疏矩阵进行模型分解,评估缺失项的值,从而得到基本的训练模型。在协同过滤分类方面,ALS算法属于User-Item CF(Collaborative Filtering),兼顾UserItem项,也称为混合CF。

PAI-Studio提供ALS算法模板,您可以在PAI-Studio控制台首页的ALS实现音乐推荐区域,单击从模板创建,快速构建ALS实验。因为系统不支持使用PAI命令配置ALS矩阵分解组件的参数,所以只能通过可视化方式配置该组件参数。
页签 参数 描述
字段设置 user列名 输入数据源中,用户ID列的名称。该列数据必须是BIGINT类型。
item列名 输入数据源中,item项的列名。该列数据必须是BIGINT类型。
打分列名 输入数据源中,用户对item项的打分所在的列名。该列数据必须是数值型。
参数设置 因子数 默认值为10,取值范围为(0,+∞)
迭代数 默认值为10,取值范围为(0,+∞)
正则化系数 默认值为0.1,取值范围为(0,+∞)
是否采用隐式偏好模型 隐式偏好模型开关。
隐式偏好系数 默认值为40,取值范围为(0,+∞)
执行调优 节点个数 取值范围为1~9999。
单个节点的内存大小 取值范围为1024 MB~64*1024 MB。
例如,使用如下数据作为ALS算法模板的输入数据,可以获得输出的X矩阵和Y矩阵:
  • 输入数据源输入数据源
  • 输出的X矩阵X矩阵
  • 输出的Y矩阵Y矩阵
如果预测user1994556636项的评分,则将如下两个向量相乘即可。
#向量x。
[-0.14220297,0.8327106,0.5352268,0.6336995,1.2326205,0.7112976,0.9794858,0.8489773,0.330319,0.7426911]
#向量y。
[0.71699333,0.5847747,0.96564907,0.36637592,0.77271074,0.52454436,0.69028413,0.2341857,0.73444265,0.8352135]