一猜一个准,详解电商的推荐系统的召回策略
梁唐 TechFlow
大家好,好久没有写推荐系统了,今天和大家聊聊推荐系统当中的召回策略。
在之前的文章当中曾经提到过,无论是推荐、广告还是搜索,基本上都可以简单分为召回和排序两个阶段。召回阶段也就是选出候选的内容,而排序阶段则是调用模型对候选的内容进行预测打分。最后排序系统根据模型的打分对内容进行排序以及过滤、筛选,最后把内容返回给用户。
这是从之前的文章当中搬来的,大家可以看看,差不多就是这么个结构。
这里的召回我们简单画了一个框就概括了,其实当中有很多的门道可以说,也就是我们常说的召回策略。在我们介绍具体的策略之前,我们先来思考一个问题,究竟我们为什么需要召回策略,我们的召回策略又是如何设计的,它的依据是什么?
召回策略
根据我的理解,召回策略和场景强相关,所有的策略都是围绕场景而建设的。
众所周知,推荐系统说是一个系统,其实应用的场景有很多。我们以淘宝为例,其实有很多展示区域的商品都是从推荐系统来的。我们随便举两个例子。
这是首页的feeds流,也就是我们在首页一直往下刷,以流形式展示的商品。这里的商品不是搜索来的,用户浏览的时候也没有强烈的意图,所以只能从推荐来,可能也会有一些广告商品,但是主体肯定是推荐。
首页feeds流这是商品详情页下的为你推荐,从名字我们就可以看出来,这也是从推荐系统来的。同样也会有部分广告,这里我们不做过多讨论。
商品页-为你推荐这是首页天猫精选栏目跳转的会场,同样是流形式的商品展示,和首页的逻辑类似,同样是基于用户意图的推荐。可能唯一的不同是商品的选择只包含天猫。
天猫精选会场
多路召回
我这里只是随便列举了一些,除此之外的场景还有很多。判断的方法也很简单,一般情况下大量的商品展示,并且没有强烈用户意图的场景,基本上都是推荐的场景。在电商当中可以说除了搜索之外,基本上都是推荐场景。所以大家也可以看得出来,推荐系统对于电商来说的重要性,非常关键,根据业内的以往经验,推荐入口一般承担了用户30%以上的流量,这是非常非常可怕的。
那么这些场景和策略之间的关系是什么呢?这就需要我们结合用户意图来思考了,举个例子,比如说当一个用户刚刚进入淘宝的时候,他会想要看一些什么呢?
我估计大多数人会说当然是用户感兴趣的啦,但问题来了,究竟什么是他感兴趣的呢?我们怎么定义感兴趣呢?你看就很难了对吧,我们还是要从实实在在的数据入手。用户感不感兴趣怎么衡量?目前的策略是看行为,你嘴上说自己对美女不感兴趣没有用,你看到美女图片每张都点,那么显然美女就是你的真实兴趣。在电商场景下基本上也是类似,用户点击的、加购的、购买的,这些行为的背后往往就是用户的兴趣。
但是既然是推荐,也不能结合得太紧,我昨天买了乒乓拍,今天还给我推乒乓拍我显然是不会高兴的。所以我们还需要适当做一些延展,比如今天不推乒乓拍了,改推羽毛球拍,或者是球鞋或者是乒乓球等等。虽然这样看起来丰富了很多,但是数量还不够多,想想看如果首页看到的全是体育商品,会不会也很烦?因为人的爱好往往是多样的,我虽然买了乒乓拍,我可能还会喜欢别的,而且有些用户可能刚刚注册,都没有什么行为,对于这些用户总不能什么也看不到吧?
所以我们需要设计多种策略,进行多路召回。比如我们也会选一些全网卖得好的商品,也会选一些用户关注的店铺的新品等等,这样选品的多样性提升了,并且也保证了所有的用户都能看到丰富多彩的商品,不至于单调。这种多种策略共同召回的措施业内称为多路召回。
结合场景
但是说了这么多,好像还没有提到场景,其实已经都隐含在里面了。
我们再举个例子,比如说商品详情页下的为你推荐这个栏目。我们来想一下,用户在看到这个栏目的时候,他会期待什么?比如我这里展示的主商品是一个电脑机箱,他会期待在为你推荐里看到hello kitty吗?会期待看到手办吗?还是会期待看到iPhone呢?
其实很简单,大多数情况下,用户点开了主机箱,最期待的就是主机(配件)。他大概率会想要货比三家,或者是看看其他的配件。如果这个时候能够推荐出来,这样就节省了用户搜索并且查看的时间,用户会点击的概率就会很高。当然不只是主机,还有一些周边产品,比如鼠标、键盘,但是这些商品的优先级会不如主机(配件)。
你说在这个栏目推荐全网热门商品合适吗?显然是不合适的,因为在这个场景下用户的意图是相对明确的。其实说白了,所谓的场景就是帮助我们明确用户意图用的,根本还是用户意图,场景只是表象。但不管大家能不能理解到这一层,但至少可以理解,对于召回策略来说,是跟场景强相关的,我们使用什么样的策略,更多的还是取决于场景,而不是算法。
协同过滤
推荐系统下常常提到的一个算法就是协同过滤,我们在之前的文章当中也曾经详细写过它的原理,这里我们就不赘述了。有需要的同学可以点击下方的传送门回顾一下。这里我主要想要分享一下协同过滤的使用和特性。
协同过滤在很长一段时间内被认为等价于推荐算法,其实这是不对的,协同过滤目前应用最广的就是一种召回的策略。它最大的用处是召回相似的商品,本质上这是一种计算商品相似度的一种算法。怎么计算商品的相似度呢?通过用户来计算,如果若干商品被类似的用户发生过行为,那么就认为它们是相似的。
但是这个只是感性的认识,对于算法而言,我们需要明确的指标以及计算方法。所以我们把用户的行为抽象成向量,通过计算向量的相似度来计算商品之间的相似度,这当然是一种近似,而且是一种粒度很粗的近似,但是对于大多数不能直接计算相似度的场景而言,这样的方式的效果还是很不错的。
协同过滤一般主要分为两种,一种叫做i2i,一种叫做u2i。i2i即item to item,也就是计算item之间的相似度,寻找相似item。u2i则是user to item,根据用户向量寻找和用户向量相似的item,这种应用得比较少一些。还有一种稍微冷门一些的叫做u2u2i,也就是先找到用户的相似用户,然后再找到相似用户喜欢的item。
一般来说我们在推荐系统当中,i2i使用得更加广泛一些。因为寻找相似商品的场景很多,无论是首页的feeds流推荐还是商品详情页的猜你喜欢推荐,i2i召回都是主力军。
embedding召回
embedding召回这两年比较火热,很多地方都提到,这里面的paper以及相关的做法也很多,我应用得也不多,只能简单聊聊我知道的。
embedding可以简单理解成向量,把商品包含的关键信息尽可能存储在低维度的向量里。我们可以利用种种算法把用户或者是商品映射成一个向量。这里的方法非常多,我们可以简单地使用FM或者类似的模型来完成,也可以训练一个类似的带有embedding层的深度模型,还可以使用Deepwalk等算法来进行。这里的方法各有优劣,我就不一一细说了,总之做到这一点的方法还挺多的。
既然我们可以把所有的商品全部转化成向量,那么我们就可以用向量在高维空间中的距离来代表商品之间的相似度。那么对于召回来说,我们就可以把寻找相似商品这个问题,转化成寻找距离最接近的商品这个问题。其实这种方法本质上也是一种i2i的算法,一般来说我们embedding的过程都需要借助深度模型来完成。它的好处是深度学习的模型拟合能力比较强, 可以很好地保留关键信息,效果一般都还不错。但是问题是深度模型的可解释性非常差,对于bad case无法很好地处理。所以据我了解,主流对于这种做法还处于早期探索和实验阶段,并没有完全成熟。
其他策略
除了上面提到的种种策略之外,还有一些基于场景的其他策略。比如说在首页选择热门商品,或者是对用户进行简单的分层。
举个例子,比如按照用户的粘性进行分层,分为新用户、老用户以及即将流失的用户,这是常规用户增长团队对于用户的一个划分。对于不同层次的用户召回的策略可能也不一样,比如说新用户可能对于平台还不熟悉,那么需要多推荐一些高性价比、高折扣的商品,吸引住用户留下来。对于即将流失的用户也同样如此,需要尽可能帮助他们找到平台的价值,否则很容易失去他们。而那些心智成熟经常来逛的老用户,则是公司盈利的主力军,所以对于他们可能更需要推荐一些能够引起他们成交的商品,所以需要根据他们的喜好来进行推荐。
这里只是简单地举了个例子,实际上可以想到的基于场景的策略还有很多。比如基于性别推荐、基于节假日、工作日的区分进行推荐、基于早中晚的时间进行推荐等等。这些策略一般也都不是拍脑袋,同样需要基于场景对于用户行为的理解和分析,有时候还需要进行一些数据分析,不能盲目地靠主观感觉。在大数据时代经常会出现违反我们主观直觉的事情。
一般来说推荐系统的召回策略不止一个,都会从多个策略进行商品的召回,然后在排序阶段通过模型对于不同策略召回的商品进行打分和排序。有时候甚至还需要再经过一层对展现的商品进行调整,防止大批同类商品聚集在一起给用户观感不好,这样就可以保证用户看到的是一个比较丰富并且贴合兴趣的结果,从而尽可能吸引用户浏览。
相信大家也可以感觉到,淘宝这几年的推荐做得是越来越好,经常一不小心逛很久。这背后除了ranking模型的迭代和升级之外,也同样离不开召回的策略。某种程度上来说,召回其实是推荐的基础,因为选出来的商品本身就很烂,无论如何排序都不可能获得很好的结果。所以如果大家对于推荐系统比较感兴趣的话,对于召回这个阶段也不能疏忽,一样需要深入研究和学习。
今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、在看、转发)