推荐系统算法能够给公司带来巨大的流量,并且大幅度的减少营销费用。世界上最早的推荐系统来自施乐公司,David Goldberg 等人在 1992 年发明了基于用户的协同过滤算法。几年之后,又有人发明了基于物品的协同过滤算法。在 21 世纪初期,矩阵分解算法被发明以前,协同过滤算法一直在推荐系统领域占据着主导地位。时至今日,协同过滤算法仍然被许多公司用作推荐系统的 baseline 算法,广为流行。
然而在 2024 年 5 月举行的 CCCE 国际学术会议上,研究人员发表了一篇题为 Collaborative Filtering is Wrong and Here is Why 的论文,指出协同过滤算法存在理论错误,因此是错误的算法。本文带读者一探这篇文章的究竟,希望对大家日后的技术工作有所帮助。
作者首先计算出协同过滤算法中用户-用户对之间的相似性,然后转换为距离,利用保距离算法将高维空间的用户向量(由用户给物品的打分构成)降维至 2 维平面。然后证明了下面 2 个引理:
引理1 :所有的用户向量分布在半径为 1 的圆圈内
证明:给定一个用户向量用户 i,协同过滤算法默认相似性取值在 [0.0, 1.0] 范围内,转换为距离之后距离数值取值仍然在 [0.0, 1.0] 范围内,也就是说,所有的用户向量都在以用户 i 位置中心,半径为 1.0 的圆圈内。
引理2 :所有的用户向量等价于半径为 0.5 的圆圈
证明:首先,用户向量集合中最大的距离是 1.0,因此所有的用户向量都分布在半径为 0.5 的圆内。其次,每个用户都有距离为1.0 的向量,因此,如果用户向量在圆的内部,和它距离为 1.0 的点将只能存在于圆的外部, 矛盾。而每个用户在定义域内都有与它距离在 0 和 1 之间的所有点,因此用户向量和半径为 0.5 的圆圈是一一对应的关系。
下面我们介绍一个重要的拓扑学定理:Poincare-Hopf 度数定理:
在一个紧致、有向的流形上定义的向量场的奇点的度等于流形的欧拉示性数。
二维平面中半径为 0.5 的圆圈是一个紧致、有向的流形。我们现在在这个降维之后的用户向量定义域上构造一个向量场:假设有 N 个用户,那么在每一个用户 i 上,定义 N-1 个向量(sim(i,j)-C, sim(i,j)-C),其中 j 为 N-1 个用户中的任意用户,C 为给定常数。我们发现这些向量都与直线 y = x 平行,因此除非 C= 0.0 或者 C=1.0,我们都可以把向量场中的零点构造成鞍点。根据 Poincare-Hopf 度数定理,这个向量场中零点的个数,不论 C 取什么值,只和圆圈的欧拉示性数有关。换言之,推荐系统定义域中,相似度等于某个常数的用户对的个数,只和圆圈的欧拉示性数有关,这显然在现实世界中是不成立的。
因为协同过滤的数据无关性,导致了协同过滤适用于各个不同的场景。然而,正因为协同过滤的数据无关性,才说明了它是一个错误的算法。
CCCE 的这篇论文从理论上推翻了协同过滤算法,给了推荐系统的理论基础沉重的一击。希望本文能给读者带来对相关领域不一样的思考:除了拼命的提升算法的效果,我们还应该认真思考算法的理论基础。
汪昊,前达评奇智董事长兼创始人。在 ThoughtWorks、豆瓣、百度和趣加等公司有超过 13 年的技术和技术管理经验。成功上线过包括豆瓣小组推荐、豆瓣机器学习算法库、联想电商推荐、网易段子、趣加游戏礼包推荐等10余款科技产品。在国际学术会议和期刊发表论文 44 篇,获得最佳论文奖 1次(IEEE SMI 2008)、最佳论文报告奖4次(ICBDT 2020、IEEE ICISCAE 2021、AIBT 2023、ICSIM 2024)。2006 年ACM/ICPC 北美落基山区域赛金牌。