Fork me on GitHub

推荐系统全链路(4):打压保送重排策略 - 拍不完的脑袋

转自:知乎-水哥
链接:https://zhuanlan.zhihu.com/p/403773390
说明:本文仅用于知识交流,如有侵权,联系删除

saying

1.懂模型不只是要知道模型能干什么,更要知道它不能干什么
2.在从业一段时间后应该有一次“转职”,如果你相信模型无所不能,你应该走科研路线;如果你对模型不是很放心,那你应该成为一名工程师
3.舍弃一些眼前利益是短痛,把平台的活力做没了就是长痛了
4.我们要把模型看作是一个喜欢敷衍甩锅的人,时时刻刻要防止它在我们给定的任务上作弊偷懒
5.做模型好看是好看,但是慧极必伤。只有拍脑袋才是永恒(误)

在这一讲开始之前,我们先回答上一讲留下的问题(几千阅读都没有人回答下的嘛。。。)

Q:为什么我们需要多路召回,而不是一个主路就把所有的情况都涵盖了?

A:由于之前讲过的原因,召回是时延负担最大的地方,这个客观条件使得我们设计的模型都相对简单。在这样的情况下,模型能力比较弱,不太可能做到“涵盖所有情况”。

Q:

  1. 为什么刷单对商家有利可图?
  2. 它符合我们这两讲中的哪一条性质?
  3. 刷单这种手段是否可以检测出来?涉及到哪一类算法?

A:刷单就是漏斗的后面环节。订单,购买等行为是较强的正样本,根据前面讲的正反馈性质,这一系列正样本会使得商家在模型的预估和排序上更靠前(不论是推荐中还是搜索中都有可能)。这个手段涉及的算法是反作弊,举个例子就是下单行为总是集中在某几个账号,或者有个下单行为连商品都没看完一路直捣黄龙就付款了可能会被标记。


这一讲中,我们要讲一讲模型之外的环节。这些环节看起来并不高大上,但是他们的重要性一点也不低。在推荐的整过程中穿插着许多策略环节来辅助。这些策略有些是为了推荐的结果更好,有些则是为了某种长期规划或者营利诉求。

刚毕业的同学可能会觉得模型很高级,写ifelse很low。我个人不提倡大家这样想问题,因为在求学阶段我们天天面对的都是模型,所以会不自觉的带着“模型即世界”这样的思维惯性。我们跳出这个视角,现在的主流模型无非就是一些MLP,transformer啊,mmoe之类的。你要说这些新模型距离线性回归变化大,那当然是很大。但是你要说现在的模型无所不能了,那显然也还差的远。有很多的策略,机制都是在弥补模型能力的欠缺。当我们称为一名工程师的时候,除了知道模型能做什么之外,还需要想想模型不能做什么。

我一直说相对于模型,策略其实是一个更有门槛的领域:模型研究的是客观规律,而策略可能研究的是人心。研究模型易,读懂人心难。在本讲我们介绍几种最常见的策略环节。

上面的图展示了策略可能在模型附近出现的环节(当然做活动撒币之类的都算策略,不过些我们可以留到运营篇再慢慢讲),其中黄色标出来的部分都是策略部分 。可以看到,策略本身就可以成为一路召回,比如前面讲的按照热度或者精品池召回。策略可以强行在排序的过程中保送一部分内容,还可以在输出结果后进行重组。

本讲具体介绍下面几种策略:

根据标签区分对待

标签系统高度渗透在整个推荐的流程中。标签系统最重要的功能,是对用户进行分层。根据当前用户是属于活跃或者非活跃,是老用户还是新用户,是哪一个年龄段的用户,都要制定具体的策略。许多产品,运营同学的第一课,就是一定要学会分层的看待用户 ,针对性的优化每一种群体的体验。这就需要我们通过用户的历史行为,或者调查问卷等信息来进行判别。我们先忽略如何得到用户的标签,讨论下有了用户的标签之后怎么用。

