本文将推荐召回的协同过滤策略与PAI-Studio推荐算法搭配使用,构建完整的召回流程。

数据说明

使用协同过滤召回策略,需要将User-itemItem-item对应的数据分别导入至表格存储OTS(Tablestore)。
  • User-item数据表存储用户对商品的历史行为。例如购买、单击或收藏。表结构
    • user_id:用户ID。
    • item_id:商品ID。
    • active_type:行为。0表示单击,1表示购买,2表示收藏。
    数据需要存储至OTS,PAI-AutoLearning支持的数据格式如下图所示。其中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,PAI-AutoLearning支持的数据格式如下图所示。其中item_ids为主键,similar_item_ids为每个item对应的相似item列表,多个item对以英文逗号(,)分隔。系统支持item不带权重值的情况。数据格式

步骤一:生成训练数据

  1. 进入PAI-Studio控制台页面。
    1. 登录PAI控制台
    2. 在PAI控制台首页,选择模型开发和训练 > Studio-可视化建模
    3. PAI可视化建模页面,单击进入机器学习进入机器学习
  2. 在左侧菜单栏,单击首页
  3. 【推荐算法】商品推荐区域,单击从模板创建
  4. 在画布中,保留如下组件,删除多余组件。模型组件cf_训练_datauser-item对应数据,协同过滤组件为Item-item对应数据。
  5. 单击协同过滤组件,在右侧参数设置页签,配置TopN5(对于每个item返回5个相关item)。
  6. 在左侧菜单栏,单击组件
  7. 在组件列表,将源/目标下的写数据表两次拖入画布,并分别重命名为user_item_dataitem_item_data
  8. cf训练_data组件的输出与user_item_data连接,协同过滤组件的输出与item_item_data相连。
  9. 单击画布上方的运行

步骤二:将数据导入至OTS

PAI-Studio生成的数据存储在MaxCompute,需要将该数据导入至OTS,才能供PAI-AutoLearning使用。

  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. 实例详情页签的数据表列表区域,单击操作列下的数据管理插入的数据
      由于PAI-Studio生成的数据是空格分隔(如下图similarity),而PAI-Autolearning支持的数据是英文逗号(,)分隔。所以导入数据时,需要先使用DataWorks的SQL工具对数据进行预处理,再导入至OTS。空格分隔

步骤三:配置召回策略

  1. 进入AutoLearning页面。
    1. 登录PAI控制台
    2. 在PAI控制台首页,选择AutoLearning > 通用模型训练
  2. AutoLearning页面,单击创建实例
  3. 创建实例页面,选择实例类型推荐召回
  4. 实例名称文本框输入test,并单击确认
  5. AutoLearning页面,单击操作列下的打开
  6. 协同过滤召回页面,选择对应的表,并在召回数量文本框输入100
  7. 单击添加到策略列表召回策略
  8. 单击下一步

步骤四:部署并测试模型

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