全部产品
云市场

AutoLearning推荐召回案例

更新时间:2020-02-19 10:31:16

数据说明

在协同过滤召回中,需要将user-item对应数据,和item-item对应数据分别导入到表格存储中。

1.user-item数据说明

user-item对应数据表示的是用户历史上对于每个商品的行为,比如购买、点击或者收藏,如下图所示

  • user_id表示人的id
  • item_id表示商品id
  • active_type表示行为:0为点击、1为购买、2为收藏

在PAI-AutoLearning中支持的格式如下,数据需要存储到表格存储,其中user_id为主键,item_ids为每个user对应的item,多个item以逗号分割。字段名称请严格按照以下表格设置。

2.item-item数据说明

item-item表为数据经过协同过滤算法计算出来的每个item之间的相似度。

如下表所示:

  • item_id为目标商品
  • similar_item_ids为key:value结构数据,其中key表示的是商品ID,value表示的是该商品与目标商品的关系,数值越大表示关系越紧密。多个key:value数据以逗号分割

在PAI-AutoLearning中支持的格式如下,数据需要存储到表格存储,其中item_ids为主键,similar_item_ids为每个item对应的item对,多个item对以逗号分割,item不带权重值也是支持的。字段名称请严格按照以下表格设置。

数据生成

进入Studio,新建【推荐算法】商品推荐模板。

只保留以下3个组件,将其余不需要的组件删除。

  • “cf 训练 data”为user-item对应数据

  • ”协同过滤“组件为item-item对应数据

为了实验达到更好效果,请点击”协同过滤“组件,在参数配置中将TopN改成5,这个参数的含义是对于一个item返回N个相关item。

分别拖两个”写数据表“组件连接”cf 训练 data”组件和”协同过滤“组件,将这两个组件的输出结果分别命名为user_item_data和item_item_data。

这样我们就拿到了协同召回策略需要的数据。

表格存储建表

上一模块我们得到了协同过滤召回所需要的数据并且存储到了MaxCompute表,接下来介绍如何将数据导入表格存储,首先要先在表格存储内建表。

进入产品页:https://www.aliyun.com/product/ots

点击管理控制台,切换到到与PAI在同一区域的服务:

创建实例,并且点击实例名进入,

点击”创建数据表“,按照数据说明建立user-item表和item-item表,表的字段和主键命名一定要严格按照第一模块说明要求。

先创建两个表,并且设置好主键:

点击表名,进去添加”定义列“,定义列就是属性列

user-item表配置完效果。

数据导入到表格存储

现在已经在MaxCompute生成了数据,表格存储的两张表也建好了,接下来介绍如何将数据从MaxCompute写入表格存储。首先进入Dataworks,Dataworks是PAI和MaxCompute的数仓管理工具。

Dataworks地址:https://workbench.data.aliyun.com/console

找到对应的PAI的项目,首先做数据集成的配置,点击”进入数据集成”

点击新增数据源,选择OTS,OTS是表格存储的英文缩写。

按照要求填写信息:

在Dataworks进入数据开发—>点击加好—>数据集成—>离线同步

选择原始数据源ODPS(MaxCompute别称)以及导出数据源OTS:

因为目前只支持脚本导入OTS的方式,点击转换为脚本,脚本说明见下方(使用的时候需要删除//及注释):

  1. {
  2. "type": "job",
  3. "steps": [
  4. {
  5. "stepType": "odps",
  6. "parameter": {
  7. "partition": [],
  8. "datasource": "odps_first",
  9. "column": [
  10. "user_id", //MaxCompute表的列名
  11. "item_id" //MaxCompute表的列名
  12. ],
  13. "table": "user_item_data" //MaxCompute表名
  14. },
  15. "name": "Reader",
  16. "category": "reader"
  17. },
  18. {
  19. "stepType": "ots",
  20. "parameter": {
  21. "datasource": "otc_data", //在数据集成中配置的ots资源名
  22. "column": [
  23. {
  24. "name": "item_ids", //ots字段名
  25. "type": "STRING"
  26. }
  27. ],
  28. "writeMode": "UpdateRow",
  29. "table": "user_item",//ots表名
  30. "primaryKey": [
  31. {
  32. "name": "user_id", //ots主键名
  33. "type": "STRING"
  34. }
  35. ]
  36. },
  37. "name": "Writer",
  38. "category": "writer"
  39. }
  40. ],
  41. "version": "2.0",
  42. "order": {
  43. "hops": [
  44. {
  45. "from": "Reader",
  46. "to": "Writer"
  47. }
  48. ]
  49. },
  50. "setting": {
  51. "errorLimit": {
  52. "record": ""
  53. },
  54. "speed": {
  55. "throttle": false,
  56. "concurrent": 2
  57. }
  58. }
  59. }

执行完后,可以在表格存储中去校验数据是否真的写入:

注:在传item-item表的时候,因为本案例在PAI-Studio生成的数据是空格分割,见similarity字段:

而PAI-Autolearning-rec要求存储到表格存储的数据是逗号分割,在实际传导数据的时候可以先在Dataworks用一个sql处理下数据后,再存储到表格存储。

配置召回策略

进入AutoLearning,新建实例,选择推荐召回。

第一次使用,要进行授权。然后绑定实例进入产品内。

在召回策略模块,选择对应的表,并且配置召回数量,然后添加策略列表。

本案例作为教学就不配置过滤策略了,直接进入部署和服务。

随机挑选一个userID发送请求,测试下能否得到推荐结果。

发送ID=10064500的数据,得到了反馈的推荐结果列表:

最终使用的话可以点击”前往EAS部署“,该服务就会被部署成一个RestfulAPI。