全部产品
阿里云办公

基于因子分解的推荐

更新时间:2017-09-22 11:49:34

基于因子分解的推荐

输入数据

数据 是否必选 描述
USER_BEHAVIOR 必选 离线用户行为表
REC_ITEM_INFO 必选 可推荐物品表
USER_META 可选(因子分解算法选择uf2uif时必选) 用户表
ITEM_META 可选(因子分解算法选择if2uif时必选) 物品表
ITEM_META_CONFIG 可选(物品特征工程选择properties_if时必选) 物品信息维度表
USER_META_CONFIG 可选(用户特征工程选择tag_uf时必选) 用户信息维度表
REALTIME_LOG 可选 用户实时行为日志(仅限开启”使用日志数据”时生效)

输出数据

数据 数据类型 描述
OFFLINE_USER_ITEM_REC REC_SET 用户对物品的推荐候选集(离线产出)。基于离线用户历史存量行为(一般是过去N天,N在算法参数里可以配置)产出的“综合”推荐结果,即在“全局的推荐池”里基于用户对物品的预测打分进行Top召回,这里建模的是用户的“中长期兴趣”。
OFFLINE_MULTICLASS_USER_ITEM_REC REC_SET 不同分类下的用户对物品推荐候选集(离线产出)。用于带限制条件下的用户推荐(如在指定类目、关键词下对用户进行推荐),不同于上面第一条推荐结果,这个推荐是在一个“按指定条件筛选后的、缩小的推荐池”里进行推荐召回。
OFFLINE_ITEM_ITEM_REC REC_SET 基于物品行为相似度产生的相似物品列表(离线产出)。可以实现在物品详情页的关联推荐(如”看过该物品的用户还看了“)
OFFLINE_MULTICLASS_ITEM_ITEM_REC REC_SET 不同分类下的物品对物品推荐候选集(离线产出)。用于带限制条件的物品关联推荐(如指定类目、关键词等),一般情况下不用,可以实现一些简单的“跨分类搭配购买”策略,如通过事先的数据分析发现母婴类目和酒水类目是一个频繁项集,则可以在用户购买了尿布之后为他推荐啤酒。
FILTER_SET FILTER_SET 用户有历史行为的商品集,用于结果筛选

参数

参数名 默认值 描述
因子分解算法 rank_svd 因子分解算法选择,不同的算法对输入数据有不同的要求,可选取值包括:
- rank_svd: 以pair_wise得分差异为优化目标的矩阵分解算法,从稀疏的U-I矩阵分解得到用户的特征向量和物品的特征向量。
- uf2uif: 依赖用户特征工程,使用用户特征U,用户评分R,求解等式 U^T I=R,得到对应物品特征
- if2uif: 依赖物品特征工程,使用物品特征I,用户评分R,求解等式 U^T I=R,得到对应用户特征
下一层参数参考下文的“<因子分解算法>子模板参数”说明
用户行为时间跨度 30 基于过去最近N天的行为数据来建模用户偏好。假设当前数据日期为20170830,设置本参数为30,直观上来看,这个参数:
1、决定了算法在运行时需要读取用户行为表(通过MaxCompute表提供或日志API上传)从当前数据日期向前多少个分区的数据,比如您配置了用户行为表为A,则会读取A表从ds=20170801到ds=20170830共30个分区的数据来进行计算。
2、决定了用户兴趣的时间窗口大小,即只有在这个窗口内的用户行为才被认为能够反映用户喜好,假设某用户的最近一次行为发生在30天之前的20170731,则该用户会被认为没有发生过任何历史行为,因此无法获得个性化推荐结果,需要用一些全局默认结果来进行抄底补足。
行为权重 view:1.0;click:0.8 用于计算用户偏好的有效行为及权重。
1、每一种行为类型匹配的是用户行为表的bhv_type字段,因此本参数需要根据您根据实际行为数据中的真实情况进行配置,否则可能导致运行出错或结果为空。
2、不同的行为类型对反映用户喜好的程度不尽相同,如购买、点赞行为相比浏览要更珍贵,因此也理应获得更高的权重,这里需要根据实际业务情况和业务经验进行配置。
3、行为权重与最终推荐效果的关系:由于行为权重会参与到用户兴趣的建模评分计算中,因此如果用户对物品集合A发生过权重较高的行为,算法会对与A中物品相似的其他物品集合A’赋予更高的推荐权重,从而更倾向于推荐A’中的物品,因此在这里我们可以有针对性地将业务中期待用户发生的目标行为(如购买)设置更高的权重,以获得更好的推荐效果。
推荐结果数 100 最多生成多少个推荐结果,本参数会作用在上文提到的“输出数据”的五类推荐结果集上。【注:关于推荐结果数最大可以设置多少,由于不同业务中的item_id长度各异,因此没有一个固定的值,总体原则是:最终拼接生成的推荐字符串大小不超过1兆。其中推荐字符串的格式为i1\u0003s1…\u0002…in\u0003sn,i1~in为实际item_id,s1~sn为权重(一般保留小数点后4位),\u0002和\u0003为Unicode的2和3。】
多分类推荐 false 默认关闭多分类推荐特性,开启的情况下请参考下文的“<多分类推荐>子模板参数”说明。
候选集过滤 false 默认关闭候选集过滤,开启的情况下请参考下文的“<候选集过滤>子模板参数”说明。
候选集生成 true 参考下文的“<候选集生成>子模板参数”说明
<因子分解算法>子模板参数
  • rank_svd
