PAI-Rec模块化推荐算法定制的最佳实践文档
为方便您快捷体验PAI-Rec产品,本文提供了一份公开数据集,您可以按照文档说明,按步骤体验PAI-Rec推荐算法定制的特征工程、召回、精排等关键功能的配置,生成代码并部署到DataWorks相应的业务流程中。相比非模块化方案定制,模块化可以实现单独功能的上下线,减少对推荐其余流程产生影响。
前提条件
为什么要把推荐方案定制做模块化的拆分?
通过新增特征组的概念,让用户更容易的新增特征组迭代模型。
一键上线,包含了部署、自动启动补数任务,减少用户的操作时间。
在排序模块才真正对需要的特征组、样本、fg等模块全部补数,如果特征工程配置出错,返工的成本更低。
在开始执行操作前,请确认您已完成以下准备工作:
已开通PAI,详情请参见开通PAI并创建默认工作空间。
已创建专有网络VPC和交换机,详情请参见搭建IPv4专有网络。
已开通PAI-FeatureStore(参考新建数据源的前提条件部分),注意数据源部分不用开通Hologres,数据源选择FeatureDB,参考新建在线数据源:FeatureDB。
已开通MaxCompute服务,并创建MaxCompute项目project_mc,详情请参见开通MaxCompute和创建MaxCompute项目。
创建OSS存储空间(Bucket),详情请参见创建存储空间。
开通DataWorks服务,并完成以下操作:
已创建DataWorks工作空间,操作详情请参见创建工作空间。
购买DataWorks的Serverless资源组,操作详情请参见使用Serverless资源组。资源组用于PAI-FeatureStore同步数据,以及执行eascmd的命令创建和更新PAI-EAS服务。
配置DataWorks数据源:
创建并绑定OSS数据源,详情请参见数据源管理。
创建并绑定MaxCompute数据源,详情请参见绑定MaxCompute计算资源。
创建FeatureStore项目和特征实体。如果是Serverless资源组则跳过本条目;如果是DataWorks独享资源组,在资源组上需要安装FeatureStore Python SDK,详情请参见二、创建并注册FeatureStore和安装FeatureStore Python SDK。
开通Flink,详情请参见开通实时计算Flink版。注意“存储类型”选择“OSS bucket”,不要选择“全托管存储”,并且保证Flink的OSS与PAI-Rec云产品配置中的OSS bucket一致。Flink用于记录实时用户行为数据,统计用户实时特征。
当您后续选择用EasyRec(TensorFlow框架)的时候,默认是在MaxCompute上训练。
当您后续选择TorchEasyRec(PyTorch框架)的时候,默认是在PAI-DLC上训练。PAI-DLC上下载MaxCompute数据需要开通数据传输服务(参考购买与使用独享数据传输服务资源组)。
1.创建PAI-Rec实例并初始化服务
登录推荐系统开发平台首页,单击立即购买。
在PAI-Rec实例购买页面,配置以下关键参数,然后单击立即购买。
参数
说明
地域和可用区
您的云服务部署的地域。
服务类型
本方案选择标准版,并启用“推荐方案定制”功能。
登录PAI-Rec管理控制台,在顶部菜单栏左上角处,选择地域。
在左侧导航栏选择实例列表,单击实例名称,进入实例详情页面。
单击操作指引区域的云产品配置,跳转至系统配置>云产品配置页面,单击编辑,按照如下资源配置完成相应参数配置,然后单击退出。
在左侧导航栏选择系统配置>权限管理,按照界面提示,在访问服务页签检查各项云产品授权情况,确保对应云产品访问状态正常。
2. 克隆公开数据集
1.同步数据表
本方案的输入数据有两种方案:
从pai_online_project项目中克隆固定时间窗的数据,不支持任务例行调度执行。
提供Python脚本,通过代码产出数据,可以通过DataWorks执行任务产出指定时间段的数据。
如果需要调度每天产出数据和训练模型,建议使用第二种方案。您需要部署指定的Python代码以生成所需数据,详情请参见“通过代码产出数据”页签。
同步固定时间窗的数据
PAI-Rec在公开访问的项目pai_online_project中提前准备了推荐算法中常用的三张表:
用户表:pai_online_project.rec_sln_demo_user_table
物品表:pai_online_project.rec_sln_demo_item_table
行为表:pai_online_project.rec_sln_demo_behavior_table
本方案后续的操作均基于上述三张表,其数据均是随机生成的模拟数据,没有真实业务含义,因此训练得到的AUC等指标较低。您需要在DataWorks中执行SQL命令,从pai_online_project项目中将上述表数据同步到您的DataWorks项目(例如DataWorks_a)中。具体操作步骤如下:
登录DataWorks控制台,在顶部菜单栏左上角处,选择地域。
在左侧导航栏单击数据开发与运维>数据开发。
选择已创建的DataWorks工作空间后,单击进入数据开发。
鼠标悬停至新建,选择新建节点>MaxCompute>ODPS SQL,按照如下资源配置完成相应参数配置,然后单击确认。
在新建节点区域,复制并运行下面的代码,将用户表、物品表、行为表从pai_online_project项目同步到您已创建的MaxCompute项目(例如project_mc)中。执行代码需要设置变量,指定bizdate到bizdate日期之前100天的数据。一般把bizdate设置为当前的日期的前一天,设置调度参数如下:
以下代码执行一次,即可将数据从公共的pai_online_project项目复制到用户的项目中:
CREATE TABLE IF NOT EXISTS rec_sln_demo_user_table_v1(
user_id BIGINT COMMENT '用户唯一ID',
gender STRING COMMENT '性别',
age BIGINT COMMENT '年龄',
city STRING COMMENT '城市',
item_cnt BIGINT COMMENT '创作内容数',
follow_cnt BIGINT COMMENT '关注数',
follower_cnt BIGINT COMMENT '粉丝数',
register_time BIGINT COMMENT '注册时间',
tags STRING COMMENT '用户标签'
) PARTITIONED BY (ds STRING) STORED AS ALIORC;
INSERT OVERWRITE TABLE rec_sln_demo_user_table_v1 PARTITION(ds)
SELECT *
FROM pai_online_project.rec_sln_demo_user_table
WHERE ds >= "${bizdate_100}" and ds <= "${bizdate}";
CREATE TABLE IF NOT EXISTS rec_sln_demo_item_table_v1(
item_id BIGINT COMMENT '内容ID',
duration DOUBLE COMMENT '视频时长',
title STRING COMMENT '标题',
category STRING COMMENT '一级标签',
author BIGINT COMMENT '作者',
click_count BIGINT COMMENT '累计点击数',
praise_count BIGINT COMMENT '累计点赞数',
pub_time BIGINT COMMENT '发布时间'
) PARTITIONED BY (ds STRING) STORED AS ALIORC;
INSERT OVERWRITE TABLE rec_sln_demo_item_table_v1 PARTITION(ds)
SELECT *
FROM pai_online_project.rec_sln_demo_item_table
WHERE ds >= "${bizdate_100}" and ds <= "${bizdate}";
CREATE TABLE IF NOT EXISTS rec_sln_demo_behavior_table_v1(
request_id STRING COMMENT '埋点ID/请求ID',
user_id STRING COMMENT '用户唯一ID',
exp_id STRING COMMENT '实验ID',
page STRING COMMENT '页面',
net_type STRING COMMENT '网络型号',
event_time BIGINT COMMENT '行为时间',
item_id STRING COMMENT '内容ID',
event STRING COMMENT '行为类型',
playtime DOUBLE COMMENT '播放时长/阅读时长'
) PARTITIONED BY (ds STRING) STORED AS ALIORC;
INSERT OVERWRITE TABLE rec_sln_demo_behavior_table_v1 PARTITION(ds)
SELECT *
FROM pai_online_project.rec_sln_demo_behavior_table
WHERE ds >= "${bizdate_100}" and ds <= "${bizdate}";通过代码产出数据
使用固定时间窗的数据,不支持任务例行调度执行。如果有执行需求,您需要部署特定的Python代码以生成所需数据。具体操作步骤如下:
在DataWorks控制台创建PyODPS 3节点,详情请参见创建并管理MaxCompute节点。
单击并下载create_data.py,将文件内容粘贴到PyODPS 3节点中。
单击右侧的调度配置,并配置以下参数,然后单击右上角的保存
和提交
。配置调度参数:
注意替换变量:
$user_table_name可以替换为rec_sln_demo_user_table
$item_table_name可以替换为rec_sln_demo_item_table
$behavior_table_name可以替换为rec_sln_demo_behavior_table

