龙空技术网

「从零入门推荐系统」06:推荐系统召回算法介绍

数据与智能 187

前言:

如今兄弟们对“一种个性化旅游线路推荐算法”大概比较重视,姐妹们都想要分析一些“一种个性化旅游线路推荐算法”的相关文章。那么小编也在网摘上搜集了一些关于“一种个性化旅游线路推荐算法””的相关文章,希望兄弟们能喜欢,兄弟们一起来学习一下吧!

作者 | gongyouliu

编辑 | gongyouliu

我们在前面几章中介绍了推荐系统的一些基本概念,从本章开始我们会进入推荐系统的核心章节,也就是关于推荐算法部分的介绍。我们在第五章「推荐系统业务流程与架构」中讲到推荐系统一般会分为召回和排序两个阶段,召回可以看成是推荐前的初筛过程,排序是对初筛的结果进行精细打分排序的过程。

召回和排序两个阶段中使用的算法就是推荐系统的核心算法。在后面一系列文章中,我们会先花几章介绍召回算法,然后再介绍排序算法。本章我们先简单介绍常用的召回算法及其特性,希望读者对召回算法有一个初步的了解。

6.1 什么是召回算法

一般在工业级推荐系统中,涉及到的推荐候选集是非常大的,比如淘宝上就有上亿的商品。召回其实就是一个初筛的过程,先通过简单的算法和策略将推荐候选集的规模限制在一个比较小的集合(一般几百到几千个),然后再用精准的排序算法对候选集进行精细排序。这么做的目的是将推荐过程拆解为两个先后依赖的步骤,这样做的价值一是将问题解耦,二是降低问题的复杂度,可以更好地工程实现。

基于召回算法的初筛目的,召回算法一般可以用比较简单的算法来实现,这样可以快速在大规模候选集中将待推荐的物品筛选出来,简单的召回算法在工程实现和效率上都是更好的选择。

另外,为了不至于错失用户可能真正喜欢的物品(如果召回阶段没有被筛选出来,那么这个物品就不会推荐给用户了),一般会用多种召回算法,每个算法可以从不同的维度来将用户喜欢的物品筛选出来。选择多个召回算法的思路有点类似集成学习,通过多路召回起到“三个臭皮匠,顶个诸葛亮”的作用。

现在大家应该对什么是召回算法及召回的目的了解了,那么下面我们介绍一些常用的召回算法,让大家知道我们可以从哪些维度进行召回。

6.2 常用的召回算法介绍

召回算法种类非常多,可以是简单的规则策略,也可以是复杂的算法。召回算法可以从数据维度来划分,可以基于用户画像的召回、基于用户行为的召回等。召回算法还可以从是否是个性化的算法来划分。下面我们从3个维度来分别介绍常用的召回算法,方便读者可以更好地理解各种召回算法之间的区别和联系。

6.2.1 基于算法复杂度的分类

如果按照算法复杂度来划分,我们可以将召回算法分为基于规则策略的召回、基于简单算法的召回、基于复杂算法的召回这3类,下面分别介绍。

6.2.1.1 基于规则策略的召回

这类召回算法是基于具体的业务场景和产品运营策略来制定的。比如可以基于热门进行召回(如各类排行榜),比如可以基于重点运营类目进行召回等(一般是运营人员来确定),比如可以基于不同的性别或者地域由运营人员整理一批候选集,针对用户的性别或者地域来进行召回。

其他的规则策略召回方法有很多,比如可以基于新品进行召回,也就是将最近新上架的商品作为一个召回池子。也可以基于最近的运营计划来召回,比如阿里在双十一期间会对某些商品进行促销打折,那么这类商品也可以构建成一个召回池。

基于规则策略的召回一般跟行业、策略、业务相关,不同的行业在不同时期有不同的做法,这需要算法工程师跟业务部门进行很好的配合,算法工程师在实施这类召回策略时一定要理解具体的业务场景和业务价值。

6.2.1.2 基于简单算法的召回

这类召回算法利用比较简单有效的算法进行召回,这类算法一般实现比较简单,容易理解,只要有相关的数据基础就可以实施,也是在真实业务场景中用得比较多的算法。下面举几个例子来说明。

对于推荐系统来说,每个用户都有历史行为(这里不考虑冷启动用户),那么就可以利用用户最近有操作行为的物品(比如用户购买了该商品)的相似物品作为召回,这类召回算法在信息流推荐中用比较多。相似度的计算方法很多,可以基于物品本身信息的相似度,也可以利用高阶的嵌入算法,比如矩阵分解、item2vec等。

