推荐引擎—算法策略讲解2|学习笔记

简介: 快速学习推荐引擎—算法策略讲解2

开发者学堂课程【阿里云推荐引擎使用教程推荐引擎—算法策略讲解2】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/409/detail/5260


推荐引擎—算法策略讲解2  


内容介绍:

一、协同过滤算法

二、基于因子分解的推荐算法

三、默认推荐算法  


首先我们进入到推荐引擎的产品页面,选择一个业务,并在左侧导航栏中选择“测试”这一项,选定一个算法场景。在右侧导航栏中,选择“算法策略”这一栏,面板中展现了一个添加算法策略的下拉框。点击下拉框,这里列出了系统内置的所有算法策略,今天我将选择其中一些算法策略,进行一些简单的讲解。  


一、协同过滤算法

推荐系统中大家最为熟悉的莫过于各种协同过滤算法,在这个下拉框中,可以看到系统为大家实现了两种基于不同策略的协同过滤算法,也就是基于 itemCF 的协同过滤和基于 UserCF 的协同过滤。

1、基于itemCF的协同过滤算法

(1)基本思想 添加一个基于 itemCF 的协同过滤算法,其基本思想如下:基于itemCF 协同过滤算法的基本假设相对简单,即假设有一组用户 u1 和 u2,他们同时观看了物品 i1 和 i2,同时对物品 i1 和 i2 有行为,那么我们可以定义物品 i1 和 i2 在行为上是相似的,由此即可计算出所有物品对对其他物品的相似度。

得到物品和物品的相似度矩阵之后,就可以通过分析用户的历史行为,来推荐出和他历史有过行为的那些物品相似的其他物品。这就是基于 itemCF 协同过滤算法的基本思想。


(2)数据分析

①输入数据

观察基于 itemCF 协同过滤算法的一些输入数据,并结合上面的假设分析,首先我们需要一个物品的集合,对应输入数据中的物品表;同时我们需要分析用户的历史行为,对应输入数据中的行为表;而在推荐引擎的系统设置中,我们要求所有推荐出去的物品都包含在一张可推荐物品中,所以这里应包含可推荐物品;

另外,推荐引擎为大家集成了一些实时的功能,那么,只要大家在配置各自的业务时,选择开启使用日志的功能,推荐引擎就会有选择地实现一些复杂的实时功能来满足实时推荐的需求。

②输出数据

在面板中,系统列出了基于 itemCF 协同过滤算法所能输出的数据类型,以及一些简单的描述。在推荐引擎的设置中,所有的输出类型均为 REC_SET,分别表示一组针对物品的推荐列表。在这里产出了基于五种不同策略产出的推荐列表。如,用户对用户的推荐候选集(离线产出),就是基于用户的大量存量历史行为计算出来的推荐候选集以及根据用户实时行为产生的用户对物品的推荐候选集。这是由实时行为、实时日志出发的,以及用户在不同分类下对物品的推荐候选集和物品在不同分类下对物品的推荐候选集,以及介于物品相互产生的相似物品列表。  


(3)参数配置

点击“参数设置”,可以看到所有基于 itemCF 协同过滤算法可能用到的一些算法配置。在讲解协同过滤算法的基本思想时,我们首先要分析用户的历史行为,这里对应到“行为权重”和“用户行为时间跨度”。用户行为时间跨度代表的含义是,我们要基于最近过去多少天的用户行为来计算用户的一个偏好。首先,我们要对用户历史浏览过的物品进行打分,那么我们需要定义用户不同的行为类型对应的权重,我们可以根据各自的业务系统中用户的不同行为及其的影响程度来决定这个行为的权重。 “推荐结果数”参数比较简单,刚刚提到的输出数据中,我们产出了五个基于不同策略产生的推荐候选集,推荐结果数会作用在那五个推荐候选集的上面,表示最多要产生推荐结果的数目。

“相似度计算方法”表示我们把所有用户用他所看过的一些物品来表示成为一个项目,继而采用相似度计算方法来计算用户两两之间的相似度。系统为大家提供了五种科学的方法,对于每一种都会有一个详细的参数说明及一些可能用到的链接,大家可以自行点击进行进一步的了解。

