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

2fdf7474b02318af86759606f36cdc0a.png

文 | 水哥
源 | 知乎

saying

1. 众所周知, 人类(划掉)推荐的本质是复读机
2. 精排之锋,粗排之柔,召回之厚
3. 在推荐里谈“过拟合”很容易给我们造成心理上的松懈,导致我们忽略环境,氛围等多种因素的作用。我们可以说一万遍有过拟合,但是不采取行动,就没有任何作用

这一讲开始,我们将介绍具体的模型。前面我们说过模型有三种:精排,粗排和召回。我们也大致提过,精排的作用是完成给定的拟合任务,没有任何其他杂念,就像一把锋利的刃,纯粹探究模型的上界。粗排是召回和精排之间的承接环节,它更需要的是平衡。而召回需要体现生态的方方面面,它包含了一个研究者对整个业务体系的厚重的思考。

我们分三个部分讲解模型,首当其冲的就是精排模型。在多种多样的模型中,最简单的是逻辑回归。在其他领域逻辑回归可能是一个大家课上都学,但是没什么人用的模型。但是在推荐领域,它做主流的时间可能比很多人想象的要长很多。我知道的一些现在很知名的公司,摆脱LR可能都没几年。从这一讲中我们能看出,逻辑回归虽然简单,但是它已经能贴合推荐这件事情的本质了。

下面进入正题。我们所能想到最简单的,最常见的建模是一个线性模型,其实就是 。在很多问题中直接使 接近ground truth 就可以完成一个最简单的拟合。但是推荐模型预估的问题,一般是点击率之类的,具体操作上是每次展示是否发生点击。点击与否是0/1的。这就要求我们模型的输出应该也是0/1的,或者至少是在 之间(这个时候就表明一个概率)。因此在外面会加上一个激活函数sigmoid(这个函数的输出是限定在0-1之间的),最终得到

这就是逻辑回归最终的形式。

但是上面这个过程,存不存在疑问呢?

为什么是sigmoid?

上面的激活函数使用了sigmoid,我们说是因为他的值域在0-1之间。但是如果仔细想想这个理由还有点牵强:是不是只要输出在0-1之间,什么激活函数都可以?比如说我可不可以先用Tanh把输出范围约束到 之间,再线性变换到0-1之间呢?为什么没有人这样做?可能有别的原因。

这个问题其实我翻找了很多的资料,大多数的回答都不是很令人信服,下面这个解释算是我觉得最让我接受的一个,是我在Quora上面找到一个很好的回答[1],这里转述一下:

这个形式,本身是无界的。我们不能让它去拟合一个 之间的目标。假如说原来点击的概率是 ,我们就要构造一个相关形式,让它的值域是 的,才能进行学习。可以首先做一个辅助函数 ,这样会把输出的范围放大到 之间。接下来再对这个式子取对数,就可以把输出范围变成的,符合我们的要求。即令:

把这个式子解开,就可以得到上面的逻辑回归形式了。

工业界的应用方式

LR在工业界应用时,是有点特殊的。这个特殊的点在特征上。这时候要注意一个时代背景,即特征的处理是比较原始的,怎么简单怎么来。推荐这个阶段的特征,不像其他领域如CV,NLP是一段连续的浮点数向量或者张量,也不是后来的embedding look-up table,而是无数的“one-hot”,怎么理解呢?比如我有1w个item,分别编号1-10000,那么在item id这里,就有1w个特征,只是每一个item只能是其中的一个取值为1,其他的取值都为0(这个就是one-hot). 相应地,也就有1w个不同的 。每一种特征,我们称之为一个slot,仅在这一种slot内是one-hot的。在我们计算的时候, 是binary的,而是浮点数,这个结果其实操作的时候,就是把用户所有不为0的对应的加起来即可。我们用下图来表示:

858dfb4223e1d538deb12d7fe6f68b4a.png

在这个例子中,有三种特征,性别,年龄段,和user ID。注意到这里的表格需要存储所有可能的特征取值。对于当前的用户我们就分析,他的性别,年龄段,ID分别是什么。由于 是0/1的,直接取出对应的,并且和相加。这里只画了用户侧的部分,item侧也是同样的道理。

