作者 | 王喆转载自知乎王喆的机器学习笔记

导读:周星驰著名的电影《功夫》里面有一句著名的台词——“天下武功,无坚不摧,唯快不破”。如果说推荐系统的架构是那把“无坚不摧”的“玄铁重剑”,那么推荐系统的实时性就是“唯快不破”的“柳叶飞刀”。我们这篇文章就从推荐系统“实时性”的角度,谈一谈影响推荐系统实时性的有哪些因素?如何提高推荐系统的实时性?

为什么说推荐系统的实时性是重要的?

在问为什么之前,要先问一下“是不是”。为了证明推荐系统实时性和推荐系统效果的关系,Facebook曾利用GBDT+LR模型和单纯的树模型进行过实时性的实验。



图1 Facebook的模型实时性实验

图1中横轴代表的是模型训练结束到模型测试的时间间隔(天数),纵轴是损失函数Normalized Entropy。从图中可以看到,无论是GBDT+LR模型,还是单纯的树模型,损失函数都跟模型更新延迟有着正相关的关系。
直观一点,在用户使用个性化新闻应用时,用户的期望是更快找到与自己兴趣相符的文章;在使用短视频服务时,期待更快地“刷”到自己感兴趣的内容;在进行在线购物时,同样希望更快找到自己喜欢的商品。所有的推荐都突出一个“快”字,这就是推荐系统“实时性”作用的直观体现。
从专业的角度来说,推荐系统的实时性同样是至关重要的,主要体现在下面两个方面:

  1. 推荐系统的更新速度越快,越能够反应用户最近的用户习惯,越能够给用户进行越有时效性的推荐。

  2. 推荐系统更新的越快,模型更容易发现最新流行的数据pattern,越能够让模型反应找到最新的流行趋势。

这两个方面的原因也直接与影响推荐系统实时性的两大要素有关:

  1. 推荐系统「 特征」的实时性;

  2. 推荐系统「 模型」的实时性。

推荐系统“特征”的实时性

推荐系统特征的实时性指的是系统“实时”地收集推荐系统模型所需的输入特征,使推荐系统能够总是使用最新的特征进行预测和推荐。
举例来说,现在开发一个短视频推荐系统,某用户完整地看完了一个长度为10分钟的“羽毛球教学”视频上。那么毫无疑问该用户对于“羽毛球”这个主题是感兴趣的。系统希望在用户下次翻页的时候就继续推荐“羽毛球”相关的视频。但是由于系统特征的实时性不强,用户的观看历史无法实时反馈给推荐系统,导致推荐系统在得知该用户看过“羽毛球教学”这个视频的时候,已经半个小时之后了,此时用户已经离开该应用了。这就是一个推荐系统实时性差导致推荐失败的例子。
诚然,用户在下次开启该应用的时候,推荐系统可以利用上次的用户行为历史推荐“羽毛球”相关的视频,但该推荐系统毫无疑问丧失了最可能增加用户粘度的,增加用户留存度的时机。
那么如何增强“特征”的实时性呢?这里我简略画了一张推荐系统的主流技术架构图(图2),来说明影响“特征”实时性的三个主要阶段 。

图2 推荐系统数据流的技术架构图

客户端实时特征

客户端是最接近用户的环节,在经典的推荐系统中,经常利用客户端收集时间、地点、推荐场景等上下文特征,然后让这些特征随http请求一起到达服务器端,参与模型预测。但是客户端对于实时性的重要性,经常被忽视的一点是客户端还是能够实时收集session内用户行为的地方。
拿新闻类app来说,用户在同一session中,三分钟之内分别点击并阅读了三篇文章。这三篇文章对于用户的推荐结果来说是至关重要的,因为它们代表了用户的即时兴趣。如果采用传统的流计算平台,甚至分布式批处理计算平台,由于系统延迟问题,大概率无法在3分钟之内就把session内部的行为历史存储到特征数据库(比如redis)中,这就使这位用户的推荐结果不会马上受到session内部行为的影响。
如果客户端能够缓存session内部的行为,作为与上下文特征同样的实时特征传给推荐服务器,那么推荐模型就能够实时得到session内部行为特征,进行实时的推荐。这就是利用客户端实时特征进行实时推荐的优势所在。关于这个话题,感谢 @dragonfly 在讨论中分享的经验。

流处理平台的准实时特征处理

