召回粗排精排-级联漏斗(上)

23bf511d8effa5ed587b631fd345b65f.png

文 | 水哥
源 | 知乎

saying

1. 把点击多的item曝光提升是推荐模型的基本能力,也是基本要求。后验不好的曝光提高也可能是好模型,后验好的曝光不提高,可以开除推荐模型了
2. 在起量阶段,各路item需要争宠,谁能最快博取精排的欢心,谁就有可能在冷启动阶段占据压倒性优势
3. 广告主很像dota教练,他们深信一个原则:阵容(素材)没问题,下把干(投放)回来
4. 粗排没别的任务,就是向上管理

上一讲我们提到,整个链路是一个大漏斗,前面召回入口最多,最后精排仅仅输出一点点,在这一讲中我们会对漏斗的连接部分做更多的分析。包括上一讲中很多同学都想问的粗排,召回的学习目标,评价标准分别是什么,也会在这一讲和下一讲中详细讲解。

首先我们要分析漏斗的各个环节,学习的目标是什么。虽然整个链路正着往后推理,但是改进的时候往往是倒着往前的,原因我们在上一讲提到过。假如想加某种特征,那么先是精排验证有效,然后粗排。召回可以不按照这个规则走,因为召回很多时候是觉得上面的队列里缺少哪一方面的东西,才多一路的。

各个环节的学习目标及问题

精排的学习目标:后验

以点击率(CTR)预估为例,精排学习的目标的范围一般是所有存在曝光的样本。有曝光但没有点击的是负样本,有曝光也有点击的就是正样本。在其他目标中可以以此类推:比如转化率(CVR)预估,点击了没转化的是负样本,点击了,也转化了就是正样本。

精排的评估方式:AUC/GAUC

说白了,精排还是一个排序模型,排序模型输出的结果,线下都可以由AUC来进行评估。在[1]这篇论文中,阿里的工程师们提出了另一个评价指标:Group AUC(GAUC),如下:

4811ebbd4c2e715137acc244b367f4a6.png

在这个指标中,w代表的是曝光数或者点击数。这个指标是对用户的行为做了加权,比较偏向高活跃的用户。

线上指标则根据业务各有不同,比如在短视频平台上,推荐看的就是观看时长,而广告看的则是eCPM(出价乘以CTR乘以CVR)。在电商平台上看的是GMV(Gross Merchandise Volume,商品交易总额)。线上提升是由线下的一个一个模型提升带来的。比如在广告场景下,既要提升CTR,也要提升CVR,也要改善出价机制。推荐场景下,既要提升对于观看时长的预估,也要提升用户正负反馈(比如点赞关注这些)的预估。

精排的样本组成

在精排中,每次行为都是一条样本,最后实际上是一个分类任务,分为“点击”或者“不点击”的二分类。在一个点击率预估模型中,正样本是非常稀疏的。对于模型来说,当他遇到正样本的时候,它必须把这个结果反映到当前的用户和item上。也就是说,相比于没有点击的样本,这个item会得到模型的认可。那么在接下来的预估中,这个item自然会被更加青睐,排序更加靠前。这样就使得item的曝光能力提升。这样我们就归纳出了推荐系统的一个基本性质:正反馈的能力。指的是对于一开始后验较好的item,他们的排序更靠前,曝光会进一步提升。如果去掉一开始这三个字,这句话就是一句废话。但是所谓“一开始”就表明该item不一定是一个真正好的素材,而这会引发下面的问题。

(这里留一个思考题,这个正反馈会无限地持续下去吗?答案我们在未来专门讲item的生命周期中来揭晓)

精排的问题1:ground truth不够置信

我们想评价一个item的质量是否好,其实是需要一定量的曝光量才能说明。但是系统整体的曝光机会往往是有限的。给你的曝光多了必然意味着对他的曝光机会少了。因此有很多item在没有得到充分曝光的情况下就被判了死刑。有的item可能不错,但是在一开始因为有点随机性,或者精排没预估的比较准,导致最初的量没起来。当最初的量没起来的时候,别的起来了的item迅速博取了精排的欢心,这个不幸运的item就只能被打入冷宫了。如下图

7e8487380f648f06bbc3a7d31dffe743.png