但是要注意的是,特征在概念上是one-hot的,实际上不需要真正做出来一段向量然后用一个矩阵映射什么的。因为很多时候这个one-hot里面是会有“洞”。即有一些ID可能不出现,这时候再做一个满的矩阵太浪费了。实际中都是稀疏保存的,就是哪个有值存哪个。后面的embedding look-up table也是这么做的。

推荐的本质是复读机

按照上面这个例子,我们设想一个极限情形:如果只有user ID和item ID两种特征,会出现什么情况?

在一开始没有样本来的时候,他们的都没有值(简单起见,假设是初始化为0),如果user 1和item1这个组合发生了点击,那么回传梯度的时候,这两个对应的会以相同的幅度变大一些。接下来,当user2面对item1,由于item1的是有值的,输出的排序就比user2面对一个没见过的item2要大。

所以这个过程其实不是很合理:我们对user2完全没有知识,为什么就输出了一个明显倾向于item1的结果呢?原因是因为user1给出了一个正反馈。我们的模型只能从前面的结果里面去学习,它好像没有什么自己的主见,只会人云亦云罢了。这个例子推到更极限的情况呢?如果只有item ID特征,那这个模型就完全变成了一个简单的计数统计,谁被点的次数多,谁的排序就永远靠前。在这里面没有任何“灵性”,我不用模型也能做到这一点。这就是我们这一讲要强调的一个观点:

推荐的本质是复读机

第一个马上就能想到的问题是,为什么推荐是复读机,而CV,NLP不是?

因为推荐存在不确定性,必须要试错才能拿到label,而且很难归因。当我们面对一组样本,某个用户和某个item,我们是否能说的上这个点击会不会发生?我感觉是很难的。所以只有试了试才知道。这个试错的机制还造就了之前提到过的探索与利用以及冷启动的问题。另一方面,当点击发生的时候,我们也很难说,是因为这个用户就是容易点击,还是说这个item就是好,还是某种巧合。这就造成了上面例子中的问题,也许user1点击item1只是随手一点,模型也会给item1一部分权重(认为它好)。

但是CV,NLP不一样的是,它们的label是一个固定的东西,一幅图片里面是猫就是猫,是狗就是狗,拟合的目标很清晰,且不存在偶然性。

那我们接着往下想,为什么推荐必须要试错才能拿到label?我们可以做到像CV那样,给出一个确定性的判断吗?我的结论是,现阶段不可行,未来说不定可以。在推荐这件事中,有很多的信息我们是拿不到的,比如你在刷视频的时候,你是在公交上还是在教室里?你这次拿起手机之前是和同学聊完天,还是刚刚睡了一觉醒来?你是一个怎样的人?给你推送教育知识会不会让你想起被考试支配的恐惧?这些都是变量,都会影响对当前这个item的判断。然而这些特征暂时都是不可获取的。在著名的《影响力》[2]里面就提到一个例子:当商家在网站上卖沙发的时候,如果背景是云朵,顾客就会更关注舒适度,如果背景是硬币,顾客就会更关注性价比。假如有一天,用户的一切信息,item的一切信息我们都拿到了,那个时候足够好的泛化可能会出现。

所以我个人不太喜欢同学们经常在做推荐的时候频繁提“过拟合”,这个概念没错,但是如果我们把全部注意力都转移到这里,很容易忽视很多值得关注的细节。在我看来,上面这些信息都没有,模型完全还处于远远欠拟合的状态。如果我们对各种特征,对于用户的刻画都全知全能了,那么也许就不需要面临复读机引发的问题了(这里扯得有点远,我们到了产品篇或者运营篇再详细讲讲吧)。

第二个问题是,真实情况真的这么糟吗?

其实也没那么糟,在LR这个模型里面,增加泛化的要点是增加一些能泛化的特征。还是像上面图中的例子,当我们有年龄性别这样的输入之后,一部分归因可以归到年龄性别上,那么下次一个新的用户来的时候,我们就可以根据他的年龄性别给出一些先验判断。这本身也是一种复读,但是更科学了。以此类推我们实际中会加很多能描述用户或者item泛化属性的特征来缓解这个问题。

