1.前言

本文同步发表于

  1. 知乎专栏: 知乎专栏: 推荐系统工程实践
  2. 微信公众号: yanianthe的公众号

欢迎一起订阅一起学习成长!

为什么会有这个专栏?

相信跟大多数人一样,我的技术启蒙书籍,也是吴军老师的 《数学之美》。大学时期,第一次看的时候,被数学&算法的魅力深深吸引,也是从那个时候,开始接触到推荐这个概念。工作后,大部分时间也都是开发推荐相关的系统与工程。随着业务的发展,推荐技术日新月异,也变得越来越复杂,因此也希望通过知识沉淀的方式,与大家交流学习,来提升自己的整体认识。

另一方面,网络上有非常的多的大V,很好的技术专栏介绍推荐系统。比如 王喆的机器学习笔记 更侧重算法&论文解读,我也希望从工程实现的角度,谈谈我的理解。

2.推荐系统综述

1. 什么是推荐系统,推荐系统解决了什么问题?

推荐系统是一种个性化的信息过滤系统。

从认知心理学的角度,人类通过采集信息,对信息的提取,加工,转换为概念和知识,不断加深我们对外部世界的理解。

信息的形式可以是,文字,图片,声音,视觉影响等。随着人类文明的发展,人类获取信息的方式也在不断转变。最初原始部落时代,是龟壳象形文字,壁画,到中世纪的是羊皮卷,纸张,工业革命则是电报,电话,再到现代的互联网。

技术的升级使得信息的创造和传递成本降低,自然就带来了信息的急剧爆炸。

面对过载的海量信息,为了提高信息获取效率,于是搜索系统应运而生,典型的就是谷歌和百度。

但是搜索是一种主动的,带有明确意图的行为。大部分时候,人们的注意力,关注点都是模糊的,不确定的,个体的偏好兴趣也差异极大。推荐系统则进一步提升了信息的获取效率,将不同信息分发给对应偏好的人群,人不再是单向的获取信息,信息也可以主动与人建立联系。

2. 推荐系统的大规模应用

当今世界,推荐系统已经渗透到生活的各个角落。

从资讯类的头条抖音,电商类的淘宝,拼多多,甚至生活娱乐类的美团,大众点评,都在大规模使用推荐系统,提高用户与平台的粘性。

3.推荐系统架构

如何搭建一套推荐系统?推荐系统由哪些模块组成?

推荐系统架构

首先是推荐的内容来源:

内容来源一般跟所在的业务领域相关。比如资讯类或者视频应用类,内容一般由用户上传(UGC)或者MCN机构上传(PGC)到平台。平台会对内容进行安全和质量等审核。同时也会进行一般黑产,灰产的打击。内容入库后,会根据不同的类型,进行内容理解。比如图文的内容,会进行标签抽取。视频内容会用多模态技术进行标签建立。解析完毕后,每条内容对应一个id和标签体系,存储到内容池中,供推荐系统使用。电商,音乐,电影等其他场景也是类似。

从工程实现的角度上,推荐系统主要分为三个大块。

  1. 在线模块: 决定推什么内容

  2. 离线模块: 学习用户习惯,提高系统对用户刻画的准确率

  3. 管理平台: 实验管理,推荐结果分析等

3.1 在线模块

以youtube为例子,每天都有成百上千万的内容传到平台,经过内容审核入库后。内容池子可以达到百千万

如何能够从成千上百万的内容池中挑选用户喜欢的内容?

为了解决这个问题,推荐系统一般会有若干个阶段。

  1. 索引&特征: 会根据内容特性提前建立若干种类型的索引
  2. 召回阶段: 用户请求时会从各种索引种取出千/万 条item.
  3. 粗排阶段: 针对这上千/万条item,进行第一遍打分,再筛选出几百条或者千条。这个阶段的排序模型一般都比较简单,能够过滤掉一些与用户兴趣明显不想管的
  4. 精排阶段: 得到几百条item后,精排阶段会建立相对精细的模型,根据用户的画像,偏好,上下文,结合业务目标进行排序。一般精排后返回50-100条给到engine侧。
  5. **重排阶段:**engine 侧拿到精排的50条item。还会做很多的人工干预和产品逻辑,比如item之间的多样性,产品策略逻辑,比如热门,置顶,多种内容之间的位置混合等等。最终会返回5-10条左右的item,曝光给客户端。

根据业务特性,在线流程还有许多比较细的模块,比如去重服务,避免给用户推荐重复的内容。特征预处理,特征抽取等模块。这些后面会单独介绍。