“UV 阈值”这项参数的其实是一个调优参数。它描述的是生成推荐候选集需要满足UV 约束条件。之前在推荐引擎的系统实践中,我们发现,有时候使用 itemCF 这个算法策略会推出一些比较冷门的物品,那么其实这些冷门物品对于整个的推荐效果不一定是正面的影响,那么我们可以通过限定 UV 这个阈值来确保推荐出来物品不会太冷门,至少在 UV 这项指标上,它能够满足一些预定的条件。“过滤用户历史行为”的含义是表明是否过滤用户有过历史行为的候选集 item 在推荐引擎中,我们常常会遇想实现看过不再推荐的策略,那么通过设置这个参数即可满足大家这样的需求,这个参数比较简单,就不再做更多的讲解。

“多分类推荐”参数较为复杂,选择开启,多分类推荐这个参数的设置是基于这样一种考虑,在一些情况下我们经常需要实现一些带限制条件的推荐,如要实现针对用户在某一个特定内幕上的推荐,或者说想实现针对用户推荐一些满足某些关键字某些属性的一些物品的推荐。举个例子,如果想给用户推荐满足带有热点标签和杭州标签的物品,多分类推荐就能完成。  


通过开启这个设置,就能满足该项需求。首先,选择一个物品类别数据的来源,点击发现有三个选项,分别表示物品类别来源为  ITEM_META_category  字段,也就是内幕字段,可以实现针对指定内幕的推荐;也可以是推荐池,即REC_META_INFO class 字段,可实现针对单分类/组合分类的推荐并来源为推荐池,其中 class 的含义是把物品的一些用来做筛选的属性放入这个 classs 的UrlEncode 应用分割起来。

举个例子,比如,想实现用户在杭州有一个特定区域内的推荐,我们可以把这个物品打上“杭州”和“余杭”这两个关键字,最终我们在推荐的时候,就可以针对这两个关键字进行筛选来达到只推荐满足杭州余杭区属性的物品;

第三个选项 REC_ITEM_INFO+ITEM_META,我可以综合前两个选项实现复合推荐。关于多分类组合参数还有一个限制条件,即仅限“物品类别数据来源”包含REC_ITEM_INFO 时生效,即“REC_ITEM_INFO”或“REC_ITEM_INFO+ITEM_META ”才能够生效。这个参数实际含义:假设在REC_ITEM_INFO.class中定义了3个属性,那么在实际应用中,我们可能会对这三个数据进行自由组合,那么就可能有23-1,共7种组合,也就是1、2、3、12、23、13、123参控七种组合,那么我们在最终在线请求的时候就可以对这些属性进行单选以及复选,点击保存。  


(4)在线流程

基于 itemCF 协同过滤算法把策略配置完成之后,可以学习其在线流程,即如何引用这个算法策略产出结果,点击右侧导航栏中的“在线流程”,添加一个在线流程,点击“添加推荐方式”按钮,共列出了五个推荐方式,也就是基于 itemCF 协同过滤算法输出的五个不同的推荐结果集,我们可以根据各自的业务场景以及他们的一个优先级进行选择。如,要想根据用户的实时行为进行实时推荐,则可以选择根据用户实时行为产生的用户对物品的候选集,同时我们希望这个推荐方式优先机最高,可把优先级调整到 P1。

在用户实际推荐推荐过程中,我们不仅要考虑用户的短期偏好,还需要考虑用户的长期偏好,那么这里我们同样选择添加一个推荐方式,选择用户对物品的推荐候选集,这是一线产出的,其实考虑的也就是用户的长期兴趣,同样将它的优先级设置为P1,在这里我们实际给用户推荐的时候,需要同时考虑用户的短期兴趣和长期兴趣,我们希望把用户的短期兴趣优先级提高点,我们这里可以设计一个数据占比,比如说我们把用户的实时行为偏好设置为50%,并把用户的长期偏好数据占比也设置为50%。

