梁唐 TechFlow

大家好,好久没有写推荐系统了,今天和大家聊聊推荐系统当中的 召回策略

在之前的文章当中曾经提到过,无论是推荐、广告还是搜索,基本上都可以简单分为召回和排序两个阶段。召回阶段也就是选出候选的内容,而排序阶段则是调用模型对候选的内容进行预测打分。最后排序系统根据模型的打分对内容进行排序以及过滤、筛选,最后把内容返回给用户。

这是从之前的文章当中搬来的,大家可以看看,差不多就是这么个结构。

这里的召回我们简单画了一个框就概括了,其实当中有很多的门道可以说,也就是我们常说的召回策略。在我们介绍具体的策略之前,我们先来思考一个问题,究竟我们为什么需要召回策略,我们的召回策略又是如何设计的, 它的依据是什么

召回策略

根据我的理解, 召回策略和场景强相关,所有的策略都是围绕场景而建设的。

众所周知,推荐系统说是一个系统,其实应用的场景有很多。我们以淘宝为例,其实有很多展示区域的商品都是从推荐系统来的。我们随便举两个例子。

这是首页的feeds流,也就是我们在首页一直往下刷,以流形式展示的商品。这里的商品不是搜索来的,用户浏览的时候也没有强烈的意图,所以只能从推荐来,可能也会有一些广告商品,但是主体肯定是推荐。

首页feeds流这是 商品详情页下的为你推荐,从名字我们就可以看出来,这也是从推荐系统来的。同样也会有部分广告,这里我们不做过多讨论。

商品页-为你推荐这是首页天猫精选栏目跳转的会场,同样是 流形式的商品展示,和首页的逻辑类似,同样是基于用户意图的推荐。可能唯一的不同是商品的选择只包含天猫。

天猫精选会场

多路召回

我这里只是随便列举了一些,除此之外的场景还有很多。判断的方法也很简单,一般情况下 大量的商品展示,并且没有强烈用户意图的场景,基本上都是推荐的场景。在电商当中可以说除了搜索之外,基本上都是推荐场景。所以大家也可以看得出来,推荐系统对于电商来说的重要性,非常关键,根据业内的以往经验,推荐入口一般承担了用户30%以上的流量,这是非常非常可怕的。

那么这些场景和策略之间的关系是什么呢?这就需要我们 结合用户意图来思考 了,举个例子,比如说当一个用户刚刚进入淘宝的时候,他会想要看一些什么呢?

我估计大多数人会说当然是用户感兴趣的啦,但问题来了,究竟什么是他感兴趣的呢?我们怎么定义感兴趣呢?你看就很难了对吧,我们还是要从实实在在的数据入手。用户感不感兴趣怎么衡量?目前的策略是看行为,你嘴上说自己对美女不感兴趣没有用,你看到美女图片每张都点,那么显然美女就是你的真实兴趣。在电商场景下基本上也是类似,用户点击的、加购的、购买的,这些行为的背后往往就是用户的兴趣。

但是既然是推荐,也不能结合得太紧,我昨天买了乒乓拍,今天还给我推乒乓拍我显然是不会高兴的。所以我们 还需要适当做一些延展,比如今天不推乒乓拍了,改推羽毛球拍,或者是球鞋或者是乒乓球等等。虽然这样看起来丰富了很多,但是数量还不够多,想想看如果首页看到的全是体育商品,会不会也很烦?因为人的爱好往往是多样的,我虽然买了乒乓拍,我可能还会喜欢别的,而且有些用户可能刚刚注册,都没有什么行为,对于这些用户总不能什么也看不到吧?

所以我们需要设计多种策略,进行多路召回。比如我们也会选一些全网卖得好的商品,也会选一些用户关注的店铺的新品等等,这样选品的多样性提升了,并且也保证了所有的用户都能看到丰富多彩的商品,不至于单调。这种多种策略共同召回的措施业内称为 多路召回

结合场景

但是说了这么多,好像还没有提到场景,其实已经都隐含在里面了。

我们再举个例子,比如说商品详情页下的为你推荐这个栏目。我们来想一下,用户在看到这个栏目的时候,他会期待什么?比如我这里展示的主商品是一个电脑机箱,他会期待在为你推荐里看到hello kitty吗?会期待看到手办吗?还是会期待看到iPhone呢?

其实很简单,大多数情况下,用户点开了主机箱,最期待的就是主机(配件)。他大概率会想要货比三家,或者是看看其他的配件。如果这个时候能够推荐出来,这样就 节省了用户搜索并且查看的时间,用户会点击的概率就会很高。当然不只是主机,还有一些周边产品,比如鼠标、键盘,但是这些商品的优先级会不如主机(配件)。

你说在这个栏目推荐全网热门商品合适吗?显然是不合适的,因为在这个场景下用户的意图是相对明确的。其实说白了,所谓的 场景就是帮助我们明确用户意图用的,根本还是用户意图,场景只是表象。但不管大家能不能理解到这一层,但至少可以理解,对于召回策略来说,是跟场景强相关的,我们使用什么样的策略,更多的还是取决于场景,而不是算法。

协同过滤

推荐系统下常常提到的一个算法就是协同过滤,我们在之前的文章当中也曾经详细写过它的原理,这里我们就不赘述了。有需要的同学可以点击下方的传送门回顾一下。这里我主要想要分享一下协同过滤的使用和特性。

SVD | 简介推荐场景中的协同过滤算法,以及SVD的使用

协同过滤在很长一段时间内被认为等价于推荐算法,其实这是不对的,协同过滤目前应用最广的就是一种召回的策略。它最大的用处是召回相似的商品,本质上这是一种计算商品相似度的一种算法。怎么计算商品的相似度呢?通过用户来计算,如果若干商品被类似的用户发生过行为,那么就认为它们是相似的。

但是这个只是感性的认识,对于算法而言,我们需要明确的指标以及计算方法。所以我们把用户的行为抽象成向量,通过计算向量的相似度来计算商品之间的相似度,这当然是一种近似,而且是一种粒度很粗的近似,但是对于大多数不能直接计算相似度的场景而言,这样的方式的效果还是很不错的。

协同过滤一般主要分为两种,一种叫做i2i,一种叫做u2i。i2i即item to item,也就是计算item之间的相似度,寻找相似item。u2i则是user to item,根据用户向量寻找和用户向量相似的item,这种应用得比较少一些。还有一种稍微冷门一些的叫做u2u2i,也就是 先找到用户的相似用户,然后再找到相似用户喜欢的item

一般来说我们在推荐系统当中,i2i使用得更加广泛一些。因为寻找相似商品的场景很多,无论是首页的feeds流推荐还是商品详情页的猜你喜欢推荐,i2i召回都是主力