最近和好几位朋友讨论推荐系统的搭建和升级,暂时没空将全部实践过的部分都写出来,但是看过的资料和论文倒是一气呵成地梳理出来,对想从零搭建一个推荐系统或者对推荐系统现有效果不满希望升级的同学来说,可能有用,也可能没用,你都已经看过。
1. 架构部分
-
头条首席架构师曹欢欢的分享,为了让业界了解头条的算法,比较清晰扼要,突出重点,没有讲最新的内容。但是核心都涉及到,值得反复研读。基本上绝大部分推荐系统架构和头条一致。当中的差异主要体现在实时框架上,头条继承百度系的搜索架构思想,喜欢用倒排索引来实现很多部件。阿里、腾讯更加倾向于类似于Strom的流式计算加上KV存储的方式。个人认为并无高低之分,看架构师、负责人喜好和团队技能分布。
36氪首发 | 今日头条推荐算法原理全文详解
今日头条成功的核心技术秘诀是什么?深度解密个性化资讯推荐技术
-
爱奇艺的推荐架构演化,有整体架构、算法模型的升级进化过程,从算法产品的角度来讲述不同的算法模型演化和效果过程,是一个值得follow的演化路径。可能在爱奇艺的数据上,这些模型的效果如此好。实际上,在大量其他公司的实践和paper,可能同样的算法模型不一定做的出来一样的效果。
爱奇艺个性化推荐排序实践 -
业界解读youtube推荐算法模型,这篇文章值得去看的是,如何设计观测指标,如何评估内容。
从YouTube算法论文反推其推荐机制 -
饿了么的推荐架构,包含一部分LBS的领域知识,整体架构也比较清晰。推进的路径也不错,EE的应用也重视的很好。
回顾·外卖推荐算法中有哪些机制与手段?
- 糖豆的实践,第一期比较稚嫩,但是0到1是gain最大的时候,极少人力就能快速上线,建立良好的评估基线极其重要。包括了实时、深度学习、强化学习等内容,有些零散,但是比较直接面对具体的一个推荐系统阶段。上述的文章一般不会这么详细。
糖豆推荐系统第一期开发与评估报告
糖豆实时推荐系统设计与实现
单步强化学习在糖豆推荐系统的应用
深度学习于糖豆推荐应用--图片模糊识别
第二期后续的工作我一直没空写,以后有空写一下,大概包括算法演进、语义挖掘、用户画像、深度学习的尝试等。
2. 模型部分
2.1 基础的推荐模型
包括基于流行度,基于协同过滤,基于内容等模型。
这些模型都比较简单却非常有效,一般作为候选集的选择或者粗排去使用或者推荐系统初期模型,这些都是非CTR预估模型。
Collaborative Filtering based Recommendation Systems exemplified
Beginners Guide to learn about Content Based Recommender Engines
2.2 LR及其推广模型
-
LR
它是基线模型,后续所有模型都要和它对比。离线对比的指标主要是AUC,logloss,RMSE,NDCG等等,最好都看,个人主要看AUC。我这里面介绍就简单讲AUC为主。LR模型虽然非常简单,但是特征工程+LR基本能解决大部分推荐的问题。它的缺点当然非常多,包括学习能力有效,需要领域知识实现特征之间的交叉组合等等。但是后续会介绍的大量模型里面(在我看过的paper里面),没有一个模型敢说超越LR 20%以上的(公开数据集)。LR AUC最好能做到0.76~0.78,depend on 数据集。一般建议把LR AUC起码做到0.72左右,再进行下一步模型升级。
Recommendation System Using Logistic Regression and the Hashing Trick
-
FTRL
它是谷歌提出来的在线学习模型,它实际上是对LR的GD过程做了在线的算法和实现优化。适合于极大级别的实时预测。
Follow-the-Regularized-Leader and Mirror Descent:
Equivalence Theorems and L1 Regularization -
MLR
它是阿里盖坤团队提出的LR模型的推广。MLR大概就是采用一个级联器组合了LR,能够通过空间分片的方法来逼近任何高维空间的非线性分类面。在阿里妈妈的广告方面应用比较广泛。
Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction
2.3 基于隐变量的模型
-
SVD
矩阵分解的方法,它是多年前推荐系统的圣杯-- Netflix Prize最终获奖模型 -- SVD++集成RBM,比Netflix当时的模型提升了10%,这是一个恐怖的提升。它思想是用户对物品喜好程度(隐向量)可以用用户-物品大矩阵来表达,通过已知的用户对物品行为推断用户对其他为接触物品的喜好程度。具体算法实现就是将大矩阵分解为user 和item两个小矩阵,用最小二乘法求解得到。但是它在实现上比较麻烦,Spark对SVD的实现性能不算太好。同时模型解释性也比较差。
Netflix Prize and SVD
Spark SVD -
FM
因子分解机的方法,纯粹的矩阵分解无法融入用户、物品的特征。FM能够结合显性变量和隐性变量,模型能够有效表达特征组合(实际应用基本只是两两组合),允许稀疏高维特征空间的参数估计。
Factorization Machines
深入FFM原理与实践
FM的改进版本包括FFM等等,都在百度、美团等公司的广告、推荐等系统广泛使用。
2.4 Tree-based ensemble模型
-
GBDT+LR
它是Facebook提出的经典模型,最核心地方是省去人工做特征工程的部分。AUC 有可能能做到0.8。这个模型有些人直接简化成用GBDT来预测,不同场景表现不太一样,但基本差异不大。它的缺点,其实就是Tree model的缺点,整体来讲model是历史数据的记忆,推广性较差。
Practical Lessons from Predicting Clicks on Ads at
Facebook
很多人喜欢用XGBoost框架,个人认为Spark的GBDT、LightGBM也差别不大。 -
GBDT+FM
基于FB这个思路,FM比LR能更好表达二维组合交叉特征,GBDT+FM能够在大规模稀疏特征空间有不错的性能表现。方法在Kaggle竞赛中拿到不错的名次。前些年ensemble框架是极其流行,工业界应用也是非常广泛。
2nd place solution for Avazu click-through rate prediction competition
2.5 基于深度学习的模型
-
Wide & Deep Model
以上基本都是传统ML的方法,它们有极其大量的变种和改进,但是思路没有本质变化。Wide & Deep Model 是google 提出的基于深度学习框架的CTR预估模型,它在youtube应用效果不错。它作用不止于此,属于用深度学习打开了传统CTR预估的大门,同时集成了传统ML和深度学习的优点。后续有无数的基于wide & deep 思想的深度学习的CTR预估模型算法。
https://arxiv.org/pdf/1606.07792.pdf -
DCN
Google提出的深度组合网络,在DNN基础上通过加入cross网络,能够在每层自动化进行特征组合。效果上主要对比了LogLoss,比LR有显著提升,比DNN也有一定提升。
Deep & Cross Network for Ad Click Predictions
-
DIN。
深度兴趣网络,阿里提出来的深度学习CTR预估模型,应用在阿里妈妈的广告预估上。主要是通过embedding的学习和多层感知机组合在端到端学习里面。前者刻画了淘宝用户的多重兴趣,后者将多种行为聚合成单一向量,据说效果非常好。
https://arxiv.org/pdf/1706.06978.pdf -
DeepFM。
FM是不错的ML模型,用深度学习来结合,得到一个更强的模型。
https://www.ijcai.org/proceedings/2017/0239.pdf
3. 其他部分
可以看到推荐系统不是一个简单的工程,涉及到内容、产品策略、客户端、服务端、大数据、推荐工程、推荐算法、评估体系等等一系列,这些组件环环相扣,存在大量变量和组合,也有漫长的迭代周期,相信每个公司在实践过程中有大量的独特的体验和收获。过去的关于所有这些推荐系统的建设经验局限于时间和工作因素,没有全部都写完, 以下还有补充两个部分,抛砖引玉 。
• AB测试平台是线上评估的必须。
https://www.jianshu.com/p/2fcdd25d3499
• 大数据的埋点非常重要,准备好最充分的数据原材料
https://www.jianshu.com/p/d45235b51601
本来还有实验部分、评估部分、实战内容,但是我当时比较困了,就不想写了。
网友评论