这个问题不仅我们知道,广告主们也知道。他们不仅知道,他们还会不服。他们当然会优化素材,但同时也会进行大量的“重开”,即同样的素材内容,换一个id再来一遍(当id变成新的,系统就会把它当做新的重新开始,这涉及到后面要讲的冷启动问题)。这就是所谓的“阵容没问题,下把干回来”。当大量的广告主这样做了之后,平台资源就会被极大的浪费,因此平台也会做各种方法来阻止这件事情。所以我们也能看到,平台和金主爸爸有时候也存在一种博弈。

精排的问题2:自嗨

从上面的叙述中,可以看出精排学习的目标往往有一个共同的特点,就是正负样本都来自于已经曝光的样本,而曝光与否是谁决定的呢?是精排自己决定的。这就造成了“自己学自己”的问题,学习的目标本来就是自己产生的,在自己原本的大方向上有可能一条路走到黑。设想有AB两个item,实际上B是一个更优秀的素材,因为系统随机性或者精排的缺陷,A获得了更多的曝光量,而B只获得了很少的曝光量。而B恰好在这几个曝光量中都没获得什么正向反馈。那接下来B就惨了,根据我们上面说的正反馈特性,A的曝光会越来越高,正向的点击数据越来越多,而B可能就暴毙了。这个情况如果不断恶化,推荐系统可能会陷入局部最优中出不来,也就是我们说的“自嗨”:它认为A好,所以给了A更好的条件,而A自然获得了更好的反馈,又再一次验证了系统的“正确性”。最终在A比B好的错误路线上越走越远。

那么有什么办法可以防止这个情况?一般来说有两种方法。第一种是策略的干涉。有的策略会强制一定的探索量,比如上面的B曝光不能低于100,这样会缓解一些学习错误的问题。可能还是有个别item的序会不符合,但是整体上发生错误的概率会变低。另一种做法是开辟“随机流量”,即有一定比例的请求不通过任何模型预估,直接随机展示看看点击率。随机流量的结果一方面可以认为是完全真实的训练样本,另一方面也可以对照当前模型的效果。


讲完了精排部分,我们再来讲讲粗排部分

粗排的学习目标:精排

naive的方案中,粗排也可以直接学习后验数据。但这不是一个好主意,你又决定不了输出,学精排(领导)的做事方法,你优化的目标精排(领导)不认,还没干好自己的本职工作(向上管理)。毕竟后验是精排控制的,粗排只能优化级联的下一端。

粗排的学习目标应该是精排的输出。说白了,粗排只是一个精排的影子,就像上一讲提到的,要不是精排吃不下,也不会需要粗排。因此粗排就是跟精排保持步调一致。如果粗排排序高的,精排排序也高,那么粗排就很好的完成了“帮助精排缓冲”的目的。反之,如果你排序低的,精排反而排的高了,那你不就是跟领导对着干嘛。

粗排的样本组成+学习方法:Learning to Rank

对于粗排,我们需要两个,或者一组样本。假如精排的队列有100个排好序的样本,我们可以在前10里面取出一个A,作为好样本。再从后10个取出一个B当做坏样本。粗排的目标,就是要让自己也认为A好于B。越是这样,它就和精排越像,就越能帮精排分担压力。

此时不是一个分类任务了,而是learning to rank的一种方法,pairwise的学习。目标是让上面的A和B之间差距尽可能大(还可以更彻底的拿出更多样本,比如精排输出每10个里面取一个,得到一个长度为10的list,按照list-wise的方式去学习。list-wise比较复杂,后面再讲)。这里先提一下pairwise如何实现。我们把两个样本记为 和,做差之后带入一个binary cross entropy的loss:

其中 代表sigmoid。假如第一个样本更好, ,只有前半部分被激活。此时loss最小就要求 比 大的越多越好。反之亦然。

注意在这样的设计下,我们就把没有曝光的样本纳入训练范围了。粗排入口比精排大,训练样本也比它多,这就很合理。

最后用一张图来总结下:

c3fc5b58e79a45a49bd41b5b16eaaae9.png

粗排的评估标准:精排

既然粗排学习的目标是精排的输出,那么粗排的评估自然也就是学精排学得像不像。在线下可以有两种指标来评估。一种是NDCG,它是一种评价两个排序相似度的指标,就是把精排输出的样本让粗排过一遍,看看粗排输出的排序结果和精排有多像。

