编译:允中 若朴;编译自 Stats&Bots;
转自:量子位 公众号 【id: QbitAI 】,本文已获授权;
推荐系统,是当今互联网背后的无名英雄。
我们在某宝首页看见的商品,某条上读到的新闻,甚至在各种地方看见的广告,都有赖于它。
昨天,一个名为Stats&Bots的博客详解了构建推荐系统的五种方法。
量子位编译如下:
现在,许多公司都在用大数据来向用户进行相关推荐,驱动收入增长。推荐算法有很多种,数据科学家需要根据业务的限制和要求选择最好的算法。
为了简化这个任务,Statsbot团队写了一份现有的主要推荐系统算法的概述。
协同过滤(Collaborative filtering, CF)及其变体是最常用的推荐算法之一。即使数据科学的新手也可以用它来构建自己的个人电影推荐系统,起码可以写在简历上。
我们想给用户推荐东西,最合乎逻辑方法是找到具有相似兴趣的人,分析他们的行为,并向用户推荐相同的项目。另一种方法是看看用于以前买的商品,然后给他们推荐相似的。
CF有两种基本方法:基于用户的协同过滤和基于项目的协同过滤。
无论哪种方法,推荐引擎有两个步骤:
了解数据库中有多少用户/项目与给定的用户/项目相似。
考虑到与它类似的用户/项目的总权重,评估其他用户/项目,来预测你会给该产品用户的打分。
“最相似”在算法中是什么意思?
我们有每个用户的偏好向量(矩阵R的行),和每个产品的用户评分向量(矩阵R的列),如下图所示。
首先,我们只留下两个向量的值都已知的元素。
例如我们想比较Bill和Jane,已知比尔没有看泰坦尼克号,Jane没看过蝙蝠侠,于是,我们只能通过星战来衡量他们的相似度了。谁没看过星球大战呢是吧?
测量相似度的最流行方法是余弦相似性或用户/项目向量之间的相关性。最后一步,是根据相似度用加权算术平均值填充表中的空单元格。
这是一个非常优雅的推荐算法,因为当涉及到矩阵分解时,我们通常不会太多地去思考哪些项目将停留在所得到矩阵的列和行中。但是使用这个推荐引擎,我们清楚地看到,u是第i个用户的兴趣向量,v是第j个电影的参数向量。
所以我们可以用u和v的点积来估算x(第i个用户对第j个电影的评分)。我们用已知的分数构建这些向量,并使用它们来预测未知的得分。
例如,在矩阵分解之后,Ted的向量是(1.4; .8),电影A的向量是(1.4; .9),现在,我们可以通过计算(1.4; .8)和(1.4; .9)的点积,来还原电影A-Ted的得分。结果,我们得到2.68分。
上面两种算法都极其简单,适用于小型系统。在这两种方法中,我们把推荐问题当做一个有监督机器学习任务来解决。
现在,该开始用无监督学习来解决问题了。
假设我们正在建立一个大型推荐系统,这时协同过滤和矩阵分解花费的时间更长了。第一个浮现在脑海里的解决之道,就是聚类。
业务开展之初,缺乏之前的用户数据,聚类将是最好的方法。
不过,聚类是一种比较弱的个性化推荐,因为这种方法的本质是识别用户组,并对这个组内的用户推荐相同的内容。
当我们有足够数据时,最好使用聚类作为第一步,来缩减协同过滤算法中相关邻居的选择范围。这个方法还能挺高复杂推荐系统的性能。
每个聚类都会根据其中用户的偏好,来分配一组典型的偏好。每个聚类中的用户,都会收到为这个聚类计算出的推荐内容。
在过去的十年中,神经网络已经取得了巨大的飞跃。如今,神经网络已经得以广泛应用,并逐渐取代传统的机器学习方法。
接下来,我要介绍一下YouTube如何使用深度学习方法来做个性化推荐。
毫无疑问,由于体量庞大、动态库和各种观察不到的外部因素,为YouTube用户提供推荐内容是一项非常具有挑战性的任务。
根据《Deep Neural Networks for YouTube Recommendations》( https://static.googleusercontent.com/media/research.google.com/ru//pubs/archive/45530.pdf ),YouTube的推荐系统算法由两个神经网络组成:一个用于候选生成,一个用于排序。如果你没时间仔细研究论文,可以看看我们下面给出的简短总结。
以用户的浏览历史为输入,候选生成网络可以显著减小可推荐的视频数量,从庞大的库中选出一组最相关的视频。这样生成的候选视频与用户的相关性最高,然后我们会对用户评分进行预测。
这个网络的目标,只是通过协同过滤提供更广泛的个性化。
进行到这一步,我们得到一组规模更小但相关性更高的内容。我们的目标是仔细分析这些候选内容,以便做出最佳的选择。
这个任务由排序网络完成。
所谓排序就是根据视频描述数据和用户行为信息,使用设计好的目标函数为每个视频打分,得分最高的视频会呈献给用户。
通过这两步,我们可以从非常庞大的视频库中选择视频,并面向用户进行有针对性的推荐。这个方法还能让我们把其他来源的内容也容纳进来。
推荐任务是一个极端的多类分类问题。这个预测问题的实质,是基于用户(U)和语境(C),在给定的时间t精确地从库(V)中上百万的视频类(i)中,对特定的视频观看(Wt)情况进行分类。
如果你有一个庞大的数据库,而且准备提供在线的推荐,最好把这个任务拆分成两个子问题:
选择Top N个候选;
排序。
如衡量推荐模型的质量?
除了标准质量指标之外,还有一些针对推荐问题的指标:比如说召回率与准确率(https://en.wikipedia.org/wiki/Information_retrieval#Precision_at_K)。还有一些其他的指标,见《软件工程中的推荐系统》一书第12章(http://www.ict.swin.edu.au/personal/jgrundy/papers/rsse2014.pdf)。
如果你正在使用分类算法解决推荐问题,应该考虑生成负例样本。如果用户购买了推荐的商品,你应该将其添加为正例样本,而其他列为负例样本。
要从在线得分和离线得分两个方面考察算法质量。一个只基于历史数据的训练模型,可能会导致低水平的推荐,因为算法没办法与时俱进。
原创系列文章:
数据运营 关联文章阅读:
数据分析、数据产品 关联文章阅读:
80%的运营注定了打杂?因为你没有搭建出一套有效的用户运营体系
商务合作|约稿 请加qq:365242293
更多相关知识请回复:“ 月光宝盒 ”;
数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。