在亚马逊等网站购物时,网站一般会自动给出智能推荐,而推荐的商品大部分可能正是你所想要的。那么,它们究竟是怎么“猜”中你心思的呢?
关于作者
Joseph A. Konstan和John Riedl都是美国明尼苏达大学的计算机科学教授。Konstan还是Grouplens计划的领导者,IEEE高级会员,Riedl同为IEEE会员,他们协助创建了MovieLens推荐系统。原文链接:http://spectrum.ieee.org/computing/software/deconstructing-recommender-systems
因为工作需要,我们测试亚马逊网站在各个浏览器中的表现。网站不仅显示我们的名字表示欢迎,而且还给出一大堆的购物建议。其实现在不仅是网购,像视频、音乐、社交网站等等,也都提供个性化的建议。网站针对每个人的建议都不相同,大部分正好是你所需要的,它似乎比你更了解你自己。这些个性化建议到底怎么产生的呢?它们实际来自一个“推荐系统”。
推荐系统的发展前景
上世纪90年代中期,还只有很少的几个人在研究推荐系统,如今这方面的研发人员数以百计,为各大高校、大型在线零售商及许多相关企业服务。推荐系统能帮助消费者选择喜欢的产品,同时也帮了零售商促销,所以蕴含着巨大的商业潜力。
除了网购等网站上的应用,推荐系统在其他领域也开始大展手脚,比如高校使用它来引导学生课程,手机公司依靠它们来预测用户有可能换到哪一家供应商,会议组织者通过它可以将不同主题的论文分发最适合的的专家来审定等等。
尽管亚马逊等公司对自己的推荐系统秘而不宣,不过因为我们在推荐系统刚刚起步时就可始研发,对它们的后台运行有深入的了解。下面基于观察和推理,我们就来为大家解析其中的技术细节。
今天的推荐系统综合了多种方法,可以应用于多种领域
购物网站眼中的你
你有没有想过,你在购物网站亚马逊的眼中是个什么样子?真相有点冷:你只不过是网站巨大表格中的一行数据而已。这行数据记录了你在网站上看过哪些内容,点击过哪些链接,购买过哪些东西等。这个大表格中还有其他很多行数据,记录的是亚马逊其他数以百万计的购物者信息。你每次访问网站,表格中的数据会随之改变,反过来这行数据也会影响到你,比如它决定了你能看到什么,会收到什么样的优惠信息等。
推荐系统通过各种各样的方法收集和分析你的数据,目前的核心技术是“个性化协同推荐”。它们之所以能做到“个性化”的推荐,是因为它们跟踪了每个用户在网页上的行为,如浏览、购物、评分等,经过“协同”计算,找出你不一样的偏好,从而给出不一样的建议。它绝不是像传统的技术那样,仅仅通过分析关键字那么简单。
推荐系统通过协同计算给出个性化推荐
怎么找出不同人的相同偏好
Grouplens和Ringo都是基于一个称之为user-user(用户关联)的简单的协同算法。这种算法,根据两个用户之间有多少一致性的意见来计算他们的“距离”。例如,如果吉姆和简各给电影《Tron(电子世界争霸战)》5星,他们的距离就是0。如果吉姆再给电影《Tron: Legacy(创战纪,Tron续集)》5星,而简只给了3星,那他们俩之间的距离就拉大一点了。通过这种方法计算出来的口味接近的用户,称之为共享的邻域(neighborhood)。
不过用户关联的方法不是很完善。首先形成“邻域”就不容易:一方面有些东西许多人很少甚至没有打分,而另一方面,像流行大片,大家又都一边倒式的都喜欢,这两种情况都无法得出他们的共享爱好。
另外,虽然用户在网站上浏览点击改变用户之间的“距离”很容易,但是用户关联算法需要即时计算却有着巨大的运算量,可能没等到返回准确的推荐结果,用户已经去做其他的事情云了。
如何从物品之间找关联
上面用户关联的缺陷,可通过item-item(物品关联)算法来解决。物品关联计算的是书与书之间,或者电影与电影之间的距离,或者任何你依据相似度而关联在一起的用户之间的距离。比如,喜欢某甲的书的人给某乙的评分也很高,那么,某甲的书和某乙的书就可以归到同一个邻域中了。物与物之间的距离,可以从数以百万的用户评分中得出,相对来说有一个稳定的时间段(不会像用户关联算法那样变数太大),所以推荐系统可以预先计算距离和快速产生建议,对来访问的用户来说,可能就感觉不出其中的延迟了。
亚马逊和Netflix公开表示他们使用的是物品关联算法的升版,虽然没有透露更多技术细节,不过其中的原理应该大同小异。
用户关联和物品关联的示意图
化繁为简的降维算法
品味改变、心情改变、记忆淡化等,都可能造成评分的不确定性。上述的两种算法,在这方面的处理有点僵化。其实在十年前,研究人员就找出了一套更有效的方法,就是将类似因素归一的过程,称之为降维。只是它运算量巨大,所以一直发展缓慢。不过随着电脑性能越来越好价格越来越便宜,这两年它开始有了很大进展。
先来了解降维是怎么工作的。这里以每个人对食品的口味为例。以一个巨型矩阵(超大表格)记录上百万人的口味数据,每个人的口味信息占据一行。在你的信息行中,你可能给烤牛排评5星、红烧排骨4.5星、炸鸡翅2星、冻豆付卷1星、烤蘑菇5星、蒸毛豆4星,等等。
降维矩阵中的信息表格
推荐系统使用这个矩阵,它不会真的在乎你针对特定食品的特定评分,它是想总结出你喜好的一般性规律,再通过它来推断你对任意其他食品的评价。
例如,从上面的评分,推荐系统可以推断你喜欢牛肉、咸的东西及烤制食品,不喜欢鸡肉及油炸食品,对各种蔬菜则不喜欢也不讨厌,等等。这些口味属性或者说维度,比起食品的数量就小得多了——可能也就50到100个维度的样子(但是食品则可能成千上万)。通过比对这些维度,推荐系统可以快速判断某种新的食品是否是你喜欢的口味——比如盐焗排骨,与你的口感维度比较(咸的、牛肉、不是鸡肉、不是油炸、不是蔬菜、不是烤的)。这种更一般性的表现,使得推荐系统能够更准确地识别出虽然不是同一群体但却有相似喜好的用户。它大大压缩矩阵,使得推荐系统更有效率。
这是一个很酷的解决方案。但你如何找到这些口味维度?不要问厨师,实际上这些系统使用的是更精确的称之为“奇异值分解”的技术来计算维度的,它将原始的巨大矩阵分解为两大“口味矩阵”,一个包含所有用户和100种口味维度,另一个则包含所有的食品和100种口味维度,再附加第三个矩阵进行运算。
以数学的方式获取维度,既不形象也不直观,你无法识别数值代表着什么,比如说“咸”是什么味道。但是没关系,只要这些数值最终能形成一个准确的推荐就可以了。
降维矩阵推导用户口味
通过网络跟踪补充推荐
现在我们对购物网站如何快速猜出你的口味有了一个基本概念。推荐系统还有两个引人注目的特征:首先,它在搞明白你与其他购物者有多高的相似度之前,它必须先找出你真正喜欢的东西。其次,这一系统按照商业规则操作,确保它所给出的推荐既能让你觉得有用,又能让商家有利可图。
例如,亚马逊网上艺术商店有近千万的印刷品和海报出售(我最近一次看到的数据为900多万),它们通过多种方法收集你的数据:它会让你按5星制为艺术品打分,并且关注你点击放大了哪些图片,反复看了几次,哪些放入了想要购买的清单,以及哪些真正买下来,它还会跟踪你在看一幅绘画同时还看了其他哪些作品。依据你在网站上的浏览路径,网站会给出补充建议,并且结合你的购买记录及评分信息,为你创建一个长期的档案。
类似亚马逊这样的公司,收集大量用户的数据,在你登录网站后几乎所有的操作都会被它们保存下来以备将来之用。借助于浏览器的cookies,他们甚至还记录下匿名的购物者,当匿名购物者注册登录后,他们就把当初匿名记录的信息补充到现有的用户档案中。
不过随着数据隐私问题的越来越被大家重视,这方面的发展还有待进一步观察。
网站通过多种途径收集用户数据
推荐系统不会做的一些事
不是所有有相关性的东西都是值得推荐的,就拿香蕉来说,几乎每个去超市的人自觉都会买一些,如果还要向顾客推荐,既不能帮助到顾客,也不会增加香蕉的销量。这类物品,应该按照一定的准则,将它们排除在推荐结果之外。
总之,推荐系统研究还有许多方面需要突破,在已有系统上进行微调是不够的。但有一点是明确的:推荐系统只会变得越来越完善。(编译:流言)
联系客服