替换后:

配置调度依赖。
单击运维中心,并选择。
单击目标任务操作列下的。
在补数据配置面板中,设置业务日期,并单击提交并跳转。
较好的补数据时间范围为60天,建议您将业务日期设置为
任务定时调度日期-60,以确保数据的完整性。
2.配置依赖节点
为了确保后续代码生成与部署的顺利进行,请预先在您的DataWorks项目中添加三个SQL代码节点。请将这些节点的调度依赖配置为工作空间的根节点,完成所有设置后再发布节点。具体操作步骤如下:
鼠标悬停至新建,选择新建节点>通用>虚拟节点,按照如下资源配置分别创建3个虚拟节点,然后单击确认。

选中节点,分别将代码节点内容设置为
select 1;,然后单击右侧的调度配置,完成以下配置:在时间属性区域,设置重跑属性为运行成功或失败后节点重跑。
在调度依赖>依赖的上游节点区域,输入DataWorks工作空间名称,选择带有_root后缀的节点,单击添加。
3个虚拟节点均需配置。

单击虚拟节点前的
,提交该节点。
3.注册数据
为了后续在推荐方案定制功能中配置特征工程、召回、排序算法,您需要先注册同步到DataWorks项目中的三张表,具体操作步骤如下:
登录PAI-Rec管理控制台,在顶部菜单栏左上角处选择地域。
在左侧导航栏选择实例列表,单击实例名称,进入实例详情页面。
在左侧导航栏选择推荐方案定制>数据注册,在MaxCompute表页签单击新增数据表,按照如下资源配置分别新增1个用户表、1个物品表和1个行为表,然后单击开始导入。
参数
说明
方案默认示例
MaxCompute项目
选择已创建的MaxCompute项目。
project_mc
MaxCompute表
选择已同步到DataWorks工作空间的数据表。
用户表:rec_sln_demo_user_table_v1
物品表:rec_sln_demo_item_table_v1
行为表:rec_sln_demo_behavior_table_v1
数据表名称
自定义填写。
用户表
物品表
行为表
4.创建推荐场景
在配置推荐任务之前需要先创建一个推荐场景。推荐场景的基本概念、流量编码含义参考基本概念。
在左侧导航栏选择推荐场景,单击创建场景,按照如下资源配置创建1个推荐场景,然后单击确定。
5.创建并配置算法方案
如果您需要完整配置一个真实场景,建议配置的召回和精排如下。
全局热门召回:日志数据中,全面热门数据的统计排名取Top k。
分组热门召回:按照城市、性别区间等指标来分类召回,这对提高热门物品的准确性有帮助。
etrec u2i召回:基于etrec协同过滤算法。
swing u2i召回(可选):基于Swing算法。
向量召回(可选):DSSM向量召回。
精排:单目标可以选择MultiTower排序;多目标可选择DBMTL排序。
本文旨在体验配置与部署流程,因此在召回配置环节只配置了全局热门召回及RECommender(eTREC,一种协同过滤的实现)的u2i召回策略。在排序配置上,选择了精细化排名以优化体验。具体操作步骤如下:
在左侧导航栏选择推荐方案定制>创建模块化推荐方案,选择已创建的场景,并单击创建模块化推荐方案,按照如下资源配置创建1个方案,然后单击保存并进入算法方案配置。
未说明的参数保持默认即可,详情请参见数据表配置。
在数据表配置,单击目标数据表右侧的添加,按照如下资源配置分别设置行为日志表、用户表和物品表,并设置相应的分区、事件、特征、时间戳等字段,然后单击下一步。
未说明的参数保持默认即可,详情请参见数据表配置。
在特征组配置,单击添加,按照如下资源配置完成相应参数配置,设置特征模块名称,版本,分别勾选在数据表配置 中的用户表,物品表,行为日志表。
单击确定,会在用户和物品侧衍生出多种统计特征,点击该特征组的特征配置可以查看到对应的验证特征,本方案不对衍生特征进行二次编辑,保持默认即可。您可以根据自身业务需求,对衍生特征进行编辑,详情请参见特征配置。点击该特征组的上线,任务运行日期选择数据最新分区日期,调整任务最大并行数,最大时10,其余配置默认,点击确定。该动作会产出节点,并部署到dataworks,同时根据日期补跑数据,当改模块状态成为已上线才可进行后续配置。点击该模块的上线详情可以查看该模块相关的详细信息,其中补数任务列表可以查看到每个任务运行状态,对于失败的任务,点击查看任务节点可以跳转至dataworks查看任务详细报错,对于失败任务修正后点击补数任务列表该节点重跑,通过后点击续跑。
Label表配置,此模块根据行为表构建样本目标,点击添加,选择当前模块为label模块,输入Label 模块名称,特征模块选择上游配置的特征模块。单击精排目标设置(labels)后的新增,新增如下两个label:
目标1

目标2(注意ln中的l是L的小写)

确定后仿照特征模块进行上线,等待状态成为已上线后继续下游配置
样本配置,此模块功能是样本目标表关联特征,并在feature-store产出模型特征。点击添加,选择当前模块为样本模块,并命名模型特征,特征模块选择上游产生的特征模块,Label模块选择上游产出的Label模块,仿照上面进行上线,等待状态成为已上线后继续下游配置。
特征生成配置,此模块可以将样本表所有特征进一步衍生,目前不支持自定义配置。点击添加,选择当前模块为特征生成,特征生成类型选择排序,模型特征模块选择上游样本配置产生的模型特征。等待状态成为已上线后继续下游配置。
排序配置,点击精排的添加,特征模块输出选择上游产出的特征生成,其余选项默认,点击确定,仿照上游进行上线。该模块状态变成已上线,在pai-eas中能看到模型服务。
召回配置,单击目标分类右侧的添加,完成相应参数配置,单击确认,然后进行上线。以下内容包含了多种召回配置方法,为了带您快速体验部署流程,您可以只配置全局热门召回和etrec u2i召回。其他向量召回、协同度量召回等仅供参考。


,提交该节点。










