开发者学堂课程【场景实践 - 搭建个性化推荐引擎系统:推荐引擎产品RecEng介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/522/detail/7053
推荐引擎产品RecEng介绍
内容介绍:
一、产品概述
二、推荐系统组成
三、三种计算
四、A/B测试
五、推荐引擎产品数据模型
六、推荐引擎产品数据模型之用户信息表
七、搜索引擎产品数据模型之用户属性维度表
八、搜索引擎产品数据模型之物品信息表
九、推荐引擎产品数据类型
十、推荐引擎产品数据类型之用户行为表
十一、可推荐物品表
一、产品概述
阿里云推荐引擎( Recommendation Engine ,简称 RecEng )是在阿里云公有云环境下建立的一套推荐服务框架,用于实时预测用户对物品的偏好,支持定制的推荐算法,支持aptx的效果对比,他以数据驱动业务,通过人工智能实现一对一的营销,可以为用户提供量身定做的服务。目标是让广大中小企业能够使用这套框架快速搭建满足自身业务需求的推荐服务。为企业降低运营成本,提高顾客对企业满度和忠诚度,提升企业的业务目标。
1.简单便捷
可快速实现 AP P或 WEB 网站的个性化功能,内置多种算法模板,节省90%的程序量
2.使用门槛低
不懂算法也可以搭建、优化推荐系统,流程白盒化,不具备算法知识的业务人员也可以参与配置
3.算法开发
既可以使用推荐引擎自带的标准算法,又可以支持使用企业自己定制化开发的的推荐算法。
二、推荐系统组成
推荐系统通常有三部分组成,分别是日志采集,引擎推荐,计算和产品对接也就是前台展现。
1.前台展示
通过在线 API 向推荐服务发起请求,获得该用户可能感兴趣的物品,完成推荐业务。
2.日至系统
需要采集记录的用户行为日志到离线存储,在离线系统中对数据进行加工和清洗。
3.推荐引擎
离线环境中根据推荐算法计算用户和物品的匹配,找出用户感兴趣的物品进行加工和清洗集合,将结果推送至在线存储。
阿里云推荐引擎 RecEng 是推荐算法的定制 RecEng 这样的一套完整的规范,从输入计算到输出客户,都可以在这个框架下自定义算法规则,以此满足各种要求,包括电商行业、音乐、视频还有新闻阅读社交,同时 RecEng 也提供了相应的方法,客户便捷的接入访问日志以及自定义满足自身业务需求的在线API。
三、三种计算
1.离线计算
包含推荐业务、场景、离线算法流程的创建、编辑、删除操作,以及推荐数据的生成。
支持算法流程任务的启动,停止和日志查看,提供默认的离线推荐算法模板,创建自定义算法模板,推荐引擎中离线流程都是在离线计算的模块,一般情况下,离线计算的输入输出都是 max compute 里面的数据,也就是原 ODBS,他的接入数据指客户离线提供的用户物品,日志等数据,中间数据是在离线算法会产生的各种中间性的结果表,而输出数据是指推荐结果数据表结果最终会导入到在线存储中供在线模块使用。
2.近线计算
主要处理用户行为发生变化、推荐物品发生更新时,对离线推荐结果进行更新。
近线计算不像离线计算那样专门以 max compute 作为输入输出,近线程序的输入数据可以来自多个数据源,比如说在线的表格存储以及用户的api请求或者是程序中的变量,输出可以是程序变量或者写回在线存储,或者返回给用户,出于安全性的考虑,推荐引擎提供一组 IDK,供用户自定义在线代码读写在线存储,不允许直接访问。所以需要定义每类存储的格式,对于需要频繁使用在线数据无论其来自在线数据,还是用户的 API 请求,RecEng 会预先读好,缓存在在线程序的变量中,程序自定义代码可以直接读写这些变量的数据。
3.在线计算
在接收到 API 请求时,实时对离线和近线修正产生的推荐结果进行过滤、排重、补足等处理。
四、A/B 测试
A/B 测试( A/B Testing ) , 就是为同一一个目标制定两个方案,让一部分用户使,用 A 方案,另一部分用户使用B方案,记录下用户的使用情况,看哪个方案更符合设计。
推荐引擎和A/B测试:
1、推荐引擎 RecEng 支持 A/B 测试,允许一个场景下存在多条推荐流程( rec_ path )
2、同一个场景下的每个推荐流程都会被分配一定的流量比例,比例可配置,在执行推荐 API 时,推荐引擎按照比例进行分流,分流完全随机。执行推荐流程里面的在线流程,RecEng 分配流量时是完全随机的,不遵从任何规则,比如说不存,一定要把某一个用户分配到某一个推荐流程当中。
五、推荐引擎产品数据模型
推荐引擎自带了一套数据模型,主要包括几类数据:用户数据、物品数据以及
行为数据,推荐引|擎的基础数据模型如下:
三种类型包含了7张表,其中用户类数据包含用户表、用户属性维度表、朋友关系表,物品类数据包括物品表、物品属性维度表、可推荐物品表,行为类数据就是行为表。
数据模型中把的这七张表有以下共性,比如说 ODPS 里面的表需要用户自己手工创建,表名没有固定要求,可以按照自己的习惯命名。可是表结构需要按照推荐引擎的要求,就是列名和字段类型分区格要规范一致.这7张表每张表必须是分区表,以 yyyy mm dd 的格式,来作分区字段,其中有三张表是必须要有数据的,用户表,物品表,用户行为表,除了行为表需要每天上传数据之外,其他的表如果不发生变化,就可以不用每天更新,推荐引擎会自动去获取最近一个有数据的分区中的表数据进行计算。
如果可推荐物品表里面没有提供数据系统,会自动将物品表里面的量物品拿过来作为可推荐物品,推荐请再对数据进行离线计算时,会产生数据结果和中间数据,其中中间数据的数据的大小取决于所使用的离线中的算法复杂度,例如一个标准的协同过滤算法,中间表数据量可能是原始数据输入表数据量的5到10倍,推荐引擎默认对中间表的保留时间是一天。
六、推荐引擎产品数据模型之用户信息表
用户信息表( user meta )用来存放用户信息
列名 |
数据类型 |
注释 |
Nullable |
User_id |
string |
用户 ID ,可以是AID , device id ,淘宝 ID 等各种唯一标识用户身份的ID。不能出现(\001 -\003)特殊字符。以下 user_ id 字段同此意。必填项,不能为空。 |
否 |
-\003)特殊字符。以下user_ id字段同此意。必填项,不能为空。 |
否 |
||
tags |
string |
标签标签值 kv 串。不同 tag 之间用\002分隔, tag 和 value之间用\003分隔 基本格式: t1\003v1\002t2\003v2... 例子:比如用户有两个标签年龄和性别, tag 可以取 age,gender ; value 取对应的值,如18、1 ,这条记录可编码为age\00318\002gender\0031 tags 字段每个KV组中 value 的取值类型信息由 user meta config 给出 更多信息参见[注释1 ] |
是 |
plates |
string |
板块区分字段,多个板块 code 用逗号分隔[注释3] |
是 |
七、搜索引擎产品数据模型之用户属性维度表
用户属性维度表( user_ meta_ config ) :
如果用户信息表( user meta )中的tags不为空,则需要将 tags 中包含的标签插入到该表中,每一个标签(即一类标签)需要对应一条记录。
列名 |
类型 |
备注 |
是否可以为空 |
Config_name |
String |
用户信息表中tags 字段包含的标签键 |
否 |
Config_value |
String |
标签的值的类型,目前包括以下几类: mv_ enum :多值枚举型 kv_ num : KV数值型 sV_ enum :单值枚举型 Sv_ num :单值数值型 比如,多值枚举型是指取可以枚举的值,但是取值的个数可以大于一个,比如某人的购买习惯:书,食品电子产品等; KV数值型一般针对带有权重的标签,键为标签,值为权重,比如 用户的偏好: 1001:0.6 1002:0.4 ;单值枚举型一般是指某标签有具体的取值,但是该值不能枚举,比如工资收入,它是一个具体的数值;单值枚举型指可以枚举但是只能取一个值的情况,比如性别 |
否 |
DS |
String |
该字段为分区键,取值格工为: yyyyMMdd |
否 |
八、搜索引擎产品数据模型之物品信息表
列名 |
数据类型 |
注释 |
Nullable |
Item_id |
string |
物品 ID,唯一标识 |
否 |
category |
string |
物品所属类目,最好以 ID 的形式给出。只支持单类目。如果要表示多分类,在properties 中描述 |
是 |
keywords |
string |
关键词串。关键词可以有权重(需要归一化到0-1之间),也可以没有权重,没有权重时所有词的权重都是1。Keywords 之间用\002分隔(如果score存在) 基本格式:kw1\003s1\002kw2\003\s2\002.. |
是,不过category ,keywords , properties,description ,item_info五者不能都为空,也就是说,最少五个字段中有一个字段是有信息,这五个字段就是物品所属类目、关键词串、属性属性值kv串、描述物品的业务信息,这五个信息 |
description |
string |
用于描述这个物品的一段文本 |
是 |
properties |
string |
是 |
|
Item_info |
string |
属性-属性值 kv 串。不同 key 之间用\002分隔, key 和value之间用\003分隔。不同 property 的 key 最好以ID 的形式给出。 基本格式: k1\003v1\002k2\003v2..] 例子:比如电影作为item ,properties 中的key包括演员、风格,取值分别为巩俐、爱情剧,这条记录的properties 字段可以编码为 lactor\003Gong Li\002style\003Love 更多信息参见[注释1] |
是 |
Update_datetime |
datetime |
物品更新时间 |
是 |
plates |
string |
板块区分字段,多个板块 code 用逗号分隔[注释3] |
是 |
九、推荐引擎产品数据类型
物品属性维度表( item meta_ config ) : 如果物品信息表( item_ meta )中的 properties 不为空,则需要将其中包含的标签插入到该表中, 每一个标签(即一类标签)需要对应一条记录。
列名 |
类型 |
备注 |
是否可为空 |
Config_name |
String |
物品信息表中properties 字段包含的标签键 |
否 |
Config_value |
String |
标签的值的类型,参见用户属性维度说明,多值使用/004分隔 |
否 |
Ds |
String |
该字段为分区键,取值格式为:'yyyyMMdd' |
否 |
十、推荐引擎产品数据类型之用户行为表
用户行为表( user_ behavior ) : 用户的行为数据,比如点击、查看、购买等信息
用户行为表是核心表之一,它包含的字段有比较多的字段是必填项,不可为空,除了 ds 时间分析字段之外,用户的 ID 字段、行为对象 ID 字段,行为作用对象的类型字段、行为类型字段、用户对物品的评分、消费、观看时长字段,行为次数、行为时间字段都能不能为空,这些需要注意。
十一、可推荐物品表
可推荐物品表( rec_ item_ info )
列名 |
数据类型 |
注释 |
Nullabe |
Item_id |
string |
物品 ID ,唯一标识。 本表中的物品都是允许被推荐的物品 |
否 |
Item_info |
string |
如果业务方希望 RecEng 在返回推荐物品时同时返回物品的其他信息,保存在这里。RecEng 不需要 了解item_ info 的内部格式,原样返回给业务方。 |
是 |
class |
string |
分组信息,用于多分类推荐 |
是 |
plates |
string |
板块区分字段,多个板块 code 用逗号分隔[注释3] |
是 |
唯一标识不能为空,ds 时间分区不能为空。之前也提过,如果未传可推荐物品表,则将物品表中全量物品作为可推荐物品进行使用,除了上面这六张表之外,还有一个朋友关系表,本次实验没有涉及。