1. 推荐算法介绍
推荐算法早已无处不在,你以为你是在做你想做的事,实际上你只是在做别人想让你做的事。我们早已在推荐算法下无处遁形。本文粗略梳理了推荐算法的演化思路,不求做到算法技术上的全面和完整性,而更关注经典算法的发展和优化过程,试图能够从中获得算法创新的启发,以期提取出通用的算法创新思路。
2. 传统推荐算法
最简单的推荐方法,就是以产品受欢迎度来进行排序和推荐。这背后潜在的假设是:大众喜欢的东西新客户有大概率也会喜欢。即使到现在,很多场合我们也会下意识去用这种方法来进行选择。不过显然,这种方法的缺陷就是非个性化,无法做到结合喜好精准推荐。
个性化推荐则是利用用户的历史数据来对用户偏好进行推测,在大数据时代这也是必行之道。为了后续的计算,我们通常会把用户和产品看作一个二分网,连边是用户购买产品的历史记录。我们要做的是,通过这张二分网络,去推测用户 接下去最有可能购买的商品 (或者排名),这本质上其实是一个二分网络的连边预测问题。
2.1 协同过滤(Collaborative Filtering)
协同过滤是最为经典的推荐算法,其思路就是同时考虑相似性
和购买关系
。协同过滤也有两类,分别是基于用户的算法和基于商品的算法。
- 基于用户的协同过滤算法,其前提假设是:用户会购买那些和他相似的用户,所购买的商品。用户 对商品 的评分计算如下:
其中N是用户人数, 代表用户 和用户 的相似度, 代表用户 是否购买了商品 ,非0即1,本质是邻接矩阵中的一项。上式的分数最后汇总了这样的信息:汇总和用户 相似的其他用户 ,且相似度越大的用户,贡献权重也越大;其次筛选出也购买了商品 的人。最后将这些人的相似度求和作为最终的评价分数。
- 基于商品的协同过滤算法,其前提假设是:用户会购买那些和他购买过的商品相似,的商品。用户 对商品 的评分计算如下:
其中M是商品数量, 代表商品 和商品 的相似度,其他项含义同上。上式的分数最后汇总了这样的信息:汇总和商品 相似的其他商品 ,且相似度越大的商品,贡献权重越大;其次筛选出目标用户 是否购买过商品 。最后将这些商品相似度求和作为最终的评价分数。
协同过滤方法的核心是相似性的定义。而相似性定义也有很多,如共同邻居数量,余弦相似度,Jaccard等。
2.2 矩阵分解(Matrix Factorization)
矩阵分解是一个应用广泛的数学操作,通常可以用于信息压缩,特征提取等。也可以用来做用户和商品之间的推荐。
如果网络中有N个用户,M个商品,那么T矩阵的大小为N×M。矩阵解法将此矩阵分解为两个矩阵,W和V。他们的规模分别为N×K和K×M,用于描述用户选择商品的各维度偏好和商品在各维度上的特性(K≪N, K≪M)。
为了得到W和V,可以通过最小化T和WV的Frobenius距离来得到,相关算法如奇异值分解法(Singular value decomposition)已经很成熟。在得到W和V以后,我们计算 。那些原始网络中不存在的连边,在 矩阵中对应的元素值越大,未来越可能存在。
它可以用来预测连边上的权重。
3. 基于网络的推荐算法
基于网络的推荐算法在网络科学兴起后开始稳步发展,现在也基本处于一个稳定的状态。2010年发表于PNAS的一篇文章就提出了两个典型的网络推荐算法框架(PNAS 107, 4511 (2010)),分别是基于物质扩散(Mass diffusion)
和基于热传导(Heat conduction)
原理。后续的算法改进基本也是基于这两种思路进行扩展。
3.1 物质扩散
物质扩散算法计算用户 对其他商品 的评分步骤如下:
- 初始化,标记用户 购买过的所有商品为1
- 商品 用户,将商品端的评分均分给购买过该商品的所有用户
- 用户 商品,将用户端的评分均分为对应用户购买过的商品
均分过程类似于物质扩散过程,广延量可直接相加,总"质量"守恒。最终得到每个商品的得分即为用户 对于商品列表的偏好程度,筛选掉其购买过的商品即为最后的推荐结果。
3.2 热传导
热传导算法计算用户 对其他商品 的评分步骤如下:
- 初始化,标记用户 购买过的所有商品为1(该步骤没有区别)
- 商品 用户,将商品端的评分等价传递给购买过该商品的所有用户,用户端再把从不同来源获取到的评分取平均后作为该阶段最终得分
- 用户 商品,将用户端的评分等价传递给对应用户购买过的商品,商品端同上,去均值后作为该阶段最终得分
等价传递过程类似于热传导过程,强度量均化。最终得到每个商品的得分即为用户 对于商品列表的偏好程度,筛选掉其购买过的商品即为最后的推荐结果。
3.3 物质扩散和热传导的区别及二者耦合方法
上述两种方法的推荐特征是非常不同的。通常情况下物质扩散算法的精度会更高,但由于存在评分相加的步骤,所以对于大度节点来说往往会获得比较高的评分,而大度节点往往意味着热门商品。相反,热传导算法的精度可能很多时候都不如物质扩散算法,但由于其中的“均值”操作,度小的节点反而更有可能获得更高的评分,也就意味着此时冷门产品会获得较多的推荐。
在实际情况中,我们往往会采取二者结合的方式,使得推荐效果达到最佳。常用的结合方式有线性耦合和非线性耦合。
线性耦合是一种常用且通用的耦合方法,即将多种方法的结果进行线性组合:
非线性耦合则往往需要根据具体问题进行具体涉及,在这里可以采取引入指数项的方法调整效果。
上图展示的每一张图都代表了一个数据集下非线性耦合方法
的不同评价指标随着不同耦合参数的变化情况。每一纵列代表一类数据集(分别对应着用户和电影、音乐、书签的数据)。每一行代表的是不同的评价指标。我们先暂且建立这样的概念:前两个指标(前两行)描述的是推荐精度的变化,后两个指标(后两行)描述的是多样性指标的变化。具体的指标我们在下一章节给出详细的说明。
4. 推荐效果评价指标
在给出后续的效果提升之前,有必要先介绍下常用的推荐效果评价指标。对于推荐效果,通常会从推荐准确度
和推荐多样性
两个方面来进行评价。下面列举的5个指标中,前两个是用来评价准确度的,后三个用于评价多样性。
4.1 Ranking Score
排序得分是一个经典的评价指标,用于评价推荐的效果。上式中 代表商品 对于用户 推荐的排名(如1/10代表在10个产品里排名第1)。 是集合规模,作为归一化系数。 值越大代表推荐效果越好。
4.2 Precision
准确度是在实际推荐中另一常用指标,对用户推荐的前
个产品进行准确度的打分评价,更符合实际场景。
表示的是??
不过相比Ranking Score, 衡量的结果更加粗糙。通常这两个指标会同时使用。
4.3 Inter-similarity
Inter
和下文提到的Intra
相对,代表是衡量两个用户之间的推荐差异性(差异性越大越好)。
表示给用户 和用户 推荐的产品重合度的数量, 同样是推荐列表的长度。
4.4 Intra-similarity
Intra
是衡量对一个用户推荐结果差异性的衡量,差异度越大越好。(下方共识实际衡量的是相似性,相似性越小越好即可达到同样效果)
4.5 Novelty
该指标是衡量推荐“新颖性”,即避免推荐热门的产品,用下式计算值越低新颖性越强。
是商品 的度,即购买该商品的人数。
5. 方法提升
以上述方法为基础,我们也可以采用各种措施来对其效果进行优化。
最简单的方法就是优化初始化配置(initial configuration)
,原始方法的做法是对所有购买过的商品都分配相同的权重,而我们完全可以对不同商品分配不同权重,如给度小的产品更大的权重。更新后的方法可以用如下方式表示
表示权重,K是商品的度值。 是一个可调参数,当 时,上式代表放大热门推荐;当 时,即放大冷门推荐。在文献[EPL 81, 58004 (2008)]中证明, 在-0.8处可以得到最优推荐效果。
相似偏好传播方法(similarity-preferential diffusion)
的基本思路是,放大相似用户的权重。即在质量扩散或者热传导的过程中,给分配的分数一个大于1的
指数,从而可以使得相似的用户分配到更高的分数。[EPL 105, 58002 (2014)]
另外还有一些其他方面的优化方法,比如personalized parameters[Physica A392, 3417 (2013)]
个性化地设置参数优化推荐效果,virtual links[EPL 100, 58005 (2012)]
通过增加虚拟的连边优化评分扩散效果等等。
6. 讨论与总结
推荐算法是随着互联网兴起伴随而生的产物,随着大数据的持续发展和技术场景的复杂化,推荐算法的设计也需要持续根据实际需求进一步发展。一方面是可以扩大其使用范围,比如将其应用于带权网络,多层网络,含时网络等。另一方面可以更好的利用除网络拓扑结构外的其他信息,如用户的信息或者偏好,以获得更好的推荐效果和更好地解决冷启动问题。