NDCG的具体计算方式:yone:NDCG及实现[1]

第二种评估方式是召回率,或者重叠度(也可以用IOU啥的)。即精排输出的前K,有多少在粗排输出的前K里面。这个也是用来评价两个模型输出像不像。

相比之下,NDCG是一种更细致的指标。我们可以认为NDCG不仅仅刻画了topK的召回,也刻画了top K-1,K-2……等等情况。

讲完粗排之后发现要讲的东西太多了,写不下了,我们留(鸽)到下一讲吧

下期预告

推荐系统全链路(3):召回粗排精排-级联漏斗(下)

往期回顾

1.召回 粗排 精排,如何各司其职?

2.拍不完的脑袋:推荐系统打压保送重排策略

3.简单复读机LR如何成为推荐系统精排之锋?

ccaa6f510ec79e64edbcdcef4c1aeb60.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

fb01e90a5cb75b2abe5678b5c3f3cc96.gif 571c61531d690028007ec945e87ff1d9.png

[1]. yone:NDCG及实现 https://zhuanlan.zhihu.com/p/84206752

[2]. Optimized Cost per Click in Taobao Display Advertising

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美团Android资源混淆保护实践

前言 Android应用中的APK安全性一直遭人诟病,市面上充斥着各种被破解或者汉化的应用,破解者可以非常简单的通过破解工具就能对一个APK进行反编译、破解、汉化等等,这样就可以修改原有代码的逻辑、添加新代码、添加或修改资源、或者更有甚者植…

搞不懂,为啥现在什么公司都在考算法???

昨天在知乎上刷到一个热门问题:程序员需要达到什么水平才能顺利拿到 20k 无压力?其中一个最热门的回答是:“其实,无论你是前端还是后端、想进大厂还是拿高薪,算法都一定很重要。”为什么,算法会如此重要?不…

OpenKG开源系列 | 中文高中地理知识图谱CKGG(南京大学)

OpenKG地址:http://openkg.cn/dataset/ckggGitHub地址:https://github.com/nju-websoft/CKGG数据地址:https://doi.org/10.5281/zenodo.4668711论文地址:https://doi.org/10.1007/978-3-030-88361-4_25开放许可协议:CC…

LeetCode 892. 三维形体的表面积(数学)

1. 题目 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 示例 1: 输入:[[2]] 输出:10示例 2: 输入&#x…

淘宝数据,数据处理,时间序列分析,获客分析,购买路径分析

-- 创建数据库 create database taobao; use taobao; desc use_behaviour;-- 创建表格 create table use_behaviour( user_id int(9), item_id int(9), category_id int(9), behaviour_type varchar(5), timestamps int(14));-- 查询已导入多少条 select count(*) from use_…

谁说发 paper 一定要追快打新?2021年,研究 word2vec 也能中顶会!

文 | jxyxiangyu前言“小夕,小夕,你关注的任务sota又被刷新了!”“什么?!”还在跑实验的小夕默默流下了辛酸泪不得不说nlp领域的发展真的太快了,炼丹师们不光要时刻关注前沿热点,还要快速做出实…

论文浅尝 | Multilingual LAMA: 探索多语言预训练语言模型中的知识

笔记整理:谭亦鸣,东南大学博士生来源:EACL‘21链接:https://aclanthology.org/2021.eacl-main.284.pdf概述本文关注将语言模型(LM)视作一个知识库,然后用于解决例如句子填空这样的NLP任务&#…

LeetCode 860. 柠檬水找零(贪心)

1. 题目 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零&…

召回粗排精排-级联漏斗(下)

文 | 水哥源 | 知乎saying召回区分主路和旁路,主路的作用是个性化向上管理,而旁路的作用是查缺补漏。推荐系统的前几个操作可能就决定了整个系统的走向,在初期一定要三思而后行。做自媒体,打广告,漏斗的入口有多大很重…

学术联赛 | 运用知识图谱技术,赋能多领域应用 ——“未来杯”AI学术联赛总决赛暨颁奖典礼圆满落幕...

本文转载自公众号:AI学习社。由北京大学软件工程国家工程研究中心主办,华为终端有限公司及中软国际教育科技集团全程战略支持,STEER TECH科技平台、北京乐智元素科技有限公司、艾肯文化传媒(北京)有限公司、AI TIME承办…