一般来说,用户的兴趣画像可以很好地刻画用户的兴趣偏好,如果公司有完整的用户兴趣画像的话,也可以基于用户的兴趣画像标签进行召回。比如用户喜欢“爱情”电影,那么就可以将所有具备“爱情”标签的电影作为召回。其他维度的用户画像,比如年龄、性别、地域、收入等都可以作为画像标签进行召回,这要求我们对待召回的物品也要构建适合用户画像的分类体系(即物品画像),比如哪些商品是适合推荐给男性的、哪些是适合推荐给女性的、哪些是男女都可以推荐的。

上面列举了两个最简单的例子。其它简单的召回算法有很多,比如协同过滤算法、矩阵分解算法、用户聚类算法、关联规则算法、朴素贝叶斯算法等。我们会在后续章节详细介绍算法原理,这里不再赘述。

6.2.1.3 基于复杂算法的召回

这里指的复杂的召回算法主要是指采用深度学习、强化学习、迁移学习、半监督学习等较现代的算法来进行召回的方法。比如YouTube在2016年那篇经典的深度学习推荐论文中的深度学习召回算法(见参考文献1),我们在后面章节会介绍YouTube这个算法,这里不再赘述。

6.2.2 基于数据维度的分类

召回算法也可以按照使用的数据来进行分类。如果按照利用的数据来分类,召回算法可以分为基于用户数据的召回、基于物品数据的召回、基于行为数据的召回、基于场景数据的召回等4类,下面分别简单介绍。

6.2.2.1 基于用户数据的召回

基于用户数据的召回是指召回算法依赖用户相关的数据进行召回。比如利用用户的画像进行的召回都是这类算法。前面已经做了简单介绍了,这里不赘述。

6.2.2.2 基于物品数据的召回

基于物品相关的数据进行召回,可以基于物品的metadata信息(比如描述信息、分类、标签、价格、颜色、产地等)进行召回。

我们可以将物品每个维度的信息看成一个特征,那么任何两个物品之间的相似度可以通过计算两个向量的相似度来实现,每个维度的相似度可以有单独的算法,不同维度也可以赋予不同的权重,这就是所谓的向量空间模型,这时我们可以通过如下的方式计算两个物品之间的相似度。

假设两个物品的向量表示分别为:

这时这两个物品相似性可以表示为:

其中

代表的是向量的两个分量之间的相似度。可以采用Jacard相似度等各种方法计算两个分量之间的相似度。上面公式中还可以针对不同的分量采用不同的权重策略,见下面公式,其中是第t个分量(特征)的权重,具体权重的数值可以根据对业务的理解来人工设置,或者利用机器学习算法来训练学习得到。

我们也可以采用更高阶的算法,将物品信息嵌入到一个向量空间(新闻推荐比较适合这类算法),利用两个向量的相似度计算两个物品的相似度。

这里提一下,基于物品的召回既可以用到相似推荐中(即为每个物品关联最相似的物品),也可以用到个性化推荐中(比如基于用户最近喜欢的物品,将该物品相似的物品作为召回)。

6.2.2.3 基于行为数据的召回

基于行为数据的召回又可以分为两类,一类是只基于用户自己的行为进行召回,另外一类是基于群体的行为召回。

利用用户喜欢的物品的相似物品作为召回或者用户最后一次操作过的物品的相似物品召回,就属于只基于用户自己行为的召回算法。

像前面提到的协同过滤算法、矩阵分解算法、用户聚类算法、关联规则算法、朴素贝叶斯算法都属于基于群体行为数据的召回。

6.2.2.4 基于场景数据的召回

这里的场景数据包括时间、地点、天气、上下文(比如是在加购物车之前、购买之前还是购买之后给用户进行召回等),也可以叫做上下文数据。这里简单对一些基于场景数据的召回加以说明,让大家可以更好地理解。

比如美团外卖就是一个典型的可以基于时间、地点召回的场景。早上、中午、晚上召回的食物是不一样的,早上的是早餐推荐,晚上可能是夜宵等。地点大家更好理解,你在不同的地点给你召回的食物一定是你所在地附近的店或者你的收货地址附近的店提供的。

像携程这种生活消费类APP,当你出行时,在不同的天气状况下为你召回的出行方式或者旅游地点应该是不一样的。

场景数据也比较好理解。比如你最近浏览了手机,那么淘宝会给你召回手机相关的电子产品,一旦当你付款买了手机后,就应该给你召回手机配件(比如耳机、贴膜、挂饰等)等产品,这个时候再给你召回手机就是非常傻的策略了。