点击保存,即可实现既考虑用户的短期偏好,也考虑用户长期偏好的一个复合推荐策略。关于在线流程的配置大家可以进行自由的探索,不再进行进一步的展开说明。


2、基于 UserCF 的协同过滤算法

(1)基本思想

现在我们尝试添加一个基于 UserCF 的协同过滤算法,该种算法的的基本假设类似于的基本假设。它的假设是说,假设我们有一个物品集合,他同时被两个用户 U1和 U2 看过,我们就可以认为用户 U1 和 U2 在行为上是相似的,那么我们就可以为用户推荐和他在行为上相似的其他用户所看过的其他物品,这个就是基于UserCF协同过滤算法的基本假设。

 

(2)数据分析

①输入数据      

与基于 itemCF 协同过滤算法是类似的,不再进行进一步说明。

②输出数据

相对于基于 itemCF 协同过滤,这里会多产生通过基于用户相似度产生用户相似用户列表,这跟刚刚的算法假设是不谋而合的,首先我们先要找到和用户相似的其他用户,其次才能够推荐这批和他相似的用户看过的其他物品。  


(3)参数设置

可以看到这里算法配置和基于 itemCF 协同过滤的算法配置是类似的,同样有“行为权重”“推荐结果数”“相似度计算方法”“UV阈值”“过滤用户行为历史”“行为时间跨度”和“多分类推荐”,唯一不同的是在这里多了“相似用户推荐”点击该项参数,可以看到相关说明,我们可以选择开启相似用户推荐,其基于用户行为相似度为用户产生与之相似的用户列表,值得注意的是这个相似用户推荐的开启与关闭和离线推荐算法策略没有太大关系,这里开启和关闭的主要区别在于我们是是否需要把针对用户产生的相似用户列表导入到在线流程中以供在线进行处理。

举个例子,假设开启了相似用户推荐,那么在实时行为中,我们可以根据与用户相似的那些其他用户实时产生过的一些行为物品来对用户进行一些实时推荐。但是如果我们选择关闭的话,相当于这个功能在线无法实现。所以,如果我们想实现实时的为用户推荐那些和他相似的用户实时浏览过的物品,我们必须把这项选择开启。点击保存。


(4)在线流程

点击右侧导航栏中的“在线流程”,进入到在线流程的配置来对刚刚的这个相似用户推荐,它的开启与否结果进行一个评估。点击“添加推荐方式”可以看到,由于刚刚在基于 itemCF 协同过滤的算法配置时开启了针对用户的推荐,那么在一些场景下我们可以选中“[基于 itemCF 协同过滤]基于用户相似度产生的相似用户列表(离线产出)”针对用户推荐一些他可能感兴趣的相似用户。


二、基于因子分解的推荐算法

在推荐系统领域,除了协同过滤算法策略之外,大家可能对因子分解算法有一定了解,如大名鼎鼎的 SVD++算法,那么在推荐引擎产品中为内存推荐的算法策略,它属于这一类基于因子分解的推荐算法,我们尝试添加一个基于因子分解的推荐算法,对于输入数据和输出数据不作更多介绍,大家可以自行学习了解。直接进入算法的参数配比的学习。

1、参数配置

和前面的协同过滤算法类似,基于因子分解的推荐算法也有一些公共的参数,如用户行为、时间跨度、行为权重、推荐结果数、多分类推荐,对于这些参数不多作赘述,只对其他的一些新增的算法参数进行学习。


(1)因子分解算法

其基本思想是:我们对用户的历史行为进行一个建模,得到他对物品的评分预测,得到了用户对物品评分的稀疏矩阵之后,再对这个矩阵进行分解,我们通过用户向量和物品向量对这个评分矩阵进行回归和拟合,这里面有有三种不同的算法策略。点击因子分解算法,这里对应的三种算法策略,分别选中有不同的算法说明。


①rank_svd   svd 因子分解算法

