一、工程实践经验

1.隐式反馈要优于显式反馈

隐式反馈是指点击等行为,显式反馈是指评分评论等表达态度的行为;

显式反馈数据要稀疏得多;隐式反馈能更真实表达用户得想法;隐式反馈和目标函数关系更紧密;隐式反馈倾向于短期收益,有损于用户长期留存。

2.数据预处理

对于边缘数据、稀疏行为的过滤,对过热视频的打压,根据模型的特点有针对性地筛选数据,对模型训练有很大的影响。通过设置一些规则过滤掉噪声数据,对头部视频做降采样,对设有attention机制的模型的数据做相关性过滤,都对最终模型的准确率有明显的提升,而且这种提升往往要比优化模型超参、选择更优的模型,效果提升要明显得多。

3.特征的利用

对于性别、年龄、特征等稀疏特征,特征的分布非常不均匀,只适用于做负反馈过滤。对于时长这种特征,可以用于推新视频,应用案例为youtubeDNN。

4.冷启动问题

(1)物品冷启动

物品冷启动的关键点在于物品的基础属性,和推荐的及时性。

新视频入库后,每隔15min跑一遍增量更新任务。

最好的模型当然是与物品特征高度相关的FM一族的模型,通过特征embedding的线性组合即可得到新视频embedding,进而实现线上新视频的实时召回(最近邻检索)。

实时itemCF和实时userCF等策略,可以促进新视频的即时传播,而不需要积累一天的消费行为,隔天模型训练完成后,才进入候选集推荐。

(2)用户冷启动

用户冷启动目前曝光最多的算法是类别预测。用lightgbm模型,使用地域、手机型号、applist、性别、年龄等信息,预测多个一级类得分,然后分别召回,加权融合。

类别倒排的合理性在于:用户冷启动的本质其实是迁移学习,那么关键点就在于如何将新用户与老用户对应起来。第一步就是对老用户进行分群,按用户基本属性进行分群其实准确率是很低的,因为用户基础属性与用户的视频喜好的关联性不强,所以更合理的方法是按用户的类别偏好进行人群分类,作为标签,再通过模型训练,建立用户基础属性与人群类别的对应关系,对新用户召回人群内的偏好top(即类别倒排)。

人群预测也做过实验,但点击率很低。原因在于人群预测分出来的人群很杂,群体内人的相似性其实是比较低的,反而不如按一级类分的人群。如果群内人少,召回的视频就会比较冷门且偏;如果群内人多,召回的视频就集中在热视频上,分类会比较杂;总之热度和集中度是不够的。对于冷启动用户,关键点在于热度。

5.推荐可解释性比精准更重要

在给用户推荐物品的同时,标注推荐的原因,比如“你关注的人也喜欢”、“附近的人喜欢”、“根据你看过的电影推荐”,会更让用户清晰地知道推荐的理由,从而促进用户的点击行为。

6.模型复杂度与数据规模

深度模型发展到现在,已经由一开始简单的多元感知机模型,逐渐变得复杂,神经网络的层数越来越深,损失函数也更加复杂,网络中也逐渐开始引入图结构、树结构、序列结果、胶囊结构,但在实际的工程应用中,并非越复杂的模型效果越好,需要针对数据的特点、应用场景和优化目标,选择合适的模型。同时,需要考虑模型训练的成本,有的模型虽然效果有一些提升,但训练时间长,对gpu等计算资源的占用高,或覆盖的数据量小,都有可能是它们难以进行大范围工程化应用的原因。

根据博主的经验来看,数据规模较小的情况下,模型的训练效果差别不大,这种时候训练时长和资源占用率就是选择的关键。

在数据规模较大的情况下,往往简单直接的模型比较稳定,且效果也比较好,比如FM模型、协同过滤,大厂往往采用这两种算法作为优先召回的结果,保证线上推荐业务的稳定运行。

7.离线评估与线上效果

模型的离线评估结果与线上效果不一定是一致匹配的。

8.模型融合

单一的模型往往针对一种信息进行网络训练,例如FM模型用的是视频的内容信息(视频类别、标签等特征),word2vec利用的是用户行为特征(用户观影序列),这样训练出来的结果由于缺少对信息的全面利用,一定是不够准确的。而综合运用多维度信息的模型又往往过于复杂,要么难以训练到最优收敛点,或是训练耗时过长,要么容易过拟合,泛化性不足。

所以要想综合运用各个维度的信息,且保证泛化性、准确性,控制训练时长,最好的选择就是进行模型的融合。

无论是单一的embedding之间的融合,还是集成方法、stacking、blending方法,在我们的数据集上都有明显的提升效果。这是单一模型很难达到的程度。