随着storm,spark streaming,特别是flink等一批非常优秀的流处理平台的日益成熟。利用流处理平台进行准实时的特征处理已经成为了当前推荐系统的标配。
所谓流处理平台,是将日志以流的形式进行mini batch处理的准实时计算平台。由于每次需要等待并处理一小批日志,流处理平台并非完全实时的平台,但优势是能够进行一些简单的统计类特征的计算,比如一个物品在该时间窗口内的曝光次数,点击次数,一个用户在该时间窗口内的点击话题分布等等。流处理平台计算出的特征可以立马存入特征数据库供推荐系统模型使用,虽然无法实时的根据用户行为改变用户结果,但分钟级别的延迟基本可以保证用户的推荐结果准实时地受到之前行为的影响。

分布式批处理平台的全量特征处理

随着数据最终到达以HDFS为主的分布式存储系统。Spark等分布式计算平台终于能够进行全量特征的计算和抽取。在这个阶段着重进行的还有多个数据源的数据join和以及延迟信号的合并。
比如用户的曝光、点击、转化数据往往是在不同时间到达HDFS的,有些游戏类应用的转化数据的延迟甚至高达几个小时,因此也只有在这一阶段才能够进行全量特征以及相应label的抽取和合并。也只有在全量特征准备好之后,才能够进行更高阶的特征组合的工作。这往往是无法在客户端和流处理平台平台上进行的。
分布式批处理平台的计算结果的主要用处有两个:

  1. 模型训练和离线评估

  2. 特征保存入特征数据库,供推荐模型inference使用。

当然,由于数据从产生到完全进入HDFS,再加上spark的计算延迟,这一过程的总延迟往往达到小时级别,已经无法进行所谓的“实时”推荐。更多的是对用户下次登陆时进行更好的推荐。

再谈推荐系统特征实时性的重要性

在构建推荐系统时,推荐系统的实时性往往是容易被我们忽视的因素。我们一味聚焦在一些离线指标上,希望在离线指标中发现改进模型结构的线索,殊不知线上特征实时性的改动就会产生原强于模型结构的影响。
但特征实时性再强,影响的范围也仅限于当前用户,要想快速抓住系统级别的全局的数据变化和新产生的数据pattern,就必须加强“模型”的实时性,下篇文章我们就介绍一下增强推荐系统“模型”实时性的主要方法。
按惯例给大家出两个典型的应用场景,大家思考一下这两个场景是如何实现的?是不是特征实时性最直接的体现:

  1. 在使用抖音时,随着你划过不同的短视频,你的兴趣快速收敛,几乎是实时地被抖音的推荐引擎捕捉,这是如何做到的?

  2. 在刷知乎的timeline时,随着你点击不同的答案,知乎的推荐也是几乎实时的改变着推荐列表,比如你点击了我的这篇文章,在你下次更新知乎timeline时,立马会有更多推荐系统相关文章出现,这是如何做到的?

当然,如果有字节跳动和知乎的同学现身说法,那是再好不过的。

原文链接:https://zhuanlan.zhihu.com/p/74813776

(*本文为 AI科技大本营转载文章,转载请联系作者)

精彩推荐

AI ProCon 2019 邀请到了亚马逊首席科学家@李沐,在大会的前一天(9.5)亲授「深度学习实训营」,通过动手实操,帮助开发者全面了解深度学习的基础知识和开发技巧。 
距离「培训+会议」优惠票 2149 元(3.5折)限时抢购结束仅剩 1 天,扫描下方二维码购票,即享折扣。
3.5 折最后倒计时 1 天,8 月 12 日将开启 5 折票

社群福利

扫码添加小助手,回复:大会,加入2019 AI开发者大会福利群,每周一、三、五 更新学习资源、技术福利,还有抽奖活动~

推荐阅读

  • 1万+字原创读书笔记,机器学习的知识点全在这篇文章里了

  • 开源之战

  • 别再造假数据了,来试试Faker这个库吧!

  • 国外大神制作的超棒NumPy可视化教程

  • 突发!Python再次第一,Java和C下降,凭什么?

  • 白话中台战略:中台是个什么鬼?

  • 伟创力回应扣押华为物资;谷歌更新图片界面;Python 3.8.0b3 发布 | 极客头条

  • 沃尔玛也要发币了,Libra忙活半天为他人做了嫁衣?

  • 知名饮料制造商股价暴涨500%惊动FBI,只因在名字中加入了"区块链" ?

你点的每个“在看”,我都认真当成了喜欢

