全部产品
阿里云办公

基于内容的推荐

更新时间:2017-09-27 15:04:44

基于内容的推荐

输入数据

数据 是否必选 描述
USER_BEHAVIOR 必选 离线用户行为表
REC_ITEM_INFO 必选 可推荐物品表
ITEM_META 必选 物品表
ITEM_META_CONFIG 可选(物品特征工程选择properties_if时必选) 物品信息维度表

输出数据

数据 数据类型 描述
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 不同分类下的物品对物品推荐候选集(离线产出)。用于带限制条件的物品关联推荐(如指定类目、关键词等),一般情况下不用,可以实现一些简单的“跨分类搭配购买”策略,如通过事先的数据分析发现母婴类目和酒水类目是一个频繁项集,则可以在用户购买了尿布之后为他推荐啤酒。

参数

参数名 默认值 描述
物品特征工程 true 参考下文<物品特征工程>子模板参数
相似度计算方法 Cosin 参考下文<物品/物品相似度计算方法>
用户行为时间跨度 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 默认关闭多分类推荐特性,开启的情况下请参考下文的“<多分类推荐>子模板参数”说明。
  • 物品/物品相似度计算方法
参数取值 描述
InnerProduct 向量内积
InnerProductL1Norm 先对特征做L1规范化,再做向量内积,关于L1规范化可以参考The p-norm in finite dimensions
Cosin 向量余弦夹角
<物品特征工程>子模板参数
  • 分词词库默认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:物品特征生成

    ​ 通过特征工程抽取物品表的keywords,description,properties特征。完成特征合并,特征变换得到物品的特征。其中properties特征抽取需要 ITEM_META_CONFIG表

    step3:推荐候选集生成

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

    step4:数据合并汇总

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

最佳实践

  • 特征离散化会对所有非one-hot 特征做处理,所以一般情况(如只有keywords)可以去掉特征离散化。用户特征可以看情况使用。
  • 在配置<行为权重>参数时,建议首先分析一下实际行为表中的bhv_type字段的取值,避免配置不当导致结果为空。