9.i2i、u2i、u2u2i模式对比

item2item召回,具有即时性,短期收益高,只需要保证推荐视频与用户当前观影序列中最后一个或最后几个视频的高度相关即可。由于用户行为具有连贯性的特征,这种召回方法很大概率被点击,且所依赖的信息也仅限于单个视频,对模型的要求较低,因此在推荐算法发展初期,item2item的召回是最主流的模式,且也是召回算法最多的模式,从协同过滤到embedding,从FM到item2vec,item2item算法层出不穷。同时,item2item的实时召回也更容易实现,这进一步促成了这种召回模式的普遍应用。但是,由于只考虑了用户当前的消费行为,并没有做针对用户的区分,导致召回结果的个性化不足,同时也没有考虑到长期信息,对持续推荐相似内容的item导致用户兴趣疲劳、信息茧房的问题,缺少应对机制。

user2user2item召回,是针对item2item召回所具有的缺少个性化的问题,进行的改进。通过各种方法(计算共现矩阵、计算embedding相似度)找到当前用户的相似用户,然后将相似用户的观影历史推给当前用户。常见的算法就是userCF,在(user数量/item数量)较大的情况下,这种召回模式会有比较好的效果,但对于item很大的数据,用户的行为是弥散的,差异性会比较大,即使找到相似用户,他们之间消费行为的重合度也会比较低,效果显而易见是不好的。如果要保证点击率,就需要限制共现次数的下限,对于行为稀疏、item数量大的场景,就会有覆盖度低的问题。同时,由于比item2item多一步相似user的计算,所以实时策略难以实现,目前博主没有见过工程化实现实时userCF的方案。博主做过实时userCF的实验,在保证一定覆盖率的条件下,目前效果是负向的,原因可能在于用户兴趣的转移速度快,而相似用户的计算滞后,导致推荐结果滞后。还是有一定的优化空间的。

user2item召回,综合考虑了用户当前的行为画像、用户长期的行为画像和用户基础属性等信息,更深入的算法还会考虑到用户长短期兴趣之间的联系和兴趣转移的过程。博主将序列召回、图模型、youtubeDNN、attention机制、多兴趣模型等模型都归为了这一类,这其中很多都是今年来推荐算法研究的热点。由于综合利用了多维度的信息,所以准确率相比之前算法会有提升。针对个性化不足、实时推荐难以实现的问题,也有一定程度的改善,也逐渐取代了一部分的item2item的算法,相信之后会在推荐算法的领域内得到更为广泛的应用。

10.相似embedding的召回

通常embedding的实现方法是,通过内积或欧式距离等方式计算embedding之间的相似度,取top K个作为召回结果,但是这种方法计算量大,特别是当item比较多、embedding的维度比较大时,很吃资源,更别提能满足实时召回的需求。且两个两个地计算距离,其实是一种暴力求解,其中存在很多的无效计算。

目前常用的方法是近邻检索,博主用过Faiss库、Vearch、hnsw库,准确率和速度都基本满足实际需求。但是,近邻检索并不能保证取到最优解,为了解决这一问题,博主做过多次召回的实验,针对一个embedding进行5次近邻检索,即保证了即时性,又使得线上的点击率出现明显提升。这进一步说明近邻检索的准确性问题。关于近邻检索更加详细的介绍,可以看博主的另一篇文章:《向量相似度度量及近邻检索方法》

快速召回的算法原理是embedding + 局部敏感哈希

11.AB Test

12.整体架构:召回-粗排-精排-重排

13.负样本的选择

针对推荐算法的不同步骤,由于训练目标不同,即使采用的是同一个模型,对于负样本的选择也应采取不同的方法。

召回的目的是保证类别多,对准确度的要求没有那么高,更强调“召回尽可能多的有相关性的视频”,召回面临的数据也是海量的。因此召回在做负采样的时候,通常采用随机采样的方法。

排序则对准确度的要求很高,面对的数据量小,且面临的数据本身已经是有一定相关性的视频了,目的是“在相关中找到最相关”,因此负采样的时候通常将曝光未点击的行为作为负样本。

FM模型在实际的召回和排序中,就采用了上面两种负样本的生成方式。

14.算法生效的滞后性和线上点击率分时段的波动性

有些算法可能需要一段时间才能展现效果,而有些模型则是刚上线的一两天或一两周效果很好,但之后就逐渐降低趋于平稳(这里讨论的是一天一更新的模型,所以模型效果下降和模型过期的问题无关),可能原因在于新算法给用户提供了更新鲜的内容,促进了用户的点击行为(其实某种程度上可以说,是一次成功的兴趣探索),但一段时间会就出现了用户审美疲劳的问题。这些情况是实际应用场景中难以避免的,因此衡量一个模型的效果,至少得两周以上的稳定数据才可以。同时,曝光量和覆盖率也是需要关注的,太小的曝光量必然会导致数据的大幅起伏,使得数据失去参考价值。