参数名 默认值 描述
特征长度(featurelen) 128 设定矩阵分解得到的特征长度,特征长度决定模型的复杂度,与输入的评分矩阵大小相关
计算的worker数(workernum) 5 性能参数,如果运行太慢或者报内存不足的错误,可以调大这个参数,如果是MaxCompute选择包月付费,要求购买的CU数必须大于等于workernum,否则会报资源不足。
每个worker的内存使用量(workermem) 8196 性能参数,如果报内存不足的错误,调大这个参数,单位是MB,最大值为 12000MB
  • uf2uif

    参照下文“<用户特征工程>子模板参数”说明

  • if2uif

    参照下文“<物品特征工程>子模板参数”说明

<候选集生成>子模板参数
  • 用户/物品相似度计算方法
参数取值 描述
InnerProduct 向量内积
InnerProductL1Norm 先对特征做L1规范化,再做向量内积,关于L1规范化可以参考The p-norm in finite dimensions
Cosin 向量余弦夹角
  • 物品/物品相似度计算方法
参数取值 描述
InnerProduct 向量内积
InnerProductL1Norm 先对特征做L1规范化,再做向量内积,关于L1规范化可以参考The p-norm in finite dimensions
Cosin 向量余弦夹角
Jaccord Jaccard相似系数 仅支持稀疏向量
<多分类推荐>子模板参数
  • 物品类别数据来源
参数取值 描述
ITEM_META 类别来源为物品表ITEM_META.category字段,可实现针对指定类目的推荐,在线请求时传入category参数可获取仅属于该category下的推荐结果。【注:由于物品表的category字段只能取单一值,若实际应用中物品可以属于多个类目,请参考下面REC_ITEM_INFO的使用方法】
REC_ITEM_INFO 类别来源为REC_ITEM_INFO.class字段,可实现针对指定单分类/组合分类的推荐,要求class字段的多个取值之间用\002分隔,如concat(‘体育’,’\002’,’时事’)表示物品属于“体育”和“时事”两个分类。在线请求时传入class参数(多个取值之间用逗号分隔,请注意做UrlEncode,如’class=体育,时事’encode后为’class=%E4%BD%93%E8%82%B2,%E6%97%B6%E4%BA%8B’)可获取指定分类条件下的推荐结果。
REC_ITEM_INFO+ITEM_META 综合前两个选项。
  • 多分类组合

    仅限“物品类别数据来源”包含REC_ITEM_INFO时生效, 即“REC_ITEM_INFO”或“REC_ITEM_INFO+ITEM_META”。

参数取值 描述
false 关闭此特性,可以实现单一分类条件下的推荐,如“体育”分类下的推荐。
true 开启此特性,系统会对REC_ITEM_INFO.class中定义的多个属性进行自由组合(最多支持4维属性组合),可实现多分类组合下的推荐,如在同时限定”体育“和“时事”分类下的推荐。【注:N维属性的自由组合可以生成2^N-1种组合方式,例如有A,B,C三个属性,自由组合后会生成A,B,C,AB,AC,BC,ABC共7个组合(组合内有序)】
<候选集过滤>子模板参数
  • 过滤规则

    bhv1:n1;bhv2:n2,表示过滤前n1天的行为bhv1,前n2天行为bhv2,默认值consume:1

<用户特征工程>子模板参数
  • 特征抽取算法

    默认选择 基于tag用户特征抽取(tag_uf),无其他可选算法

    1. 使用条件:用户表中tag字段不为空。
    2. 主要功能:对tag中的用户标签按照user_meta_config属性维表中的属性类型,进行one-hot编码,并根据选择的标准化方式,对抽取的数值特征进行标准化。
参数名 默认值 描述
normalize none 选择特征标准化,minmax为用最大最小值进行标准化,zscore用均值标准差进行标准化,none表示不做任何处理
  • 特征变换算法

默认特征离散化

