推荐召回方案支持推荐召回场景的自动模型训练、超参优化及模型评估。本文将推荐召回的协同过滤策略与PAI-Designer推荐算法搭配使用,构建完整的召回流程。

使用限制

使用协同过滤召回策略,需要将User-itemItem-item对应的数据分别导入至表格存储OTS(Tablestore),且每张表必须满足如下要求:
  • User-item数据表存储用户对商品的历史行为。例如购买、单击或收藏。表结构
    • user_id:用户ID。
    • item_id:商品ID。
    • active_type:行为。0表示单击,1表示购买,2表示收藏。
    该数据需要存储至OTS,系统支持的数据格式如下图所示。其中user_id为主键,item_ids为每个user_id对应的item,多个item以半角逗号(,)分隔。格式要求
  • Item-item数据表存储通过协同过滤算法计算得到的item相似度。item-item数据表示例
    • item_id:目标商品。
    • similar_item_idskey:value结构,其中key表示商品ID,value表示该商品与目标商品的关系。value值越大,表示关系越紧密。多个key:value数据以英文逗号(,)分隔。
    该数据需要存储至OTS,系统支持的数据格式如下图所示。其中item_ids为主键,similar_item_ids为每个item对应的相似item列表,多个item对以半角逗号(,)分隔。系统支持item不带权重值的情况。数据格式

操作流程

通过推荐召回的协同过滤策略和PAI-Designer推荐算法的结合,构建推荐召回的流程如下:
  1. 步骤一:生成训练数据

    使用PAI-Designer构建实验,生成训练数据。

  2. 步骤二:将数据导入至OTS

    按照数据格式的要求,将训练数据导入至OTS中。关于数据格式的要求,请参见使用限制

  3. 步骤三:创建实例

    创建用于推荐召回的实例。

  4. 步骤四:配置召回策略

    配置召回策略,从海量的待推荐数据中缩小待推荐物品的范围。

  5. 步骤五:测试并部署模型

    系统根据召回策略将推荐方案自动配置成在线测试服务,测试通过后可以将该方案部署到PAI-EAS。

步骤一:生成训练数据

  1. 进入PAI-Designer页面。
    1. 登录PAI控制台
    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
    3. 在工作空间页面的左侧导航栏选择模型开发和训练 > 可视化建模(Designer),进入Designer页面。
  2. 构建实验。
    1. 在PAI-Designer页面,单击工作流模板页签。
    2. 工作流模板列表的推荐算法-商品推荐区域,单击创建
      创建模板
    3. 新建工作流对话框,配置参数(可以全部使用默认参数),并单击确定
      您需要等待大约十秒钟,工作流可以创建成功。
    4. 在工作流列表,选择已创建的工作流,单击进入工作流
  3. 在画布中,保留如下组件,删除多余组件。模型组件读数据表user-item对应数据,协同过滤etrec组件为Item-item对应数据。
  4. 单击协同过滤etrec组件,在右侧参数设置页签,配置TopN5(对于每个item返回5个相关item)。
  5. 在左侧组件列表,将源/目标下的写数据表组件两次拖入画布,选中该组件,在右侧表选择页签,将表名参数分别配置为user_item_dataitem_item_data。同时将组件分别重命名为user_item_dataitem_item_data
  6. 读数据表组件的输出与user_item_data连接,将协同过滤etrec组件的输出与item_item_data相连。
    组件连接
  7. 单击画布上方的运行

步骤二:将数据导入至OTS