线上的点击率等数据在一天之内、一周之内、一年之内都会有波动,这是由于用户分时段行为不同导致的。比如早地铁高峰时段、晚七点下班后、周末和节假日,都会导致线上点击率有明显上浮。同时,当平台有新剧热剧、热门综艺上线时,也会导致点击率、人均时长等有明显提升。这些影响因素,都是在评估模型效果的时候要综合考量的。最好的评估方法当然是做ABTest,看同比数据而非环比数据。

15.过热打压问题

虽然各大视频网站上的数据基本都已经是上亿的量级了,但其中大部分视频都很难获得曝光的机会,曝光数据的分布必然存在长尾效应。这不仅仅是因为很多视频由于质量较低被过滤,还因为推荐系统本身的机制问题。由于热视频是已经被验证过会大概率被点击的视频,此时如果把点击率定为优化目标的话,系统就会更倾向于推荐热视频,从而进一步加剧了长尾效应。短期看会提升点击率,但长期看会导致非热门视频的消费行为更加稀疏,推荐结果仅局限于少数视频,用户容易厌烦,会导致用户流失。

过热视频还会造成常见的”哈利波特“问题(由于哈利波特的热度过高,很多人都看过,就会导致哈利波特和其他item之间存在很多共现行为,进而使得哈利波特和很多item之间的相似度都过高,这样就会导致没有相关性的item A和itemB之间通过哈利波特而产生相关性,从而生成item A和item B之间的推荐结果)。

过热视频是推荐系统普遍面临的难题,如果在多样性和点击率之间找到一个最佳平衡点是关键,既不能过度打压热视频导致用户短期流失,又不能一味推热导致用户难以长期留存。目前博主在协同过滤、word2vec等模型中都进行了过热打压的实验,线上效果为正向,说明了过热打压的重要性,但具体的负采样方式和阈值,还是要通过多次实验才能找到比较好的点。

16.新视频召回所面临的问题

一个新视频入库的过程是这样的:先过精编打上标签分毫类,然后通过textsim等计算内容相似度的算法,推给可能会浏览的用户,如果用户点击,那么这个视频就有了行为数据,进而通过协同过滤等其他模型召回;而如果用户没有点击,系统就会减少该视频的推荐,等该视频不符合”新视频“定义的实现时,这个视频就会一直沉在库底了。所以发现了吧,新视频推荐的关键问题是,如何找到当前最想看这个分类视频且想看新视频的用户。

这个问题其实是很难实现的,一是因为用户的兴趣转移是很快的,即使找到了当前观看过相似视频的用户,也很难保证他是否还想继续看类似视频、是否已经厌倦。

二是因为无法判断用户是否喜欢看新视频,可能用户一直看一个类别的视频,只是对这个类别下点击率高的视频感兴趣,而拒绝体验新视频(经过数据统计,消费总量相近的用户中,可以明显区分出”新视频抗拒型“用户,和”新视频偏好型“用户),而且”抗拒新视频“这一行为还会随着类别、时间而转移,这点很难量化(所以你上传的新视频没有被传播开,可能不仅是因为没推准或内容差,可能仅仅因为被推荐的用户不想尝试新视频/不喜欢花时间看没有被大众认可的视频内容)。

三是因为新视频仅仅有标签类别等特征,根据这些特征找到的最相似的视频,并不是推荐场景下最相似的视频(推荐场景下的”相似“是要考虑消费行为的,推哪个视频会获得最高点击,哪个视频才最相似)。所以新视频没有被点击,还有可能是标签打的不够精准或太偏(太偏的标签会导致关联的视频太少或关联的热视频过少,从而导致曝光次数更少)的问题。

17.过拟合问题

当训练数据过少、模型过于复杂的时候,模型训练会出现过拟合问题,就会导致离线评估的准确率高、但线上实际测试的点击率很低的问题。这种时候就要考虑增加训练样本或选择泛化性更强的模型,来解决过拟合的问题。

参考:

【1】https://zhuanlan.zhihu.com/p/23847246