3.2 离线模块

推荐系统如何学习用户的习惯?

在给用户下发推荐若干item后,系统记录用户的点击,播放,停留时长,点赞收藏购物车等与业务相关的用户行为指标,通过样本平台处理后,得到训练样本。

目前业界有两种训练方式,一种是批式,每个小时训练,另一种是流式,样本拼接完后直接经由深度学习平台训练。

深度学习框架百花齐放。开源的tensorflow,pytorch,mxnet等等。但在推荐这个场景,目前的训练框架可能会有一些性能上的问题(分布式训练,超大规模稀疏参数等),因此各个大厂基本也都是采用 自研 + 开源 的方式结合。

如:

  1. 阿里的XDL : 基于tensorflow 上改造。
  2. 百度paddlepaddle: 自研深度学习平台,与tensorflow 不兼容
  3. 腾讯的numerous无量: 从之前的完全自研,也在慢慢与tensorflow看齐。
  4. 字节的BytePs: 自研了PS 参数服务器部分,核心的训练框架也是兼容tensorflow。

训练平台拟合好模型后,推到线上服务,通过在线serving的方式,提供召回 +粗排 + 精排 + rerank等各个阶段调用。如此一来,就形成了数据的闭环。在线产生用户行为数据,通过离线学习拟合,重新作用到在线服务上

这块比较复杂的样本平台的设计,训练框架的调研,也会在后面单独写文章介绍。

3.3 推荐管理平台

系统模块之间如何高效协作,快速迭代?

在推荐这个场景下,用户的需求其实并不是特别的明确,用户感受推荐结果的好与坏,是个非常主观的感受。因此每个平台会通过设定一些点击率,互动指标等进行量化和判断。产品 & 运营 & 技术 优化指标的时候,需要频繁进行AB Test。因此高效率的实验管理,流量划分,实验结果的置信度,独立性等就变得非常重要。

另外,推荐系统其实是个相对复杂的系统,由于数据链路复杂,因此也常常要求推荐结果可解释,可诊断,可视化,尽量减少推荐系统的黑核化。

4.推荐系统的挑战

推荐系统发展到现在,虽然大的架构已经相对稳定,如召回 + 粗排+精排+混排等。但在系统性能和通用性,迭代效率等角度考量下,各个 模块之间如何组织串联,依旧是个比较大的难题。

比如:

  1. 特征抽取应该在那个环节做?特征服务还是样本服务?如何保证特征一致性。

  2. 样本上报,如何避免特征穿越?

  3. 样本拼接如何提高效率,并行实验

  4. 索引的选型,成本与效率的考量

  5. 流式训练下, 特征的实时性,样本拼接性能,以及训练平台,serving模型如何实时更新等等工程问题

5 写作计划

接下来专栏,打算分为6个大的模块,分别介绍下各个大的模块行业内的做法与工程实践上的思考

  1. 去重服务模块
  2. 特征工程模块
  3. 索引模块
  4. 召回模块
  5. 样本模块
  6. 训练框架模块

6. 参考资料

https://www.zhihu.com/column/c_1388455532332789760

https://zhuanlan.zhihu.com/p/143816066

https://www.infoq.cn/article/Y4G6*ePCv1we82rJVC5I

http://www.woshipm.com/pd/4202594.html

http://www.woshipm.com/pd/4223123.html

http://www.woshipm.com/it/3563857.html

https://zhuanlan.zhihu.com/p/114590897

