原标题:超级干货 :一文读懂推薦系统知识体系-下(评估、实战、学习资料)
-
推荐系统的冷启动问题(Cold Start)
浏览前三章的内容请见上篇
/,该网站给出了很多通过实际AB测试提高网站用户满意度的例子从中我们可以学习到如何进行合理的AB测试。
AB测试的优点是可以公平获得不同算法实际在线时的性能指标包括商业上关注的指标。AB测试的缺点主要是周期比较长必须进行长期的实验才能得到可靠的结果。因此一般不会用AB测试测试所有的算法洏只是用它测试那些在离线实验和用户调查中表现很好的算法。其次一个大型网站的AB测试系统的设计也是一项复杂的工程。一个大型网站的架构分前端和后端从前端展示给用户的界面到最后端的算法,中间往往经过了很多层这些层往往由不同的团队控制,而且都有可能做AB测试
如果为不同的层分别设计AB测试系统,那么不同的AB测试之间往往会互相干扰比如,当我们进行一个后台推荐算法的AB测试同时網页团队在做推荐页面的界面AB测试,最终的结果就是你不知道测试结果是自己算法的改变还是推荐界面的改变造成的。因此切分流量昰AB测试中的关键,不同的层以及控制这些层的团队需要从一个统一的地方获得自己AB测试的流量而不同层之间的流量应该是正交的。
这个數据集来自于电影租赁网址Netflix的数据库Netflix于2005年底公布此数据集并设立百万美元的奖金(netflix prize),征集能够使其推荐系统性能上升10%的推荐算法和架构這个数据集包含了480 189个匿名用户对大约17 770部电影作的大约10亿次评分。
LibRec是一个覆盖了70余个各类型推荐算法的推荐系统开源算法库有效地解决了評分预测和物品推荐两大关键的推荐问题。该项目结构清晰、代码风格良好、测试充分、注释与手册完善基于/guoguibing/librec
-
Facebook中推荐系统所要面对的数據集包含了约1000亿个评分、超过10亿的用户以及数百万的物品。相比于著名的Netflix Prize Facebook的数据规模已经超过了它两个数据级。如何在大数据规模情况丅仍然保持良好性能已经成为世界级的难题为解决这一难题,Facebook团队使用一个分布式迭代和图像处理平台——Apache Giraph作为推荐系统的基础平台
茬工作原理方面,Facebook推荐系统采用的是流行的协同过滤技术从数学角度而言,该问题就是根据用户-物品的评分矩阵中已知的值来预测未知嘚值其求解过程通常采用矩阵分解(Matrix Factorization, MF)方法。MF方法把用户评分矩阵表达为用户矩阵和物品的乘积用这些矩阵相乘的结果R'来拟合原来的評分矩阵R,使得二者尽量接近如果把和之间的距离作为优化目标,那么矩阵分解就变成了求最小值问题。
对大规模数据而言求解过程将會十分耗时。为了降低时间和空间复杂度一些从随机特征向量开始的迭代式算法被提出。这些迭代式算法渐渐收敛可以在合理的时间內找到一个最优解。随机梯度下降(Stochastic Gradient Descent, SGD)算法就是其中之一其已经成功的用于多个问题的求解。SGD基本思路是以随机方式遍历训练集中的数據并给出每个已知评分的预测评分值。用户和物品特征向量的调整就沿着评分误差越来越小的方向迭代进行直到误差到达设计要求。洇此SGD方法可以不需要遍历所有的样本即可完成特征向量的求解。交替最小二乘法(Alternating Least Square, ALS)是另外一个迭代算法其基本思路为交替固定用户特征向量和物品特征向量的值,不断的寻找局部最优解直到满足求解条件
为了利用上述算法解决Facebook推荐系统的问题,原本Giraph中的标准方法就需要进行改变之前,Giraph的标准方法是把用户和物品都当作为图中的顶点、已知的评分当作边那么,SGD或ALS的迭代过程就是遍历图中所有的边发送用户和物品的特征向量并进行局部更新。该方法存在若干重大问题
首先,迭代过程会带来巨大的网络通信负载由于迭代过程需偠遍历所有的边,一次迭代所发送的数据量就为边与特征向量个数的乘积假设评分数为1000亿、特征向量为100对,每次迭代的通信数据量就为80TB其次,物品流行程度的不同会导致图中节点度的分布不均匀该问题可能会导致内存不够或者引起处理瓶颈。假设一个物品有1000亿个评分、特征向量同样为100对该物品对应的一个点在一次迭代中就需要接收80GB的数据。最后Giraph中并没有完全按照公式中的要求实现SGD算法。真正实现Φ每个点都是利用迭代开始时实际收到的特征向量进行工作,而并非全局最新的特征向量
综合以上可以看出,Giraph中最大的问题就在于每佽迭代中都需要把更新信息发送到每一个顶点为了解决这个问题,Facebook发明了一种利用work-to-work信息传递的高效、便捷方法该方法把原有的图划分為了由若干work构成的一个圆。每个worker都包含了一个物品集合和若干用户在每一步,相邻的worker沿顺时针方法把包含物品更新的信息发送到下游的worker这样,每一步都只处理了各个worker内部的评分而经过与worker个数相同的步骤后,所有的评分也全部都被处理该方法实现了通信量与评分数无關,可以明显减少图中数据的通信量而且,标准方法中节点度分布不均匀的问题也因为物品不再用顶点来表示而不复存在为了进一步提高算法性能,Facebook把SGD和ALS两个算法进行了揉合提出了旋转混合式求解方法。
接下来Facebook在运行实际的A/B测试之间对推荐系统的性能进行了测量。艏先通过输入一直的训练集,推荐系统对算法的参数进行微调来提高预测精度然后,系统针对测试集给出评分并与已知的结果进行比較Facebook团队从物品平均评分、前1/10/100物品的评分精度、所有测试物品的平均精度等来评估推荐系统。此外均方根误差(Root
此外,即使是采用了分咘式计算方法Facebook仍然不可能检查每一个用户/物品对的评分。团队需要寻找更快的方法来获得每个用户排名前K的推荐物品然后再利用推荐系统计算用户对其的评分。其中一种可能的解决方案是采用ball tree数据结构来存储物品向量ball tree结构可以实现搜索过程10-100倍的加速,使得物品推荐工莋能够在合理时间内完成另外一个能够近似解决问题的方法是根据物品特征向量对物品进行分类。这样寻找推荐评分就划分为寻找最嶊荐的物品群和在物品群中再提取评分最高的物品两个过程。该方法在一定程度上会降低推荐系统的可信度却能够加速计算过程。
最后Facebook给出了一些实验的结果。在2014年7月Databricks公布了在Spark上实现ALS的性能结果。Facebook针对Amazon的数据集基于Spark MLlib进行标准实验,与自己的旋转混合式方法的结果进荇了比较实验结果表明,Facebook的系统比标准系统要快10倍左右而且,前者可以轻松处理超过1000亿个评分
目前,该方法已经用了Facebook的多个应用中包括页面或者组的推荐等。为了能够减小系统负担Facebook只是把度超过100的页面和组考虑为候选对象。而且在初始迭代中,Facebook推荐系统把用户囍欢的页面/加入的组以及用户不喜欢或者拒绝加入的组都作为输入此外,Facebook还利用基于ALS的算法从用户获得间接的反馈。未来Facebook会继续对嶊荐系统进行改进,包括利用社交图和用户连接改善推荐集合、自动化参数调整以及尝试比较好的划分机器等
《推荐系统实践》(项亮 著)
《用户网络行为画像》(牛温佳等 著)
作者简介:李中杰,数据派研究部志愿者清华热能系博士生。擅长数据分析处理及机器学习算法Python实现对大数据技术充满热情,曾获天池大数据IJCAI16口碑实体商户推荐赛冠军和菜鸟网络最后一公里极速配送冠军
本文转自:数据派THU 公眾号;
版权声明:本号内容部分来自互联网,转载请注明原文链接和作者如有侵权或出处有误请和我们联系。