推荐系统工程实践经验相关推荐

  1. 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总

    对2021-2022年,工业界推荐算法实践经验进行了梳理,主要以下几个维度进行归纳: 推荐系统(十一) 2021-2022年工业界推荐算法实践经验汇总对2021-2022年,工业界推荐算法实践经验进行 ...

  2. 推荐系统工程系列(1):浅谈推荐系统架构

    1.前言 本文同步发表于 知乎专栏: 知乎专栏: 推荐系统工程实践 微信公众号: yanianthe的公众号 欢迎一起订阅一起学习成长! 为什么会有这个专栏? 相信跟大多数人一样,我的技术启蒙书籍,也 ...

  3. 【实践】美团外卖图谱推荐比赛冠军经验分享:从多领域优化到AutoML框架

    猜你喜欢 0.[免费下载]2021年12月热门报告盘点1.如何搭建一套个性化推荐系统?2.快手推荐系统精排模型实践.pdf3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进 ...

  4. 【推荐】如何使用好阿里云的网络安全隔离?深入分享阿里云ECS安全组实践经验...

    近期针对安全的话题非常火爆.特别邀请阿里云专家撰写一组文章,深入分享阿里云ECS安全组实践经验. 阿里云的ECS有经典网络和专有网络(VPC)两种网络类型.经典网络基于阿里云基础网络,通过安全组(类似 ...

  5. PAI和Hologres的个性化推荐最佳实践

    简介:常见的个性化推荐系统包括日志收集,数据加工,召回,排序,离在线效果评估等诸多环节,对于中小客户存在技术门槛高,搭建周期长等问题.计算平台基于 PAI,Hologres,MaxCompute,Da ...

  6. 保存模型后无法训练_如何解决推荐系统工程难题——深度学习推荐模型线上serving?...

    这里是「王喆的机器学习笔记」的第二十三篇文章,这篇文章希望讨论的问题是深度推荐模型的线上serving问题. 对于推荐模型的离线训练,很多同学已经非常熟悉,无论是TensorFlow,PyTorch, ...

  7. 深度学习实践经验汇总

    写在前面: 本文原载于how-to-start-a-deep-learning-project,并且在机器之心上有翻译(如何从零开始构建深度学习项目?这里有一份详细的教程). 忽略中英文的标题,因为这 ...

  8. 云计算架构师分享:容器云在金融企业的落地方案 | 周末送资料(原题:某保险公司容器云PaaS平台建设实践经验分享)

    [摘要]随着技术和社区的成熟,容器.Kubernetes.微服务等新事物不再只是概念,已在很多企业落地并发挥了生产力,对容器和PaaS的需求也从试探性转向规模化推广和纵深探索,建设企业级容器PaaS平 ...

  9. DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结

    本文讲的是DockOne微信分享(八十一):唯品会数据库备份恢复容器化项目实践经验总结[编者的话]本文分享了唯品会数据库Docker的异地容灾项目实践经验,项目中针对用户数据库的异地恢复场景的需求进行 ...

最新文章

  1. python使用Spacy迁移学习库进行句法分析实战
  2. webpack+vue实践
  3. 【数道云大数据】大数据平台哪一个好用?武汉2019年大数据平台排行版?...
  4. easyexcel获取所有sheet页名称_老板让我汇总多个sheet,我不会,同事却说使用PQ仅需2步搞定...
  5. 面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别
  6. 美团点评企业研究报告
  7. Android 进阶技术汇总一: 个性化控件(View) 方案汇总
  8. 多元线性回归分析spss结果解读_spss多元线性回归结果解读
  9. Java使用策略模式实现聚石塔接口调用
  10. P3966 [TJOI2013]单词(AC自动机)
  11. 百度卫士+7654联盟
  12. 浙江大学 找出直系亲属(java)
  13. 关于男女交往的换位思考
  14. 分布式系统生成唯一主键
  15. selenium 浏览器复用(java)
  16. 仿网易新闻顶部菜单html,iOS仿网易新闻滚动导航条效果
  17. 电容的原理与应用(补充中)
  18. Java中创建目录 或 创建文件
  19. 蓝桥杯试题算法训练之数字三角形——Python满分解答
  20. JAVA基础语法:函数(方法)、类和对象

热门文章

  1. sql查询数据表某列的重复值并计数
  2. 单目标跟踪——【数据集基准】RGB数据集OTB / NFS / TrackingNet / LaSOT / GOT-10k / UAV123 / VOT 简介
  3. 真丶深入理解 JavaScript 原型和原型链(二):原型和原型链
  4. python中如何保存并使用训练好的模型并调用
  5. 硬盘安装ubuntu 14.04 LTS
  6. 【JavaScript】用循环语句解决鸡兔同笼和百元买百鸡问题
  7. Unix下 压缩和解压缩命令
  8. Ps 如何制作网格背景
  9. SAP ABAP DUMP GETWA_NOT_ASSIGNED 指针未分配错误
  10. pom.xml中解决Provides transitive vulnerable dependency maven:org.yaml:snakeyaml:1.33警告