近期,IEEE Internet Computing上发表了一篇名为《亚马逊推荐系统二十年》的文章,提纲挈领地回顾了亚马逊推荐系统二十年来的发展,而这二十年的起点,就是基于物品的协同过滤算法,也就是ItemCF算法的发明时间,而文章的作者,也正是当年ItemCF的发明人。作为靠ItemCF算法养家糊口的从业人员,有必要学习一下“祖师爷”的训导。
在翻译的同时,译者根据自己的从业经验和个人想法,对本文进行了一些所谓的“批注”,以斜体的方式呈现在原文段落下方,希望能帮助读者更好地理解本文,也希望提供给大家一些另外的视角,抛砖引玉地引发大家的思考和讨论。
二十年以来[1],亚马逊一直致力于构建一个千人千面的商店。每个来到亚马逊网站的人看到的都不一样,因为网站针对他们的个人兴趣做了个性化。就如同你走进一个商店,商店架子上的商品开始重新排布,将你可能需要的排在前面,你不太可能喜欢的排在后面。
基于你当前的场景和你过去的行为,亚马逊的推荐系统从一个数以亿计的商品库中,为你挑选出少量你可能感兴趣的物品。背后的算法并不是什么魔法,它只是将其他人已经发现的信息与你共享。一切都由算法自动进行,在计算机的帮助下,人与人之间在隐性、匿名地互相帮助。
亚马逊在1998年上线了基于物品的协同过滤算法(下文简称ItemCF算法),将推荐系统推向服务百万级用户和处理百万级商品这样一个前所未见的规模。自从我们2003年在IEEE Internet Computing上发表关于这一算法的文章[2]之后,该算法在互联网上开始广泛流传,包括YouTube,Netflix和其他很多公司在内都在使用。该算法的成功来源于以下几个方面:
- 简单、可扩展。
- 经常能给出令人惊喜和有用的推荐。
- 可根据用户的新信息立刻更新推荐。
- 可解释性强。
在我们2003年发表的文章中描述的内容这些年来曾经面对很多的挑战,同时也经历了极大的发展。在这里,我们介绍ItemCF算法的一些进展、改进和改良,同时也会阐述我们在协同过滤、推荐系统和个性化未来发展发展的一些看法。
算法
译者批:英文中常用 the xxx来表示xxx的地位,例如乔丹在98年总决赛中的绝杀被称为the shot,本文这部分的标题叫做the algorithm,虽然作者本意并非如此,但译者觉得用这种方式来表示ItemCF算法在推荐系统中的地位也不为过。
如我们在2003年所描述的,ItemCF算法是很直观的。在90年代中期,协同过滤算法主要还是基于用户的,这意味着算法的第一步是要通过搜索所有的用户来计算某个用户在兴趣方面的相似用户(例如拥有相似的购买模式),之后再看这些相似用户看过哪些这个用户没有看过的东西。与之相反,我们的算法第一步是计算每个物品的相关物品。这里的“相关”可以表示多种含义,但在这里,我们可以将其模糊地定义为“买了一个物品的人具有超乎寻常的可能性(unusually likely)会买另外一个”所以,对于每个物品i1,我们希望得到所有购买了i1的用户会以超乎寻常的频率一起购买的i2。
译者批:其实UserCF也并不是一无是处,从计算形式上来讲它和ItemCF是完全对等的。UserCF适用于用户数的变化频率小于物品数的变化频率的场景,ItemCF则相反。当今的互联网环境下确实是更适合ItemCF发挥,但未来说不好也会有适合UserCF的场景。
一旦这张相关物品的表构建好,我们可以通过一系列的查找来构建推荐系统。对于一个用户当前场景下和历史兴趣中的每个部分,我们寻找到其相关物品,将它们结合起来得到用户最可能感兴趣的物品,过滤掉已经被看过或购买过的,剩下的就是就是待推荐的物品。
译者批:短短几句话就把推荐系统架构核心点透,祖师爷果然功力深厚。
这个算法相比于旧的基于用户的协同过滤算法具有很多优势。最重要的是,主要的计算都是在离线发生的——相关物品的批量计算——而推荐的计算过程可以通过实时的一系列查找来完成。推荐结果质量高并且有用,尤其是数据量充足时。虽然二十年来各种新算法在不断被发明,在可观测到的质量方面,ItemCF仍然极具竞争力。该算法可无损地扩展到亿级用户和千万级物品,而不需要抽样或其他会影响推荐质量的手段。该算法在用户兴趣更新时可以立刻随之更新。最后,该算法的结果可以用很直观的方式来解释,因为其来源就是用户记得自己曾经买过的物品列表。
2003年:亚马逊,Netflix,YouTube……
截至我们在2003年发表IEEE上的文章时,ItemCF已经在亚马逊广泛使用了