假如有一个金币的补贴策略,意思是说用户做了任务之后会有奖励。这个任务可能是看视频,点关注,分享之类的。我们当然不能对所有的用户都一视同仁了(发金币本身是要算亏损的,最后要评估得到的收益是不是值得这样的亏损),一方面,这个活动的主要点当然是在刺激那些看视频不是很多的用户,那一个本来就会看很多视频的用户激励自然就没必要那么多。除此之外,在不活跃的用户里面,还要区分敏感与不敏感的用户。有的用户很喜欢这种激励,本来没什么热情,你一发金币他马上就看得多了起来。但是有的用户可能很佛系,你发了他也不怎么受到鼓励,那我们就会倾向于给那些容易受到激励的用户多发金币。这个例子中,判别用户是不是活跃,是不是容易受到激励就是非常重要的。这是标签系统指导策略的一个例子。

标签系统的另一个要点是要突破“语义鸿沟”。比如说当我搜索“盘古七星”的时候,我可能不是要看这个酒店的客房,而是看内部的商户,或者周边有什么吃的(盘古七星,打钱!)。但是周围的商户的店名不可能都带着这四个字。这个时候内部的标签可以给它们打上“盘古七星周边美食”这样一个标签,就可以把它们展示出来。这种用途非常关键,其作用也非常提升用户体验。

打压与保送

并非所有的生产内容,在平台看来都是平等的。有的内容是政府要传达的重要精神,那就算点击率不高,也要放出去。有的内容虽然吸引人,但是很容易消耗掉用户的兴趣,所以要控制度。因此,有的内容我们要打压,有的则要保送。

需要打压的一般有这么几种情况:第一种是观感容易引起不适的,比如各种皮肤病广告。这种内容的密度需要控制,不然天天推这种东西谁顶得住啊。第二种是存在政策风险的,比如某些擦边球内容,平台可能不会强制取消,但是不敢放任,不然容易被警告。第三种是不合时宜的类型,比如时效性很强的新闻,奥运已经过去一个多月了就应该少出现这类内容了。需要保送的一般则有这些情况:最直接的就是掏钱了,那我们就往前排。这样的例子就有淘宝直通车。也没什么别的理由,就是可以创收呗。另一种是平台已经钦定了,比如说我这个APP就要走高端名媛风,那这类内容就得多多推送,我也不在乎不喜欢的用户怎么想,我的人设就这样。



打压和保送的决定一般很早就出现了,比如我们要给哪种item加量;但是实际操作一般是在精排出结果之后,按照他们的标签(就是上面的标签系统)偷偷做点手脚。操作时可以直接对输出分数做boost,加偏置或者乘一个系数。

探索与利用:含泪(笑?)承损

探索和利用本身是一个很大的方向,这里所涉及的也是在精排输出之后的一个环节。其实在这里操作,本身也是打压保送的一种情况。但是探索与利用这里想强调的是,它是一个较为长期的规划,而且可能要承受一定的损失。

探索与利用全称是Exploration and Exploitation,也叫做EE问题。大概可以理解为,当我有一个机会的时候,我可以选择一个未知的东西拿来试试,我也可以选择一个已知的东西来获取收益,如何操作,才能使得利益最大化?

这样揪心的选择往往出现在item冷启动的环节。新视频我们往往要进行保送,有的时候即使其他视频预估的结果更好,甚至它实际上也会更好,我们也要把新视频推出去。一方面,把新视频推出去我们能获得更加丰富的数据,另一方面,不把它推出去我们也不知道它到底好不好。最重要的是,新视频的多少决定了整个平台的活力,永远有新的内容出现,才是一个生命力旺盛的产品。这个东西很像现在的国乒。即使马龙打的好,小胖没有赢过他,大比赛也可能把名额给年轻人。从成绩的角度来讲,当然可能会承受风险,因为你派水平更高的人拿奖更稳,但是这是有隐患的。因为马龙年纪已经比较大了,如果年轻人没有很好的接班,以后的国家队水平会不会倒退?新视频老视频也是这样的。有一些老视频我们当然知道他好,但是必须舍弃这个机会给新视频。否则有一天用户发现平台上全是老内容,就可能会觉得索然无味,然后离开平台。如果不愿意付出短期的一点小损失,会导致未来的重大损失。