天下武功,唯快不破,论推荐系统的“实时性”相关推荐

  1. 天下武功唯快不破,实时分析让企业决策又快又准

    导语: 零点刚过,快递已至.尽管这背后有营销的痕迹,但不得不说双十一已不再是从前的双十一.是什么在支撑双十一变得更快?毫无疑问是技术,尤其是以内存计算为代表的实时分析技术,它正在让商业活动变得有迹可循 ...

  2. 天下武功唯快不破——实验吧

    刚刚做了实验吧的题目,现在整理一下 写出解题思路,希望能够帮助到那些需要帮助的人 所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找, 希望你们不要责怪!!共勉!!! 永远爱你 ...

  3. 天下武功唯快不破:TiDB 在线 DDL 性能提升 10 倍

    作者: TiDB社区小助手 原文来源: https://tidb.net/blog/4f85e64a 导读 随着业务规模和单表容量的增大,DDL 变更耗时越来越长,给 DBA.研发.业务同学带来了越来 ...

  4. 共识算法解读-天下武功唯快不破Conflux共识算法

    共识算法解读-天下武功唯快不破Conflux共识算法 串行交易引发的吞吐量瓶颈 上次我们讲到GHOST算法,它在中本聪共识的基础上提出的确定主链的算法,在保障了在高吞吐量的同时还保障了安全性(即不容易 ...

  5. Tamevic's Ctf-Web writeup@实验吧‘天下武功唯快不破’

    Tamevic's Ctf-Web writeup@实验吧'天下武功唯快不破' 第一篇wp,希望自己有个好的开始,养成一个好的习惯 url: http://www.shiyanbar.com/ctf/ ...

  6. 雷军谈互联网七字诀:天下武功唯快不破

    雷军谈互联网七字诀:天下武功唯快不破 2012-05-09 07:59:10 来源: 商界(重庆) 我在互联网混了那么多年,有一个"七字诀".我用这一整套方法论自己创办了小米,也帮 ...

  7. 天下武功唯快不破 云时代IT基建谋出路

    本文讲的是 天下武功唯快不破 云时代IT基建谋出路, 云计算大行其道.大数据愈演愈烈的今天,人们对于技术的要求已经从单纯的 "满足需求"提高到"全面优化"的高度 ...

  8. 实验吧 天下武功唯快不破

    本题用常规方法无法做出来,一直反馈的页面如下: 我一直在考虑什么叫做能否再快一点?这里获取到FLAG,BASE64解码后用POST方式提交还有更快的方式吗?看了其他人的帖子,发现是我找错方向了.这里的 ...

  9. 7.天下武功唯快不破

    估计提示: 看响应头,我们就去看看 我们发现flag,工具尝试发现base64加密了,而且根据快的,提示需要写代码来获得flag,先解开base64看看 根据文字信息,那就是把红色框里面的内容,用PO ...

  10. 实验吧-天下武功唯快不破 Writeup

    终于遇到一个简单的了... 过程 链接:http://ctf5.shiyanbar.com/web/10/10.php 直接丢到burpsuite中看到源码和返回包. 然后在响应头部中看到有flag了 ...

最新文章

  1. ExpressJs server中Router的设置
  2. java 中的gc方法
  3. Manjaro 安装笔记
  4. Ubuntu 下mysql service 启动问题
  5. c++ ifstream 文件不结束_C/C++编程笔记:你不知道的windows保存文件的坑
  6. MEF 导入(Import)和导出(Export)
  7. Chapter 3 Phenomenon——19
  8. Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)
  9. 如何快速python入手_初学者怎么才能快速学会Python?
  10. JDK8中的新特性——函数式接口
  11. Cannot open the disk 'D:\win7-ie8\Windows 7 x64.vmdk' or one of the snapshot
  12. curl header设置参数
  13. OpenStack柏林峰会主会场侧记:OpenStack立柱、拱券与灵魂
  14. 串口485接法图_RS485通讯的正确接线方式介绍
  15. 苹果笔记本能玩英雄联盟吗_等了5年的英雄联盟手机版,今天终于能玩了
  16. # netstat -s
  17. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day26】—— Spring框架3
  18. 基于PaddleX构建专属行车助手,为交通安全保驾护航
  19. 突破体系结构的错误–当Dreamliner成为噩梦时
  20. 张飞的流水帐(无厘头式的搞笑)【

热门文章

  1. unity3d中旋转
  2. [PHPUnit]自动生成PHPUnit测试骨架脚本-提供您的开发效率【2015升级版】
  3. 安装Ecshop首页出现报错:Only variables should be passed by referen
  4. python-range用法
  5. The Life Cycle of a Servlet
  6. qinyu.blog.51cto.com里的好文章,比尔盖茨
  7. Java中++i和i++的区别
  8. mysql 去重取出最小值_5000字总结MySQL单表查询,新手看这一篇足够了!
  9. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx
  10. 【设计模式】 模式PK:策略模式VS状态模式