PAI-Designer生成的数据存储在MaxCompute,需要将该数据导入至OTS,才能供推荐召回方案使用。

  1. 创建OTS数据表,详情请参见创建数据表
    创建user-itemitem-item表,表字段和主键名必须满足要求,详情请参见使用限制user-item表的示例如下。OTS表
  2. 使用DataWorks将数据导入至OTS。
    1. 创建OTS数据源,详情请参见配置OTS数据源
    2. 创建离线同步节点,详情请参见创建离线同步节点
    3. 配置数据来源数据去向,详情请参见通过向导模式配置离线同步任务配置数据源
      因为OTS数据源不支持向导模式,所以需要单击点击转换为脚本,使用脚本导入。
      {
          "type": "job",
          "steps": [
              {
                  "stepType": "odps",
                  "parameter": {
                      "partition": [],
                      "datasource": "odps_first",
                      "column": [
                          "user_id", //MaxCompute表的列名。
                          "item_id"  //MaxCompute表的列名。
                      ],
                      "table": "user_item_data" //MaxCompute表名。
                  },
                  "name": "Reader",
                  "category": "reader"
              },
              {
                  "stepType": "ots",
                  "parameter": {
                      "datasource": "otc_data", //在数据集成配置的OTS资源名。
                      "column": [
                          {
                              "name": "item_ids",  //OTS字段名。
                              "type": "STRING"
                          }
                      ],
                      "writeMode": "UpdateRow",
                      "table": "user_item",//OTS表名。
                      "primaryKey": [
                          {
                              "name": "user_id",  //OTS主键名。
                              "type": "STRING"
                          }
                      ]
                  },
                  "name": "Writer",
                  "category": "writer"
              }
          ],
          "version": "2.0",
          "order": {
              "hops": [
                  {
                      "from": "Reader",
                      "to": "Writer"
                  }
              ]
          },
          "setting": {
              "errorLimit": {
                  "record": ""
              },
              "speed": {
                  "throttle": false,
                  "concurrent": 2
              }
          }
      }
      说明 使用上述示例时,需要删除注释。
  3. 查看OTS数据导入情况。
    1. 登录表格存储控制台
    2. 概览页面,单击实例名称操作列下的实例管理
    3. 实例详情页签的数据表列表区域,单击目标数据表的表名。
    4. 表管理页面,单击数据管理页签,即可查看已导入的数据。
      由于PAI-Designer生成的数据是空格分隔(如下图similarity),而推荐召回方案支持的数据是半角逗号(,)分隔。所以导入数据时,需要先使用DataWorks的SQL工具对数据进行预处理,再导入至OTS。空格分隔

步骤三:创建实例

  1. 进入推荐召回方案页面。
    1. 登录PAI控制台
    2. 在左侧导航栏,选择场景化解决方案 > 推荐召回方案
  2. 推荐召回方案页面,单击创建实例
  3. 创建实例页面,配置参数。
    参数描述
    实例类型选择实例类型推荐召回。系统支持以下实例类型
    • 图片分类
    • 推荐召回
    实例名称输入test
    实例说明输入结合PAI-Designer的推荐算法进行召回
    储存依赖使用推荐召回服务,需要将训练数据存储到阿里云表格存储OTS(Tablestore)中,详情请参见OTS创建数据表。如果没有进行OTS授权,则单击下方的授权
    实例绑定选择一个已创建的OTS实例。
  4. 单击确认

步骤四:配置召回策略

  1. 推荐召回方案页面,单击目标推荐召回实例操作列下的打开
  2. 协同过滤召回页签,配置参数。
    参数描述
    策略名称输入pai_rec
    User-Item数据表选择OTS中对应的user-item表。
    Item-Item数据表选择OTS中对应的item-item表。
    召回数量输入100
  3. 单击添加到策略列表召回策略
  4. 单击下一步

步骤五:测试并部署模型

  1. 数据过滤策略配置页面,单击部署并测试
  2. 部署确认对话框,确认召回策略和过滤策略,并单击确认
  3. 测试模块区域,输入测试数据中的某UserID,并在召回结果数量文本框输入10
  4. 单击发送测试请求1
  5. 调试信息区域,查看返回的推荐内容。如果对模型结果满意,单击前往EAS部署,将服务部署到PAI-EAS,形成RESTful请求。关于如何将服务部署至PAI-EAS,请参见控制台上传部署