参数名 默认值 描述
discreteMethod SameDistance 特征离散化方法, 可取值: [SameDistance,SameFreq],其中SameDistance为等距离散,SameFreq为等频离散
maxBins 5 离散化区间个数
<物品特征工程>子模板参数
  • 分词词库默认standard ,可选分词的领域项为e_commerce(电子商务)、law(法律)、broad_tv(直播视频)当选择抽取物品描述(description)特征,必须需要选择一个分词词库。

  • 特征抽取算法 默认选择抽取物品描述(description)特征,可并行扩展抽取物品关键词(keyowrds)特征、抽取物品属性(properties)特征。

  • 抽取物品描述特征(tfidf_if)。

    1. 使用条件:物品表中description字段不为空;
    2. 主要功能:对description进行分词,计算词的tf-idf值,根据idf阈值,过滤出对于description来说比较重要的词语。选择不同的标准化方式,对抽取的特征进行标准化。
参数名 默认值 描述
normalize none 特征标准化方式,minmax为用最大最小值进行标准化,zscore用均值标准差进行标准化,none表示不做任何处理,默认采用none(不做任何处理)
max_idf 100 词特征筛选条件,选取小于最大idf阈值的词
min_idf 0 词特征筛选条件,选取大于最小idf阈值的词
  • 抽取物品属性特征(properties_if)。
    1. 使用条件:物品表中properties字段不为空。
    2. 主要功能:对properties中的属性按照item_meta_config属性维表中的属性类型,进行one-hot编码,并根据选择的标准化方式,对抽取的数值特征进行标准化。
参数名 默认值 描述
normalize none 特征标准化方式,minmax为用最大最小值进行标准化,zscore用均值标准差进行标准化,none表示不做任何处理,默认采用none(不做任何处理)
  • 抽取物品关键词特征(keywords_if)。
    1. 使用条件:物品表中keywords字段不为空。
    2. 主要功能:对keywords字段中的关键词进行one-hot编码,并根据选择的标准化方式,对抽取的数值特征进行标准化。
参数名 默认值 描述
normalize none 选择特征标准化,minmax为用最大最小值进行标准化,zscore用均值标准差进行标准化,none表示不做任何处理
  • 特征变换算法目前只提供对连续特征进行离散化算法。特征降维算法持续增加中…..可设算法参数:
参数名 默认值 描述
discreteMethod SameDistance 特征离散化方法, 可取值:[SameDistance,SameFreq],其中SameDistance为等距离散,SameFreq为等频离散
maxBins 5 特征离散化区间个数

主要算法逻辑

  1. 离线模块

    step1:评分矩阵建模

    ​ 基于设置的<用户行为时间跨度>、<行为权重>参数,综合考虑用户的兴趣分布和随时间的衰减因素,对用户有过历史行为的物品进行建模评分,生成三元组(注意这里的三元组只是针对用户历史上发生过行为的物品,与后面即将生成的推荐(如其他的、用户没有过行为的)物品并不相同)。在这一步中,可以顺便得到每一个物品总共被多少不同用户有过行为(即UV值),可以结合参数在后续步骤中进行过滤。

    step2:用户/物品特征生成

    ​ 对step1建模得到的评分矩阵,按照<因子分解算法>选择的算法生成在同一个向量空间下的物品特征和用户特征。其中 rank_svd生成的是稠密特征,if2uif,uf2uif产出的特征格式和输入的特征格式相同。

    step3:推荐候选集生成

    ​ 对step2得到的用户和物品特征,物品和物品特征做笛卡尔积运算,相似度算法由参数<用户/物品相似度计算方法>,<物品/物品相似度计算方法> 决定,这里的笛卡尔积的运算,不会产出所有结果,只会产出每个用户/物品topn的候选集,避免占用过多存储,得到用户相关的推荐列表(OFFLINE_USER_ITEM_REC)和物品的相关列表(OFFLINE_ITEM_ITEM_REC)。如果<多分类推荐> 选择为true,还会生成另外两个多类目的候选集OFFLINE_MULTICLASS_USER_ITEM_REC,OFFLINE_MULTICLASS_ITEM_ITEM_REC ​ ​ 如果<候选集过滤> 设置为true,则还会生成一个用户历史行为集合,用于在线过滤。

    step4:数据合并汇总

    ​ 将计算结果进行汇总,导入到在线存储。

最佳实践

  • 特征离散化会对所有非one-hot 特征做处理,所以一般情况(如只有keywords)可以去掉特征离散化。用户特征可以看情况使用。
  • 在配置<行为权重>参数时,建议首先分析一下实际行为表中的bhv_type字段的取值,避免配置不当导致结果为空。
  • 物品相关推荐集更多的是基于行为,不太适合做详情页推荐。详情页推荐可以使用内容推荐的模板来完成。
  • rand_svd 非常依赖行为量,如果行为交互太少,比如小于1w条,那么可以考虑其他模板。