推荐系统工程系列(1):浅谈推荐系统架构相关推荐

  1. Java架构师成长之道之浅谈计算机系统架构

    Java架构师成长之道之浅谈计算机系统架构 Java架构师成长之旅 1.1 信息技术发展趋势 目前信息技术主要经历了互联网.移动互联网以及以大数据.云计算.人工智能和区块链为代表的新兴技术三个阶段.而 ...

  2. 浅谈分布式架构搭建-理论知识

    浅谈分布式架构搭建 基础 理念 技术选型 后端技术设计 总体架构设计 关键案例设计 架构师搭建架一般优先考虑的是安全性.稳定性.高吞吐量.哈哈,菜鸟的我让我装个B,回忆一下以前架构搭建 基础 理念 C ...

  3. 红蓝对抗系列之浅谈蓝队反制红队的手法一二

    红蓝对抗系列之浅谈蓝队反制红队的手法一二 取证反查 针对ip 溯源一二 一般来说,红队大部分都是使用代理节点进行测试,假如我们捕获或者从样本里面分析拿到了真实ip ,那么以下操作场景就有用了,或者使用 ...

  4. 浅谈三层架构 通过这个,+Java开发模式经验。终于相通了,动软到底是为什么这么做...

    浅谈三层架构 收藏 自己理解的原理 http://www.cnblogs.com/mahaisong/archive/2011/05/12/2044665.html 浅谈三层架构  通过这个,+Jav ...

  5. movielens推荐系统_浅谈推荐系统+3个小时上手python实现(完整代码)

    已经9012年了应该也不需要我解释什么是推荐系统,大致就像头图一样,挖掘用户的喜好,精准的推送给用户ta想要的东西!推荐系统可以说是无处不在了,电商的猜你喜欢,浏览器右侧的推送消息,包括搜索结果的排序 ...

  6. 浅谈数据架构师所应具备的技能和素养

    DT时代,"数据架构师"这样的角色起到越来越重要的作用.能力越大责任也就越大,因此对于这个角色也有了越来越高的要求.那到底对于数据架构师有什么要求呢?对于想成为数据架构师的同学职业 ...

  7. NFT系列#2 - 浅谈你不知道的加密艺术史(二)

    导读:2016年诞生的Rare Pepe Wallet开辟了通往加密艺术的路.到了2017年,随着比特币第三轮牛市的到来,越来越多的加密艺术项目乘着币价的东风崭露头角.不同的是,它们抛弃了比特币网络, ...

  8. (浅谈SOA架构)------SOA架构演变由来

    SOA架构演变由来 一:了解市场上系统架构 1.1:市面上有那些架构? (1):单体架构 (2):垂直架构 (3):分布式服务架构 (4):SOA架构 (5):微服务架构 1.2:各自架构的优缺点 1 ...

  9. Recsys21 | 浅谈推荐系统如何在NLP的肩膀上前进

    大家好,我是蘑菇先生.今天来聊聊推荐系统是如何在NLP的肩膀上前进的. 最近在读Recsys2021上的paper,Transformers4Rec: Bridging the Gap between ...

最新文章

  1. 这位图灵奖得主大佬,你可知道?
  2. maemo环境安装问题和解决方案(ubuntu 10.04)
  3. “死”在拥挤赛道上的快递员工
  4. Android Camera 系统架构源码分析
  5. java线程删除文件,线程“main”java.io.jgitinernalexception中的异常:无法删除临时文件c:\users\13 dec...
  6. 常用正则表达式整理【总结】
  7. You must install pydot and graphviz for plotmodel to work报错如何处理
  8. 怎样在linux系统上安装r,Linux系统之路——如何在CentOS7.2安装R(示例代码)
  9. UEditor工具栏上自定义按钮、图标、事件、窗口页面
  10. 编程让鼠标一直动_华硕、罗技、海盗船无线鼠标选哪个?
  11. python爬虫影评_python爬虫实战一:分析豆瓣中最新电影的影评
  12. 小学数学开灯问题_【数学攻略】小学四年级数学“相遇问题”全普及
  13. ubuntu中pycharm无法输入汉字
  14. redhat linux 中用锐捷客服端实现上网
  15. python写网页flash游戏辅助_会玩 | 使用 Python + Selenium制作Flash游戏辅助
  16. 2021年12月中国各省市认证证书数量排行榜:Top前四的省份证书数累计占全国比重超过50%(附月榜TOP34详单)
  17. 微博清理多个百万粉丝大号:打击违规账号要命中七寸
  18. 设置来电铃声android,设置默认来电铃声 android
  19. 9.Isaac教程-- Laikago 四足机器人的自主导航
  20. 在 sys.servers 中找不到服务器 ‘xxxxxx‘。请验证指定的服务器名称是否正确。

热门文章

  1. Centos 安装zlib
  2. CSS层叠性(重要)
  3. IT监控:Grafana vs Datadog详细比较
  4. 【有奖众测】快服务开发者俱乐部第一期来咯!
  5. 《只为遇见你》硬生生把爱情片拍成了把妹宝典,真人出镜演绎直男转型
  6. Houdini使用Mantra渲染景深通过Nuke合成
  7. html无法获取图片高宽,如何解决谷歌浏览器下jquery无法获取图片的尺寸
  8. Chrome 录屏神器!自称“最强大”的屏幕录制和注释工具!
  9. Pyecharts一文速学-绘制桑基图详解+Python代码
  10. mysql如何获取今天的日期?