其含义是,我们将已经得到了用户对物品的一个评分矩阵,直接对这个矩阵进行分解,得到用户预测的向量和物品预测的向量,featurelen 表示物品的特征长度属性,比如这里配置的特征长度是128,128就表示我们虚拟出的物品有128维属性,用户也是128维的向量。在物品一侧,这128维特征向量,表示虚拟出物品拥有128维虚拟属性,以及对该属性的占有程度。在用户一侧,128维属性中用户对每一个物品虚拟属性的一个偏好程度。


②uf2uif

该参数的说明是基于用户特征回归的拟合,不同于 svd 的基本假设的是,在配置基础输入数据的时候,我们对用户会有一个 test 阶段,得到了用户的 test,我们就可以对用户的特征进行建模,这里涉及到用户特征抽取的模板。我们在提供用户的标签信息的时提供的可能是一些原始的数据,那么这系统数据是不能直接用作算法输入的,因此我们需要对用户的那些特征进行一个抽取。

主要经过两步变换,首先对用户的特征进行一个抽取,即使用 tag_uf 基于 tag 用户特征抽取,大部分情况下用户不需要太关注这里的算法,算法选择使用默认就可。

特征抽取算法完成的任务是把用户的那些标签变换成这个标签对用户的一个占有度,也就是一个权重值;接下来我们执行一个特征变化算法,这一步做完成的任务主要是把用户的那些标签变为可被算法接受的数字向量收入,这里会涉及到一个特征离散化方法。

这个特征离散化方法执行的任务比较简单,假如说用户有 abc 三个属性,我们会分别把a、b、c三个属性映射到0、1、2这三个不同的空间中,用0、1、2来对应原始的abc三个属性,那么在这里涉及到一个特征变换离散化方法,即等宽离散化和等频离散化。同样,跟上面的算法参数一样,大部分情况下,用户不需要对这些算法参数进行过多的配置,使用默认算法配置即可。

 

③if2uif 对第三个参数是基于物品特征回归拟和,与基于用户特征的回归拟合没有太多区别,同样是对物品的属性进行一个向量化,基于其特征以及对应特征的权重。相对于基于用户的回归拟合,基于物品特征回归拟合多了一个分子词库。物品的信息中的 description 字段描述可能是大段的文本,假如是中文我们需要对这些描述信息进行一个分词来提取其中的一些主干词,以及他们的权重。要进行的第一个工作是分词,系统为大家提供了四个不同的分词库,其中包含标准词库、电商行业词库、法律词库和传媒词库,大家可以根据各自的业务数据特点选择不同的词库以期达到最好的分析效果。 这里默认选择基于 svd 的因子分解的算法。

 

(2)候选集生成

在因子分解算法步骤完成之后,我们实际上得到了用户一侧的用户向量和物品一侧的物品向量。接下来我们需要对用户和物品、以及物品和物品之间的相似度进行度量,也就是候选集生成这个参数。我们将如何来描述用户对物品的一个相似度计算方法,和物品与物品的相似度计算方法。

①用户/物品相似度计算方法

提供了两种不同的参数,即向量内积和 L1 规范化的向量内积。

②物品/物品相似度计算方法

包含了三个选项,即向量余弦夹角、欧氏距离以及 Jaccard 相似度系数。对于不同的度量方法,系统给出了一些链接,大家都可以自行了解。


(3)候选集过滤

候选集过滤的实际用途和基于 itemCF 协同过滤算法和基于 UserCF 协同过滤算法中的过滤用户地址行为是类似的,点击选择开启。它的选择可以让我们去提供一个过滤的规则,这里有具体说明。大家可以根据各自业务系统中用户的行为规律来进行对应的配置,点击保存。

这步我们将不再演示配置过程,大家可以自行进行探索。  


三、默认推荐算法

我们选择了一个超级策略——默认推荐,默认推荐这个规则的设施目的在于在一些情况下我们可能并不能了解用户的偏好,假如对用户一无所知,既没有标签信息,也没有行为信息,那么当用户第一次进入系统时,我们应该怎样来为他进行推荐呢? 这个就是默认推荐所完成的任务,这里我们直接进入默认推荐的参数设置。

1、参数设置

共有三个参数,“推荐结果数”与之前含义一致,不再说明。

(1)默认推荐策略