LeetCode 1013. 将数组分成和相等的三个部分

1. 题目 给定一个整数数组 A&#xff0c;只有我们可以将其划分为三个和相等的非空部分时才返回 true&#xff0c;否则返回 false。 形式上&#xff0c;如果我们可以找出索引 i1 < j 且满足 (A[0] A[1] … A[i] A[i1] A[i2] … A[j-1] A[j] A[j-1] … A[A.lengt…

谷歌 | 多任务学习,如何挑选有效的辅助任务?只需一个公式!

文 | 小伟编 | 小轶前言说到多任务学习&#xff0c;大家都不陌生&#xff0c;不管是在学术界还是工业界都已经有了很多成熟的探索与应用。在理想的多任务学习中&#xff0c;各个任务对彼此应当是有益的&#xff0c;所有任务相互促进&#xff0c;从而达到超过单任务学习的效果。…

LeetCode 888. 公平的糖果交换(哈希set)

文章目录1. 题目2. 解题2.1 暴力查找2.2 哈希set1. 题目 爱丽丝和鲍勃有不同大小的糖果棒&#xff1a;A[i] 是爱丽丝拥有的第 i 块糖的大小&#xff0c;B[j] 是鲍勃拥有的第 j 块糖的大小。 因为他们是朋友&#xff0c;所以他们想交换一个糖果棒&#xff0c;这样交换后&#…

OpenKG开源系列 | 面向知识的推理问答编程语言KoPL(清华大学)

OpenKG地址&#xff1a;http://openkg.cn/tool/koplGitHub地址&#xff1a;https://github.com/THU-KEG/KoPL网站地址&#xff1a;https://kopl.xlore.cn开放许可协议&#xff1a;MIT License贡献者&#xff1a;清华大学&#xff08;曹书林、史佳欣、姚子俊、吕鑫、聂麟骁、逄凡…

前端组件化开发实践

前言 一位计算机前辈曾说过&#xff1a; Controlling complexity is the essence of computer programming.随着前端开发复杂度的日益提升&#xff0c;组件化开发应运而生&#xff0c;并随着 FIS、React 等优秀框架的出现遍地开花。这一过程同样发生在美团&#xff0c;面临业务…

LeetCode 937. 重新排列日志文件(自定义排序)

1. 题目 你有一个日志数组 logs。每条日志都是以空格分隔的字串。 对于每条日志&#xff0c;其第一个字为字母数字标识符。然后&#xff0c;要么&#xff1a; 标识符后面的每个字将仅由小写字母组成&#xff0c;或&#xff1b;标识符后面的每个字将仅由数字组成。 我们将这…

预训练时代微调新范式,高性能加速2800%,NLPer赶紧看过来!

一、导读PaddleNLP 是兼具科研学习和产业实践能力的 Python NLP 工具包&#xff0c;提供中文领域丰富的预训练模型和部署工具&#xff0c;被高校、企业开发者广泛应用。近日&#xff0c;PaddleNLP v2.1正式发布&#xff0c;为开发者带来三项重要更新&#xff1a;开箱即用的工业…

论文浅尝 | GaussianPath: 用于知识图谱推理的贝叶斯多跳推理框架

笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生来源&#xff1a;AAAI’21链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/16565多跳推理由于对下游任务例如问答和图谱补全的可解释性受到关注。多跳推理是一个典型的顺序决策过程&#xff0c;可表述…

AllenAI 发布万能问答系统 MACAW!各类题型样样精通,性能大幅超越 GPT-3!

文 | python前言GPT-3 等超大规模预训练语言模型&#xff0c;在少监督任务&#xff08;few-shot tasks&#xff09;上取得了令人瞩目的成绩。而这篇文章中&#xff0c;AllenAI的研究员提出了大规模生成式问答模型&#xff0c;MACAW。基于多角度预训练&#xff0c;MACAW可以用于…

论文浅尝 | SMBOP: Semi-autoregressive Bottom-up Semantic Parsing

笔记整理&#xff1a;陈永锐&#xff0c;东南大学博士来源&#xff1a;NAACL 2021概述近年来语义解析的事实上的标准解码方法是使用自顶向下的深度优先遍历对目标程序的抽象语法树进行自回归解码。该工作提出了一种替代方法&#xff1a;半自回归自底向上解析器&#xff08;SMBO…