6.2.3 基于算法是否个性化的分类

基于召回算法是否是个性化的,召回算法可以分为非个性化召回算法和个性化召回算法。下面分别简单介绍。

6.2.3.1 非个性化召回算法

所谓非个性化召回算法就是不基于某个待推荐用户相关的信息进行召回,比如前面提到的热门召回、基于运营策略、基于时间、基于地域的召回都属于这一类。

6.2.3.2 个性化召回算法

所谓个性化召回算法就是基于用户相关信息(比如用户画像、用户行为、群体行为等)进行召回的算法,比如基于用户兴趣标签的召回、协同过滤召回都属于这一类。

如果用一句话来总结非个性化召回和个性化召回的区别,那就是:如果这个召回算法为每个用户召回的结果是不一样的就是个性化召回,如果是一样的就是非个性化召回。

上面从多个维度来介绍召回算法的目的是希望大家可以更好地理解召回算法可以怎么做,实际上企业级推荐系统是会基于具体业务场景采用多种召回算法的。很多召回算法也可以归为多种类别,下面用表格列举一些常用的召回算法及它们的分类,方便读者可以更好地参考。

召回算法

基于算法复杂度分类

基于数据维度分类

基于是否个性化分类

热门召回

规则策略

行为数据

非个性化

物品标签召回

简单算法

物品数据

非个性化

用户画像召回(包括兴趣标签)

简单算法

用户数据

个性化

地域召回

规则策略

场景数据

非个性化

时间召回

规则策略

场景数据

非个性化

协同过滤(item-based、user-based)召回

简单算法

行为数据

个性化

矩阵分解召回

简单算法

行为数据

个性化

关联规则召回

简单算法

行为数据

个性化

用户聚类召回

简单算法

行为数据

个性化

朴素贝叶斯召回

简单算法

行为数据

个性化

深度学习召回

复杂算法

行为数据

个性化

上面简单介绍了各种召回算法及其分类,大家应该对常用的召回算法有了一个大致的了解了。在企业级推荐系统中使用召回算法也需要注意一些事项,下面我们来简单总结一下。

6.3 关于使用召回算法的3点说明

企业级推荐系统是一个非常复杂的业务系统,涉及到非常多的部门的配合,在真实业务场景中使用召回算法,我们需要注意如下3点。

6.3.1 尽量别使用太复杂的召回算法

召回的目的是为推荐进行初筛,所以需要在精准度和效率之间做平衡。太复杂的召回算法工程实现难度大,计算效率低(因为要从所有候选集中选择待召回的物品),使用这类算法是不划算的,特别当你的物品数量非常多时。

虽然我们在前面提到YouTube的深度学习推荐系统(参考文献1)用深度学习作为召回算法,但是它们在具体召回中是采用了一些工具和技巧的,采用了这些技巧后能在毫秒级从千万级的候选集中进行召回,所以是可行的。后面我们在介绍这个召回算法时会详细说明。

6.3.2 尽量用多维度的召回算法

前面也提到过,用多个召回算法相当于采用了集成学习的思想。既然召回算法建议大家用简单的算法,那么它的准确度不会特别高,如果我们采用多个召回算法(特别是从非常有差异性的召回算法),那么就可以提升整体召回的准确度了(这就是集成学习的优势)。

具体采用多少个召回算法因具体业务及资源而定。我个人建议至少要有3类召回算法:基于规则策略的召回(比如热门召回)、基于算法的召回(协同过滤、矩阵分解等)、基于内容的召回(比如基于兴趣标签的召回)。

6.3.3 需要要基于业务策略进行召回

推荐系统一般是要解决一些具体的业务问题的(比如用户停留时长、留存、转化等),那么基于业务目标去选择一些满足业务价值的召回算法是必须的。这里举个简单例子说明一下,比如业务目标是希望提升用户的视频观看时长,那么一些经典的好电影或者那些人均播放时长长的电影是可以作为一个召回策略的。

6.4 总结

本章我们介绍了推荐系统中常用的召回算法,这些算法是推荐系统的基础和核心,是每个从事推荐算法工作的人必须要了解、掌握和熟练运用的。本章我们也从多个维度来对召回算法进行了简单分类,希望不同维度的分类可以帮助读者更好地了解各个召回算法的特点及它们之间的区别和联系。我们会在后续章节对常用的核心召回算法的原理进行深入介绍,大家可以持续关注这一系列文章。

参考文献

1、[YouTube 2016] Deep Neural Networks for YouTube Recommendations

标签: #一种个性化旅游线路推荐算法