实现这种控制的做法一般有两种,一种是区分新老队列,也就是上面图上所画出来的情况,保送队列里面只有新视频,那么一直到最终决策之前,新视频都只和新视频竞争。另一种做法是强制比例,比如我就要我的内容10%是新的,那么每次推送都会看一眼,如果新视频比例不够,我就根据差多远给新视频加权重,反之就减权重。

EE问题的难点是如何把控短期收益和长期收益的关系。就像上面这个例子,投放新视频短期内可能是有损的,但是这个损失是多大,长期的收益怎么衡量,我又怎么知道我所谓的长期收益值得现在的付出呢?这些问题是很难解决的,可能也区分一个决策者的水平。

重排序:生态控制

重排序一般来说要做这么几件事情:

  1. 控制展示内容的多样性。含义就是,我可能一次输出n个结果,这n个结果不能都讲的是同一件事情。否则对用户体验的伤害极大。不知道有没有同学记得大概17年底某资讯软件A被停了三天,那几天我下载了其他几个资讯软件BC,但是一刷就发现每次出来的n个内容虽然不是同一个人所写,但是讲得都是同一件事情。很快我就又把它们删掉了。
  2. 去重复。用户已经看过的,或者类似的进行去除,这个很好理解。
  3. 强插,和上面讲的打压保送类似,这里的做法更加直接,强插的内容可能是不需要经过前面环节的。

在这个部分,我们要说明的一件事情是,策略能做到的一些事情,模型可能很难做到。

这里以图文内容和视频的混排做一个例子。具体来说就是有的APP上,既有图文内容,也有视频。放到同一个模型里面预估当然是可行的。但是实践中往往会出现偏差。视频内容和图像内容比起来,很有可能在很多指标上都是领先的。当这个领先到一定程度,模型就会说:啊,我发现了,视频就是比图文好啊,于是它直接把所有视频的预估都提高。这样下来模型就没有达到当初我们给他的设想,我们认为理论上他能分别学习图文和视频的规律,理论当然是对的,但是机器学习没有理所当然的事情 。实践中往往会退化到简单的一刀切结果上。为了纠正他,我们可能又要在数据采样,loss设计上花很多功夫。这样下来,不仅目的很难达到,解决方案还会变的很丑。

其实这样的问题用一个策略就可以很好地解决:我们先看看总共有多少视频,多少图文,然后按照比例,从各个队列里面抽就行了。一个探究黑盒模型能力上限的问题用几行ifelse就能极大的缓解。

类似的一个策略在美团的公开资料中也存在^[1]^ :比如美食可以分为两种,一种是根据用户过往行为预估出来的喜好,一种是根据用户所处的位置的推荐。这两种我们都需要留一些空间,如果把它们都丢进一个模型去排序,很可能会形成一边倒的结果。

这里的策略其实和模型的边界不是那么严格的。在重排列这块,也会有人用模型来做,我们后面也会讲到。

策略必须存在

策略必须存在,一个理由就是上面所说的模型能力不足。另一个理由是可解释性,在有的场景下,可解释性的重要性是要大于性能的 。比如在广告投放中,你可能可以做到把某个环节替换为模型,但是广告主马上就要问他的素材为什么投不出去了,你的模型是不是对他有意见。这个时候就很难解释。与其惹了金主爸爸不开心,还不如老老实实写ifelse。当你有一套策略的时候,你就可以告诉他,他们的素材哪里哪里不够好,在什么地方根据什么规则吃亏了。


到了这里,我们这个专栏的第一个篇章,基本就结束了。这个篇章是对整个推荐系统的概述。我们称之为“总览篇”。在这个部分我们其实没有把重点放在某一种具体的算法,或者某一篇具体的论文上,而是放在推荐系统的各个需要联合,相互影响的环节上。换句话说,在这一篇希望强调的是某种“大局观”。写这个部分的时候我也注意到很多的产品,运营同学点了关注,这也是我觉得很好的一件事情。

下一个篇章是“模型篇”,在模型篇里面我们会涉及具体的模型。会按照一种模型整体介绍其进展以及优缺点等。

ps:如果您觉得学到了一点东西,请一键三连呀~

下期预告

精排之锋(1):简单复读机LR


本文地址:https://www.6aiq.com/article/1634686439560
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出