点击默认推荐策略,系统提供了三种不同默认策略,分别代表了基于何种策略来产生这个默认推荐。simple_pv 表示我们基于简单行为 pv 的热度排行,也就是说在用户的历史行为中一个物品如果被看过的次数越多,我们认为这个热度越高,那么最终产生的默认推荐也就是按照物品的这个热度排行来进行一个综合。

这里可能会涉及到一些物品的物品被攻击的情况发生,比如,这个物品被爬虫爬过很多次,那么这个物品的热度可能会飙升,致使其在最终的热度排行榜中遥遥领先,那么在这种情况下,我们可以选择第二种策略 weighted_uv,基于加权的用户优惠的热度排行。我们可以看到,这里跟之前 itemCF 和 UserCF 权重的参数对比,之前的行为权重和这里的weight有效行为权重是对应关系。在第三种策略bucket_random 基于简单随机分桶策略,这种策略基于这样一种考虑,当我们的业务系统刚上线时,既没有用户的行为。也没有用户的标签,那么这种情况下,我们应该怎么给用户推荐呢? 我们对用户一无所知,在实际采集到用户的实际行为之前,我们可以采用这种基于简单随机分桶策略,比较适合没有行为的推荐场景,在我们的数据采集进行到一定程度之后,我们再可以根据用户的历史行为来对物品的热度进行一个计算。  


(2)分类目推荐策略

与之前的多分类推荐类似,默认推荐中的分类目推荐表示是我们是否要对物品的每一个类目单独产生一个热度排行,选择 true 的话会在产生一个全局默认推荐结果的基础上,对所有物品的类目下分别产生默认推荐,点击保存。


1、在线流程配置

选择“添加推荐方式”,由于刚刚已经配置了四个推荐算法策略,且所有这些这些算法策略的产出结果都可以在在线流程中进行一类引用,并且可以配置每一个推荐结果的优先级。那么这一步需要大家以后进行进一步的深入的探索。

相关文章
|
26天前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
23天前
|
算法
通过matlab分别对比PSO,反向学习PSO,多策略改进反向学习PSO三种优化算法
本项目使用MATLAB2022A版本,对比分析了PSO、反向学习PSO及多策略改进反向学习PSO三种优化算法的性能,主要通过优化收敛曲线进行直观展示。核心代码实现了标准PSO算法流程,加入反向学习机制及多种改进策略,以提升算法跳出局部最优的能力,增强全局搜索效率。
|
25天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
57 1
|
1月前
|
算法
优化策略:揭秘钢条切割与饼干分发的算法艺术
本文探讨了钢条切割与饼干分发两个经典算法问题,展示了算法在解决实际问题中的应用。钢条切割问题通过动态规划方法,计算出不同长度钢条的最大盈利切割方式,考虑焊接成本后问题更为复杂。饼干分发问题则采用贪心算法,旨在尽可能多的喂饱孩子,分别讨论了每个孩子一块饼干和最多两块饼干的情况。这些问题不仅体现了数学的精妙,也展示了工程师的智慧与创造力。
38 4
|
2月前
|
数据采集 缓存 算法
算法优化的常见策略有哪些
【10月更文挑战第20天】算法优化的常见策略有哪些
|
4月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
224 1
|
4月前
|
算法 语音技术
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
支付宝商业化广告算法问题之在ODL模型优化过程中,采取什么策略来提高模型的泛化能力呢
|
5月前
|
机器学习/深度学习 数据采集 算法
推荐引擎离线算法与在线算法的探索与实践
推荐引擎是现代互联网产品中至关重要的组成部分。离线算法和在线算法分别负责处理大量数据的预处理和模型训练,以及快速响应用户的实时请求。通过合理的架构设计和算法选择,可以构建出高效且个性化的推荐系统,从而提升用户体验,增加用户满意度和留存率。未来,随着技术的发展,推荐引擎将更加智能化和个性化,为用户提供更加精准的服务。
|
5月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
|
4月前
|
算法 Java 应用服务中间件
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略
探索JVM垃圾回收算法:选择适合你应用的最佳GC策略