五、大数据
在实际工业场景中,我们面临的都是海量数据,也就是所谓的大数据。再用上面提到的MySQL数据库、numpy、pandas等工具是不行的。这个时候就需要专业的大数据处理工具:Hadoop、Spark生态。有的同学想从这些生态的基本原理学起, 如果有时间,知其所以然是好的,但往往我们需要兼顾算法和大数据,时间并不是很充足,所以建议大数据这块可以先掌握到会用的层次,当做工具即可。
常用的:首先是Hive查询,也就是用HQL进行一些表数据的基础查询,这个和SQL有些类似,另外一个,就是sparkSQL以及spark的DataFrame, 这些相关操作常用来做数据分析和处理,处理完毕之后,写回到Hive表里面。其次,遇到复杂的处理逻辑,就需要写原生spark脚本去跑数据了。
推荐资料:
这一块实操性特别强,所以建议先看视频,跟着视频一步步来:
- 尚硅谷大数据Hadoop 3.x:https://www.bilibili.com/video/BV1Qp4y1n7EN
- 尚硅谷大数据Spark教程从入门到精通:https://www.bilibili.com/video/BV11A411L7CK
- 推荐系统算法基础+综合项目实战:https://www.bilibili.com/video/BV1qK4y1479r
六、推荐算法理论和实战
终于到了核心部分。再次强调一下,上面的知识不要求全掌握,既不需要,也不现实。如果为了快速入门,掌握机器学习、深度学习基础后就可以直接进入这一节了。
在实际的工业推荐系统中,一般会有四个环节:
我梳理了这四个环节中用到的主流技术,整理成了如下导图:
上图就是整个推荐算法的核心内容。这里先放出这个导图,一是让大家对推荐算法有个整体框架,二是告诉大家后续文章的内容:打算通过解读论文的形式,结合自身在工作中接触的工业场景,把里面的模型和知识点一一为大家解读。
这个系列我取名:"热追"推荐算法。主要包括以下四个部分:
1、召回
召回的目的是根据用户部分特征,从海量物品库快速找到小部分用户感兴趣的物品交给精排,重点是强调快。主要有两大类召回方式,一类是策略规则,一类是监督模型+embedding。
其中策略规则,往往和业务场景是强相关,不同的场景会有不同的召回方式,这部分知识"特异性"比较强,一篇文章讲不清楚。
这里可以简单讲讲比较普适的方法,也就是监督模型+embedding。该领域比较主流的方法, 比如FM系列(FM,FFM等), 用户行为序列,基于图和知识图谱系列,经典双塔系列等。这些方法看似很多很复杂,其实本质上还是给用户和物品打embedding而已,只不过考虑的角度方式不同。
这一块的内容,几乎每个模型都对应着经典paper,大家如果要学习推荐系统,这些经典paper是必须要去阅读学习的,并且在阅读过程中,对于一些重要模型,要会进行代码复现,并应用到一些真实的实践任务中。
2、粗排
有时候召回环节返回的物品数量太多,精排速度跟不上,所以需要在召回和精排之间加一个粗排环节,通过少量用户和物品特征,简单模型,来对召回的结果进行个粗略的排序,在保证一定精准的前提下,进一步减少往后传送的物品数量,这就是粗排的作用。
粗排用到的很多技术与召回重合,粗排不是必需的环节。如果你的候选数量非常少,那连召回都不需要了;如果你的精排能吃的下召回的输出,那可以考虑实验对比是不是需要粗排。但是假如不加粗排,总感觉欠缺点什么。有时候甚至会出现粗排输出候选变少,整个系统反而涨点的情况。像这样的情况出现,就说明整个链路设计存在不合理的地方。
3、精排
精排阶段使用你能想到的任何特征,可以上你能承受速度极限的复杂模型,尽可能精准地对物品进行个性化排序,强调准确性。这一块关键技术主要分为三大块:
CTR预估:LR、FM家族、自动特征交叉的DNN家族。
多任务学习(Multi-Task Learning,也称为多目标学习)。多任务是很常见的,比如视频推荐中,用户喜欢、收藏、评论。而不同的任务可能会互相冲突,互相影响,造成模型学习起来十分困难。所以这一块是重难点,也是很多大公司的研究重点,更是未来的一大发展趋势。但好在这里每个模型或者技术有对应paper,所以和召回一样,这里依然可以利用解读paper的方式,把这些模型和技术娓娓道来。
排序打分公式融合。
4、重排
考虑到上面的三块是核心,这块没有详细的展开整理,并且这块和业务场景策略强相关,很依赖工作经验,目前了解的也不是很多。后续先解读几篇重排模型的经典论文,等学习了相关技术,再来不断完善这块。
5、冷启动
冷启动问题是指对于新用户和新商品,他们没有历史交互数据,无法分析历史喜好,这个时候我们应该如何做推荐。冷启动技术会穿插到召回或者重排中,有时也会和上面推荐系统做成并行的两路,专门应对冷启动场景。
推荐资料:
首先当然是后续自己写的文章啦哈哈哈。主要是因为搞算法的人学习模型都是参考论文,这也是为什么我后面分享这一块内容都是以解读论文的形式。
一定要推荐一本书籍的话,我选王喆的《深度学习推荐系统》。这本书高屋建瓴的介绍了推荐系统整体架构,发展历史以及未来趋势,还有各种推荐模型的演化之路,很适合前期用来当做科普。但是具体的模型并没有深入讲解,还是得自己去看论文解读。
再就是一些我认为很优秀的开源项目:
好友整理的 https://github.com/zhongqiangwu960812/AI-RecommenderSystem
另一个好友潜心整理,star已过千 https://github.com/ZiyaoGeng/Recommender-System-with-TF2.0
6、推荐系统实战项目
理论一定要与实践结合,否则就是空中楼阁。在这里给大家推荐datawhale打造的一个新闻推荐项目:https://github.com/datawhalechina/fun-rec
项目规划图如下:
阶段一
物料池的构建:
- Mysql基础及python调用(简介、安装、简单的命令行基础、python如何调用mysql数据(增删改查,排序))
- MongoDB基础及python调用
- Redis基础及python调用
- Scrapy基础及新闻爬取
- 新闻画像构建(存入MongoDB)
前端展示:
- Vue简介及基本使用(对于我们做推荐算法的,了解一些前后端交互之类的就够了)
- 前后端如何交互
- 用户注册界面
- 新闻展示(内容、时间、点赞次数,收藏次数)
- 可以保留用户的行为(user_id, news_id, action(点赞、收藏、阅读),time)
阶段二
有了前端及物料池后,就需要设计简单的冷启动规则来收集用户的行为数据以及用户的基本属性特征。这一部分数据可能需要参加开源学习的同学来一起帮忙完善这个数据集,这样数据才是有意义的。
- 收集数据
- 在服务器上部署数据收集的系统(新闻数据+用户行为数据)
- 冷启动策略
- 冷启动
- 用户侧
- 物品侧
- 系统侧
阶段三
这个阶段就是推荐算法大展身手的地方啦。我们可以把上一节学到的推荐算法,在这里尽情尝试,吹拉弹唱任你挑选。
- 离线评估指标
- 多路召回
- 特征工程
- 规则类
- 模型类
- 召回评估
- 排序
- DeepFM
- 排序评估
- 规则+重排
阶段四
最后就是一些运营类知识,保证系统的高可用性
- 推荐服务,前后端交互(flask)
- 任务调度
- 系统部署
- 规范类修改
以上便是全文了。不知不觉码字这么多,整理不易呀,虽然嘴上说不在乎点赞到底有多少,但其实内心还是希望点赞高一点的,因为好看啊!人总不能拒绝内心真实的想法吧。所以脸皮厚一点跟大家说:求大家来个赞,鼓励一下,也扩散给更多的对推荐算法感兴趣的同学,帮助到更多的人!!~