“推荐本质是复读机”这个理论不是完全正确的,之所以这么说,是希望同学能够以一个更加自如的姿态来看待这个领域。一开始我们往往敬畏之心会过度旺盛,加上圈子里面天天《重磅》《大突破》,渲染的好像有多么高深一样,我们会觉得这个领域不知道从何下手。不如换一个角度,你首先要相信,现代科学的发展没有那么突飞猛进,很多情况都是增量式的改进,你先从简单的视角来看待,慢慢再深入也许上手更快。再说了,复读也不是坏事,只要复读的足够高级,你也看不出我在复读嘛。

强解释性

LR这个模型解释性是非常强的。我们还是举上面图中的那个例子,我们有四种特征,user ID,item ID,年龄,性别。假如在分布均匀的茫茫负样本中,只有三个正样本,分别是:

c80690e6665af7c0d6c1713eb2c0f798.png

通过这些样本,模型会有怎样的趋势,我们能看出怎样的结论?通过对模型的分析,我们可以判断,itemID=10这里,对应的w收到三次正向的梯度,gender=male两次,其他都是一次。那么从模型的角度看,itemID=10就是一个更重要的因素,也就是说,模型认为10号item就是好。如果是我们人为分析的话,我也会这么觉得。模型给出的判断符合人的认知。我们完全可以拿出一个模型,看看里面的分布是怎样的,然后说,幅度明显大的特征,就比小权重的特征更重要。这一点在大多数实践中是成立的。因此事实上,LR也可以作为特征重要性分析的一种工具。

我们本讲中的LR特征种类少,特征的取值也少。但在实际应用中,特征的数量是非常非常多的。比如我又上亿用户的时候,单单user ID这一个特征就有上亿的取值。由于特征的每一种取值都要独占一个,那么也就存在一个对应的。即使我的机器很多,要做完一次预估都需要穷举所有非0的 也是非常非常费劲的。尤其是我可能会得到很多取值是0.0001,0.000001这样的,你说不加吧,结果可能又不对,加上吧,零零碎碎的也太烦人了。怎么样既能做到结果是准确的,又能很省力的完成呢?这就是LR主要面临的问题,请看下期——

下期预告

精排之锋(2):工业LR的稀疏要求

往期回顾

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

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

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

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

后台回复关键词【顶会

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

9e53f7927f2a5b2dfc6e9dc067c8163c.gif d7b1ba1910dd0b22e8b0446afb12ae4c.png

[1]. https://www.quora.com/Logistic-Regression-Why-sigmoid-function

[2]. 《影响力》这是社会心理学的一本很著名的书,推荐大家读一读

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

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

相关文章

从0到1构建美团压测工具

背景 美团内部的RPC服务大多构建在Thrift之上,在日常开发服务的过程中,需要针对这些服务进行压力测试(以下简称压测)来发现潜在问题。常用的方法有: 使用一些脚本语言如:Python、Ruby等,读取线上…

论文浅尝 | ERNIE-ViL:从场景图中获取结构化知识来学习视觉语言联合表示

笔记整理:朱珈徵,天津大学硕士链接:https://www.aaai.org/AAAI21Papers/AAAI-6208.YuFei.pdf动机现有的视觉语言预训练方法试图通过在大的图像文本数据集上的视觉基础任务来学习联合表示,包括基于随机掩码子词的掩码语言建模、掩码…

LeetCode 222. 完全二叉树的节点个数(二分查找)

1. 题目 给出一个完全二叉树,求出该树的节点个数。 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干…

常见的统计分析方法汇总,指标对比分析、时间序列预测

常见的八种统计分析法如下: 指标对比分析法分组分析法时间数列及动态分析法指数分析法平衡分析法综合评价分析景气分析预测分析 1 比较分析法## 一、指标对比分析法指标对比分析法,又称比较分析法,是统计分析中最常用的方法。是通过有关的指…

这三个NLP项目写进简历,网申通过率提高50%

01三大企业级项目项目一京东智能对话系统项目项目简介:智能客服机器人已经成为了客服系统的重要组成部分,帮助人工客服提升工作效率,为企业降低人工成本。作为智能客服的行业先驱,京东多年来致力打造全链路的客服机器人&#xff0…

论文浅尝 | MulDE:面向低维知识图嵌入的多教师知识蒸馏

笔记整理:朱渝珊,浙江大学在读博士,研究方向为快速知识图谱的表示学习,多模态知识图谱。Motivation为了更高的精度,现有的KGE方法都会采用较高的embedding维度,但是高维KGE需要巨大的训练成本和存储空间。现…

LeetCode 453. 最小移动次数使数组元素相等(数学)

1. 题目 给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。 示例: 输入: [1,2,3]输出: 3 解释: 只需要3次移动(注意每次移动会增加两个元素的值):[1,2,3] > [2…

性能优化模式

摘要 性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服务可用性。在某些情况下,降低响应时间、提高…

征稿 | 国际KG大会 IJCKG 2021专辑征文

国际知识图谱联合会议(International Joint Conference on Knowledge Graphs (IJCKG 2021, 与ACM/SIGAI联合办会)今年将于12月6日-8日在线召开。Data Intelligence今年被EI数据库收录后,有幸成为大会推荐期刊,大会优秀论文将推荐在…

200字带你看完一本书,GPT-3已经会给长篇小说写摘要了

文 | 博雯源 | 量子位现在,AI能帮你200字看完一段12万词的长篇小说了!比如这样一段121567词的《傲慢与偏见》原文:▲图源OpenAI官网AI分四个阶段来总结:先把原文总结成276个摘要(24796词),然后进…

LeetCode 1252. 奇数值单元格的数目

1. 题目 给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。 另有一个索引数组 indices,indices[i] [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。 你需要将每对 [ri, ci] 指定的行…

Google Research新成果,让表格理解和检索更上一层楼!

文 | 舞风小兔编 | 智商掉了一地如何更好地理解自然语言查询问题与表格信息?Google Research给出了一个改进版Transformer,一起来看看吧!表格以结构化方式存储信息,广泛地存在于web世界中。表格最为常见的一种用法就是人们查询其中…

论文浅尝 | 用于视觉推理的显式知识集成

论文笔记整理:刘克欣,天津大学硕士链接:https://openaccess.thecvf.com/content/CVPR2021/papers/Zhang_Explicit_Knowledge_Incorporation_for_Visual_Reasoning_CVPR_2021_paper.pdf动机现有的可解释的和显式的视觉推理方法仅执行基于视觉证…

美团O2O排序解决方案——线下篇

背景 针对美团90%的交易发生在移动端的业务特点,我们实现了一套适用于O2O业务的搜索排序技术方案,已在许多产品和子行业中得到应用。在之前的线上篇中,我们已经介绍了服务的框架、排序算法等。本文为线下篇,主要讲述数据清洗、特征…

LeetCode 401. 二进制手表

1. 题目 二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)。 每个 LED 代表一个 0 或 1,最低位在右侧。 例如,上面的二进制手表读取 “3:25”。 给定一个非负整数 …

EMNLP'21 | 让压缩语言模型自动搜索最优结构!

文 | Cheney编 | 智商掉了一地既让模型跑得快又好,又要空间占用少,真的有这样效果爆表的操作存在吗?在当前疫情反复的情况下,大家平时出门用健康宝刷脸的频率变得越来越高。如果每次人脸识别都需要等很久的话,那也太让…

直播分享丨前沿技术讲习班:知识图谱前沿技术与应用(CIPS ATT27)

本文转载自公众号:智源社区助手。作为大数据时代重要的知识表示方式,知识图谱是人工智能领域构建和应用知识的新阶段,它能够更好地实现大规模数据的认知与推理。同时,知识图谱和深度学习相互协作,是实现具有强鲁棒性、…

美团O2O排序解决方案——线上篇

美团的愿景是连接消费者和商家,而搜索在其中起着非常重要的作用。随着业务的发展,美团的商家和团购数正在飞速增长。这一背景下,搜索排序的重要性显得更加突出:排序的优化能帮助用户更便捷地找到满足其需求的商家和团购&#xff0…

手把手教你模型选择,模型评估

数据来源是:头条新闻数据,经过处理之后的部分数据如下: 首先通过交叉验证,取选择模型: from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.s…

LeetCode 1030. 距离顺序排列矩阵单元格(排序Lambda表达式BFS)

文章目录1. 题目2. 解题2.1 multimap2.2 Lambda 表达式排序2.3 BFS搜索1. 题目 给出 R 行 C 列的矩阵&#xff0c;其中的单元格的整数坐标为 (r, c)&#xff0c;满足 0 < r < R 且 0 < c < C。 另外&#xff0c;我们在该矩阵中给出了一个坐标为 (r0, c0) 的单元格…